【发布时间】:2021-11-24 03:27:37
【问题描述】:
为什么我们甚至说二分搜索 (BS) 比线性搜索 (LS) 更好?就像我给 BS 和 LS 一个未排序的数组一样。我们需要为 BS 排序。所有内置排序算法的时间复杂度至少为 O(nlogn)。所以排序和查找的总时间复杂度是 O(nlogn+logn)=O(nlogn)。作为 BS 取 O(logn)。而 LS 只需要 O(n) 即可找到一个元素。 所以根据这个说法,LS比BS在List中搜索元素要好。
【问题讨论】:
-
当输入已经排序并且许多用例产生排序结果时,二进制搜索具有 O(logn) 复杂度,因此二进制搜索非常有用
-
没有人声称 BS 在未排序的数组中很好,至少只要您只运行 1 次搜索而不是一遍又一遍地搜索数组,此时最初的排序可能已经一个更好的主意。
-
您不能对未排序的数据进行二分搜索。好吧,您可以尝试,但结果可能参差不齐:-)。正是这种排序性使得决定在每次迭代中丢弃哪一半的解决方案空间成为可能。比如你要找42,中间元素是20,如果数据未排序,怎么知道42是在前半部分还是后半部分?
标签: c++ algorithm search data-structures