Questions tagged «binary-search»

3
为什么二元搜索比三元搜索快?
在搜索的阵列使用二进制搜索元素需要,在最坏情况下日志2次 Ñ迭代因为,在每一个步骤中,我们修剪我们的搜索空间的一半。相反,如果我们使用“三元搜索”,则每次迭代都将减少三分之二的搜索空间,因此最坏的情况应该是log 3 N &lt; log 2 N迭代...ññN日志2ñ日志2⁡ñ\log_2 N日志3ñ&lt; 日志2ñ日志3⁡ñ&lt;日志2⁡ñ\log_3 N < \log_2 N 似乎三元搜索更快,那么为什么要使用二元搜索呢?

2
为什么二进制搜索的big-O中的日志不是以2为底的?
我是了解计算机科学算法的新手。我了解二进制搜索的过程,但是我对其效率有些误解。 在元素的大小中,平均需要步骤才能找到特定元素。取双方的底数为2的对数,得出。那么二分查找算法的平均步数不是吗? n log 2(s )= n log 2(s )s=2ns=2ns = 2^nnnnlog2(s)=nlog2⁡(s)=n\log_2(s) = nlog2(s)log2⁡(s)\log_2(s) 维基百科有关二进制搜索算法的文章说,平均性能为。为什么会这样呢?为什么这个数字不是?log 2(n )O(logn)O(log⁡n)O(\log n)log2(n)log2⁡(n)\log_2(n)

2
二进制搜索和插值搜索相结合背后是否有任何研究或理论?
我刚刚读过该算法是否仍可以视为二进制搜索算法?并回顾了几年前,我写了一个索引器/搜索日志文件,以按日期/时间窗口在大型纯文本文件中查找日志条目。 在这样做的同时,我决定尝试插值搜索(我不知道那是什么,我自己偶然发现了这个想法)。然后出于某种原因,我继续采用交替插值步骤与二进制拆分步骤的想法:在步骤0上,我将进行插值以确定测试点,然后在步骤1上,我将采用精确的中点等。 然后,我使用纯插值搜索,纯二进制搜索和组合尝试对系统进行了基准测试。在找到一组随机选择的时间之前,在时间和所需测试数量上,交替方法无疑是赢家。 受链接问题的启发,我只是快速搜索了“交替插值搜索和二进制搜索”,却一无所获。我还尝试了“对冲插值搜索”,如对某个答案的评论所建议的那样。 我偶然发现了一个已知的东西吗?对于某些类型的数据,它有更快的速度吗?日志文件通常在时间上很大(例如1-2 GB的文本,可能要搜索1000万行),并且日期/时间在其中的分布非常复杂,包括大量的活动,一般的高峰时间和安静时间。我的基准测试是从均匀分布的目标时间中采样得出的。

3
仍然可以将此算法视为二进制搜索算法吗?
在执行第二个代码kata(要求您执行五次二进制搜索算法,每次使用不同的方法)时,我提出了一个略有不同的解决方案,其工作方式如下: 如果我有一个长度为100的排序数组,并且看到它的起始字段包含数字200而其终止字段包含数字400,那么作为数学研究人员,我可能会在搜索字段35周围开始搜索编号270,而不是普通二进制搜索算法中的字段50。 然后,如果数组的字段35上的数字是270,则35是我正在搜索的索引。 如果不是这种情况,我可以比较得到的数字(例如280),并重复执行数组下部的操作(所以我有35个字段,起始字段包含200,结束字段包含280),如果我找到的数字大于我要搜索的数字,或者大于数组的上部(例如,我有260个:现在我有65个索引,第一个包含260,最后一个包含400。定向,我会转向如果我得到的数字小于我要搜索的数字,则此子数组的索引4,即整个数组的索引39)。 问题是:可以将此算法视为二进制搜索算法吗?如果没有,它有自己的名字吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.