我使用二分搜索從O(log(n))時間的排序數組數組中搜索數字。對於搜索我的C函數如下:從小於O(log(n))運行時間的排序數組中搜索
search(int array[],int size,int search)
{
int first=0;
int last=size-1;
int middle = (first+last)/2;
while(first <= last)
{
if (array[middle] < search)
first = middle + 1;
else if (array[middle] == search)
{
printf("%d found at location %d.\n", search, middle+1);
break;
}
else
last = middle - 1;
middle = (first + last)/2;
}
if (first > last)
printf("Not found! %d is not present in the list.\n", search);
}
這裏size
是陣列的尺寸和search
是要搜索的數目。 有沒有什麼辦法可以減少上述程序的複雜度?
(1)'一定有辦法' - 爲什麼? (2)如果你的數組在RAM中,在32位系統中,log_2(n)<32'。這不好嗎? (3)你在尋找更好的漸近複雜度['Omega(logn)']還是更好的常量實現? – amit 2012-04-27 11:32:30
標準C定義了['bsearch()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/bsearch.html),它在O(log(n))時間內搜索數組。我相信在基於比較的搜索中你不能做得更好。 – pmg 2012-04-27 11:33:58
所有基於比較的算法都有logn的下限。 @pmg證明已經被用來支持你的信念。 – UmNyobe 2012-04-27 11:36:27