2012-11-08 48 views
0

是否有一個算法,將採取兩列數字,並確定它們是否有一個共同的價值?數字對齊算法

兩列:

每個值增加一個.3。另一個增加不規律。我想確定兩列是否有共同的價值。

.3 .1 
.6 .2 
.9 .4 
1.2 .5 
1.5 .9 
1.8 .13 
+0

是的,有這樣的算法。 –

+0

第一個總是從0.3開始嗎? –

+0

每個的初始值根據輸入而改變。 – Peregrine

回答

3

如果兩個串聯增加(或排序在一般),有一個O(n)溶液。你不能做得比這更好,因爲在最壞的情況下,你需要查看不斷增加的列表中的每個元素至少一次

簡單地以拉鍊式的方式同時遍歷兩者:始終從列表中獲取下一個元素,該元素當前比另一個元素小。

> .3 .1 < | > .3 .1 | > .3 .1 | .3 .1 | .3 .1 | .3 .1 
    .6 .2 | .6 .2 < | .6 .2 | > .6 .2 | > .6 .2 | > .6 .2 
    .9 .4 | .9 .4 | .9 .4 < | .9 .4 < | .9 .4 | .9 .4 
    .12 .5 | .12 .5 | .12 .5 | .12 .5 | .12 .5 < | .12 .5 
    .15 .9 | .15 .9 | .15 .9 | .15 .9 | .15 .9 | .15 .9 < 
    .18 .13 | .18 .13 | .18 .13 | .18 .13 | .18 .13 | .18 .13 

凡排序裝置相對於一total order

+0

是的,尋找更快的東西... – Peregrine

+0

由於您的列表一旦以0.3的速度穩步增加,您可以一次跳過幾個數字,當不規則增長的列表當前擁有更大的元素時。但除此之外,我認爲你不能做任何事情。儘管如此,你仍然不會比'O(n)'更快。 – phant0m

+0

謝謝。我將不得不在這套設備上工作。我真的很想O(log(n))。 – Peregrine