要搜索一個非常大的數組,我在考慮一個複雜度小於log n的算法,這意味着它的順序不是小於log n的順序,但絕對小於log n.So我所做的並不是走到中間,而是向前移動一步,並檢查如果數字均勻分佈,我們必須進一步移動,移動到那個位置,如果這是一個解決方案,則另行計算我們必須移動多少futher,做反覆,直到找到解決方法 這裏有一個工作Java代碼: -在二進制搜索中搜索排序數組的複雜度較低
public class Search {
public static void main(String[] args) {
int a[]={12,15,16,17,19,20,26,27};
int required=27;
int pointer=0;
int n=1;
int diff;
int count=0;
int length=a.length;
while(a[pointer]!=required){
count++;
if ((pointer+n)>(length-1))
n=length-1-pointer;
if(n==0)
n=-1;
diff=a[pointer+n]-a[pointer];
pointer=pointer+n;
n=(required-a[pointer])*n/diff;
}
System.out.println(pointer);
System.out.println(count);
}
}
PS-我有一個數組是接近均勻分佈。
我想問一下它是否比二分查找更好?在哪些情況下它會失敗?什麼是最好的,平均的和最差的情況下的複雜度?
你在做什麼是一個糟糕的主意,幾乎在任何情況下都會減慢你的搜索速度。 – 2014-10-27 11:04:46
@Rafael你能解釋一下爲什麼? – user1598240 2014-10-27 11:06:54
唯一比二進制搜索更快的搜索是哈希。 O(1)複雜性。除此之外,二元搜索在複雜性方面幾乎是您所期望的最好的。 – TuanDT 2014-10-27 11:41:16