【发布时间】:2012-05-08 03:39:27
【问题描述】:
我正在使用二进制搜索在 O(log(n)) 时间内从排序的数字数组中搜索一个数字。我的搜索 C 函数如下:
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)
there must be a way- 为什么? (2) 如果您的阵列在 RAM 中,在 32 位系统中,log_2(n) < 32。有那么糟糕吗? (3) 您是在寻找更好的渐近复杂度 [Omega(logn)] 还是具有更好常量的实现? -
标准 C 定义
bsearch()在 O(log(n)) 时间内搜索数组。我相信您无法通过基于比较的搜索做得更好。 -
所有基于比较的算法都有一个logn的下限。 @pmg 已经制作了证据来支持您的信念。
-
this question 的可能重复项。
标签: c algorithm search binary-search