【问题标题】:Algorithmic complexity: why does ordering reduce complexity to O(log n)算法复杂度:为什么排序将复杂度降低到 O(log n)
【发布时间】:2011-09-03 12:43:11
【问题描述】:

我正在阅读一些关于算法复杂性的文章(我计划稍后参加算法课程),但我不明白以下内容。

假设我要在无序列表中搜索一个项目,找到它所需的步骤数将与该列表中的项目数成正比。在 10 个项目的列表中找到它可能需要 10 个步骤,对于 100000 个项目的列表执行相同操作可能需要 100000 个步骤。所以算法复杂度是线性的,用'O(n)'表示。

现在,此文本[1] 告诉我,如果我要按某个属性(例如社会安全号码)对列表进行排序,则查找项目的算法复杂度将减少到 O(log n),这是很多更快,当然。 现在我可以看到在 b 树的情况下会发生这种情况,但这如何应用于列表?由于英语不是我的母语,我是否误解了文本?

[1]http://msdn.microsoft.com/en-us/library/ms379571.aspx

【问题讨论】:

    标签: algorithm list sorting complexity-theory logarithm


    【解决方案1】:

    这适用于任何可随机访问的容器。在列表的情况下,您将首先转到中间元素。假设这不是目标,排序会告诉您目标是在上子列表还是下子列表中。这本质上变成了二分搜索,与通过 b-tree 搜索没有什么不同。

    【讨论】:

    • 好吧,那我理解对了,我有点糊涂了。文中还没有提到 b-trees,所以我想知道我是否理解正确。干杯。
    【解决方案2】:

    二分查找,如果目标较高,则检查中间,如果目标较高,则必须位于右侧,如果较小,则位于中间,依此类推。每次您将列表一分为二时,您都会得到 O(log n)

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 2023-03-30
      • 2020-01-07
      • 2018-11-26
      • 2015-06-12
      • 2021-11-11
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多