math - 在 Big-O 术语中,如果 O(n-1) 与 O(n) 相同,那么为什么在主定理中 T(n-1) 不等于 T(n)?

标签 math big-o recurrence master-theorem

好吧,我对 CS 还很陌生,最近正在学习 Big-O、Theta 和 Omega 以及主定理,在讲座中我发现由于某种原因情况并非如此,并且想知道为什么那?

最佳答案

尽管 O(n) 和 T(n) 都使用外部大写字母和中间小写 n,但它们代表了根本不同的概念。

如果您使用递归关系分析算法,通常用 T(n) 表示算法在大小为 n 的输入上完成所需的时间。因此,我们不会期望 T(n) 与 T(n-1) 相同,因为在大多数情况下,当您给算法提供更大的输入时,算法需要更长的时间来运行。

更一般地说,对于任何函数 f,如果您想声明 f(n) = f(n-1),您需要解释为什么可以假设这一点,因为这通常事实并非如此。

这里棘手的一点是,当我们编写 O(n) 时,看起来我们正在编写一个名为 O 的函数并传入参数 n,但符号的含义完全不同。符号 O(n) 是“某个函数的占位符,当输入变得非常大时,该函数从上方以 n 的倍数为界”。类似地,O(n-1) 表示“某个函数,当输入变得非常大时,其上界以 n-1 的倍数为界”。碰巧的是,任何上面以 n 的倍数为界的函数也从上面以 n-1 的倍数为界,这就是为什么 O(n) 和 O(n-1) 表示相同的东西。

希望这有帮助!

关于math - 在 Big-O 术语中,如果 O(n-1) 与 O(n) 相同,那么为什么在主定理中 T(n-1) 不等于 T(n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62630597/

相关文章:

algorithm - 从无浪费的位序列中解码字母 ('a' .. 'z' )

java - 大 O 符号用于访问链表和二进制搜索中的中间元素?

python - 如何计算Python函数的算法复杂度?

algorithm - 如何解决这个递归关系: T(n) = T(n-1) * T(n-2)

algorithm - 代入求解递归方程

algorithm - 分析序列的算法

javascript - 向量,以最大速度计算运动力

math - 对推力从当前速度矢量到目标矢量的平滑变化进行编程

performance - childNodeWithName在SpriteKit中的表现如何?

android - 如何在 Kotlin 中计算百分比