【发布时间】:2020-07-05 18:01:24
【问题描述】:
我们需要一个排序数组来执行二分查找。在那种情况下,时间复杂度已经大于线性搜索,那么在这种情况下线性搜索不是更好的选择吗?
【问题讨论】:
-
如果您需要排序一次然后搜索多次,排序成本将分摊到多次搜索中。
-
因为排序不是二分查找的一部分,而是对数据的要求。因此,对于单一查找排序 + 二分搜索可能比线性搜索慢,但与比较一个搜索与另一个搜索不同。
-
一位数学家朋友曾经对我说“嗯,log n 实际上是大 n 的常数!”换句话说,对于单次搜索,O(n log n) 实际上并不比 O(n) 差多少,这使得它非常值得作为对冲需要进行多次额外搜索的风险。
-
请注意,“排序”是元素的属性,并不意味着数组已经排序。例如
int a[] = {1,2,3,4,5};定义了一个排序数组。
标签: c++ algorithm binary-search linear-search