推荐答案1
假设 n元素 在集合中,遇到搜索元素的一般理解是:
(n/2^k)= 1
(lhs =按2缩小到1元素= rhs所需的分隔数)
=> 2^k = n
应用 log> log> log(base 2) <跨越两侧,我们得到:
=> log(2^k)= log n
对于您的问题,n =64.
k = log 64
k = 6 log 2
=> k = 6
但是,6是需要比较的平均/最坏情况数.最好的情况可能是1比较,如果搜索元素是首次迭代时中间的搜索元素.
谢谢 阅读.
推荐答案2
这取决于.如果您真的觉得自己必须进行二进制搜索,那么在最坏的情况下,几乎是64或6的日志基础.
问题以您可以一次尝试找到元素而无需使用任何比较的方式.
例如,如果数据键是8位,则可以具有向量有256个元素,其中64个实际上已满.您可以直接索引查看您想要的元素是否存在.
这是哈希的特定情况,也是哈希工作的其他方法.
哈希比二进制搜索要快得多,但不使用太多额外的空间.
推荐答案3
注意 - 二进制搜索仅应用排序,有序的列表.
我们知道,二进制搜索将log n base 2时间搜索特定元素.跨度>
如果集合中有n个元素,则选择二进制搜索,然后以log n base 2 time.
2)二进制搜索使用分类 平均值=(0+n)/2
3的元素总数的平均值分为两个部分.搜索元素要么大于平均值或较小或等于平均值.因此,这个问题分为 n/2和 进行直到搜索完成.
如果您将递归方程式应用于然后,二进制搜索算法然后
t(n)= t(n/2)+1 解决问题
n/2^k = 1
在两个方面登录log(2^k)
log n = k log 2
k = log n base 2.
您还可以使用 迭代 使用while循环或循环进行循环,并在循环中使用均值时,请在每个迭代中进行value时(index index) )是更新.如果您是任何问题,我写了迭代和递归类型的二进制搜索类型的C代码或算法.
在最好的情况下,搜索元素的时间为o(1).
谢谢
希望它有帮助.
推荐答案4
t(n)= t(n/2) + o(1)
这是binsearch的重新出现,其中有n个排序的对象.
<如您所见,它与
相似,因为(i = 0; i
简单地说,您的答案是log 64(ie 6)在最坏情况和1个比较中的比较在最好的情况下.
假设:binsearch始终在对象的排序列表上完成
推荐答案5
如果您问需要多少比较才能在有序数组中进行64个元素,则答案是最坏的情况下的7个:一个加上64个二进制日志.
如果您确定要在数组中寻找的内容,答案将是6.