为什么我们不喜欢用 Big-O 表示法指定常数因子?

2024-01-12

让我们考虑一下经典的大 O 表示法定义 (证明链接 http://www.phil.uu.nl/datastructuren/10-11/knuth_big_omicron.pdf):

O(f(n))是存在正常数的所有函数的集合C and n0 with |g(n)| ≤ C * f(n), 对全部n ≥ n_0.

根据此定义,执行以下操作是合法的(g1 and g2是描述两种算法复杂性的函数):

g1(n) = 9999 * n^2 + n ∈ O(9999 * n^2)

g2(n) = 5 * n^2 + N ∈ O(5 * n^2)

将函数注释为以下形式也是合法的:

g1(n) = 9999 * N^2 + N ∈ O(n^2)

g2(n) = 5 * N^2 + N ∈ O(n^2)

正如你所看到的第一个变体O(9999*N^2) vs (5*N^2)更加精确,让我们清楚地知道哪种算法更快。第二个没有向我们展示任何东西。

问题是:为什么没有人使用第一个变体?


使用O()从一开始,符号就与“精确地”记录某事相反。其想法是掩盖算法之间的“精确”差异,并且能够忽略计算硬件细节以及编译器或编程语言选择的影响。的确,g_1(n) and g_2(n)都在同一个class(或集合)的函数n- 班上O(n^2)。它们在细节上有所不同,但它们足够相似。

事实上,这是一门课,这就是为什么我编辑了你的问题并更正了符号= O(9999 * N^2) to ∈ O(9999 * N^2).

顺便说一句 - 我相信你的问题更适合cs.stackexchange.com http://cs.stackexchange.com.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我们不喜欢用 Big-O 表示法指定常数因子? 的相关文章

  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • Php Define() 命名空间内的常量说明

    正如标题所示 我真的很想澄清这一点 我读过一些关于这个主题的文章和帖子 但有些东西不适合我 我会补充一点 我对 Php 有点陌生 好吧 这就是我想了解的 namespace Information define ROOT URL infor
  • C 中指向常量字符串的指针

    char p string creates pointer to constant string char p string just an array with string 我只是有点困惑为什么它在第一个示例中创建一个指向常量字符串的指
  • PHP 内置函数复杂性(isAnagramOfPalindrome 函数)

    我在过去的两个小时里一直在谷歌搜索 但找不到 php 内置函数时间和空间复杂度的列表 我有回文字谜 https stackoverflow com questions 4628386 what is the best algorithm t
  • Guice:Binder#bindConstant() 和 Binder#bind() 之间的区别 ... toInstance

    我想问一下有什么区别 bindConstant annotatedWith Names named keepAliveInterval to 60 and bind Integer TYPE annotatedWith Names name
  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • 具有多个退出点的代码段的循环复杂度

    我有这个验证密码的方法 Checks if the given password is valid param password The password to validate return code true if the passwo
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • n 或 nlog(n) 比常数时间或对数时间更好吗?

    在 Coursera 上的普林斯顿教程中 讲师解释了遇到的常见增长顺序函数 他说 线性和线性算术运行时间是 我们努力的目标 他的推理是 随着输入大小的增加 运行时间也会增加 我认为这是他犯了错误的地方 因为我之前听过他提到线性增长顺序对于高
  • JavaScript:常量属性

    在javascript中 我可以将对象的属性声明为常量吗 这是一个示例对象 var XU Cc Components classes or function aXU this Cc Components classes var XU new
  • 如何提高环复杂度?

    对于具有大量决策语句 包括 if while for 语句 的方法 循环复杂度会很高 那么我们该如何改进呢 我正在处理一个大项目 我应该减少 CC gt 10 的方法的 CC 并且有很多方法都存在这个问题 下面我将列出一些例如我遇到的问题的
  • 用于计算有向图上非循环路径数量的快速算法

    简而言之 我需要一个fast计算简单有向图中有多少条非循环路径的算法 By simple我的意思是没有自环或多重边的图 Apath可以从任何节点开始 并且必须在没有传出边的节点上结束 一条路径是acyclic如果没有边出现两次 我的图 经验
  • 在 C 中使用“const”,可能会导致什么移植问题?

    我想在 C 接口函数中使用 const 来注意某些 char 参数不会被函数修改 将此代码移植到各个平台时可能会造成什么麻烦 C 代码中对 const 的支持相当标准吗 这什么时候正式成为 C 标准的 我无法想象const不受任何编译器支持
  • 在外部声明非常量变量“const”在 C 中合法吗?

    假设我有一个文件 window h 它定义了 extern const int window width window height 我不希望任何人更改这些变量 因此它们对于 window h 的所有包含程序都是 const 但是 在源文件
  • 多项式时间复杂度中的负系数

    假设某些算法具有多项式时间复杂度T n 是否有可能任何一项的系数为负 直观上 答案似乎是明显的 否 因为任何算法都没有任何部分可以减少先前步骤所花费的现有时间 但我想确定一下 当谈论多项式复杂度时 只有次数最高的系数才有效 但我认为你可以有
  • 循环中的递归算法复杂度(运行时间)

    我想了解您对如何检测以下递归算法的 T n 运行时间 的意见 Charm 是一种用于发现事务数据库中频繁闭项集的算法 频繁闭项集列表是在一组交易 tids 中多次出现的频繁项 例如面包和牛奶是经常一起购买的物品 它们是通过将索引为 i 的当
  • Haskell GHC:具有 N 个构造函数的模式匹配的时间复杂度是多少?

    假设我们有以下 Haskell data T T0 T1 T2 TN toInt T gt Int toInt t case t of T0 gt 0 T1 gt 1 T2 gt 2 TN gt N 这里使用什么算法来执行模式匹配 我看到两
  • 求从1到N的所有数字的数字之和[重复]

    这个问题在这里已经有答案了 问题 求1到N 包括两端 所有数字的数字之和 时间复杂度应该是 O logN 对于 N 10 总和为 1 2 3 4 5 6 7 8 9 1 0 46 对于 N 11 总和为 1 2 3 4 5 6 7 8 9

随机推荐