【问题标题】:For Searching in unsorted Array which is best - linear or binary search用于在最佳的未排序数组中搜索 - 线性或二进制搜索
【发布时间】: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


【解决方案1】:

当您对同一个数组执行多个搜索时,排序和使用二分搜索很有意义。

设单次线性搜索的成本为a.N,排序的成本为b.N.lg(N),二分搜索的成本为c.Lg(N)

现在您比较 M.a.Nb.N.lg(N) + M.c.lg(N)M 搜索。盈亏平衡点在

M = b.N.lg(N) / (a.N - c.lg(N)) ≈ b.lg(N)/a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多