【问题标题】:Big-O Computational ResourcesBig-O 计算资源
【发布时间】:2015-07-28 10:28:00
【问题描述】:

我知道衡量渐近复杂度可以基于你拥有的任何资源,无论是时间、内存使用情况、比较次数等。但是当涉及到排序时,我意识到我们通常将渐近符号与基本符号联系起来诸如交换/步骤数或比较数之类的操作。

更具体地说,我发现排序算法中的所有这些 Big-O 都是基于比较次数,而不是交换次数(例如,在选择排序中)。所以我们在这里假设比较比排序本身所需的实际步骤更昂贵?为什么比较如此流行?

在冒泡排序中,如果我们还包括在最坏情况下“冒泡”的次数,那么上限不会增加大约另一个 n2 吗?这个增幅很大。那么为什么我们在这里忽略它呢?

如果我错了,请纠正我。谢谢。

【问题讨论】:

  • "增加另一个 n^2" - 但它已经是 O(n^2)...
  • 我的意思是,我们一开始已经有 n^2,如果我们计算交换+比较,我们将得到 2n^2?
  • 但是 Theta(2 * n**2) = Theta(n**2);您可能需要重新了解您的增长顺序。
  • 我觉得你需要复习一下big-O的定义...

标签: algorithm sorting big-o computer-science asymptotic-complexity


【解决方案1】:

比较之所以如此重要,是因为您总是可以通过指针存储东西,最坏的情况是最坏的情况,并且对于任何类型的键都进行相同的交换。这些简单的系统技巧不适用于比较。按字典顺序比较字符串本质上比比较整数更昂贵。

至于你关于冒泡排序的n2的观点:它根本不会改变增长的顺序。

【讨论】:

    【解决方案2】:

    人们忽略其他 n^2 冒泡操作或类似操作的原因是,它们只会将复杂性作为一个常数因素做出贡献。

    在渐近复杂度中忽略了常数因素,因为顾名思义,渐近复杂度更关心当问题大小 n 增加时工作量增加了多少。如果一个算法具有恒定的复杂度,无论是 1 还是 100,它都不会随着 n 的增加而改变。所以常数因素不计算在内。

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-29
      • 2022-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多