二进制搜索在什么时候比顺序搜索更有效?

时间:2012-12-08 10:30:58

标签: c++ performance search

我最近一直在学习很多关于算法的知识,并且搜索到的二进制文件因其在大量排序数据中找到项目的效率而受到欢迎。但是,如果数据没有排序开始怎么办?在什么点上二进制搜索提供了对顺序搜索的效率提升,二进制搜索必须首先对给定数组进行排序然后搜索。我有兴趣看看二进制搜索在顺序搜索中传递了什么点,如果有人在我希望看到一些结果之前测试了这一点。

给定一个包含14个元素的数组foo [BUFF]

1 3 6 3 1 87 56 -2 4 61 4 9 81 7

我认为顺序排序会更有效地找到给定的数字,比方说... 3,因为二进制搜索需要首先对数组进行排序然后搜索数字3。但是:

给定一个数组栏[BUFF],其中包含一千个元素

1 2 4 9 -2 3 8 9 4 12 4 56 //continued

如果我没有弄错的话,理论上应该更有效地调用排序然后二元搜索。

2 个答案:

答案 0 :(得分:10)

在没有信息的未排序数组中,您将不得不进行线性时间搜索。

线性时间搜索会检查每个元素一次,因此它的复杂性为O(n)。将其与排序进行比较。排序算法必须多次检查每个元素,并且复杂度为O(n * log n)。因此,即使对其进行排序也比顺序搜索慢。即使二进制搜索是O(log n),当你只有任意排序的数据时它也没用。

如果您要多次搜索内容,请考虑先排序,因为从长远来看它会提高效率。

答案 1 :(得分:4)

如果您需要进行多次搜索,在搜索之前排序的速度会更快。如果你只需要找到一个元素,那么排序会更慢,因为排序必然要在某个时刻检查每个元素。

如果您正在进行多次搜索,可能需要先进行排序,但收支平衡点(线性搜索和预排序+二进制搜索之间)将取决于所需的搜索次数,元素数量,使用的排序算法,以及正在排序的数据。

相关问题