【发布时间】:2021-04-08 08:34:42
【问题描述】:
我最近从许多不同的资源中对算法分析进行了大量研究,我目前感到困惑的一件事是,为什么时间复杂度通常根据算法执行的步骤/操作数来定义。
例如,在 Cormen 的 Introduction to Algorithms, 3rd Edition 中,他指出:
算法在特定输入上的运行时间是执行的原始操作或“步骤”的数量。定义 step 的概念很方便,使其尽可能独立于机器。
我已经看到其他资源也定义了时间复杂度。我对此有疑问,因为首先,它被称为时间复杂度,而不是“步骤复杂度”或“操作复杂度”。其次,虽然它不是一个确定的来源,但 answer 在 Stackoverflow 上的一篇文章中指出“运行时间是程序运行所需的时间。时间复杂度是对运行时间的渐近行为的描述,因为输入大小趋于无穷。”此外,在Wikipedia page 的时间复杂度上,它指出“在计算机科学中,时间复杂度是描述运行算法所需的计算机时间量的计算复杂度。”同样,这些都是确定的来源,使用这些定义是合乎逻辑的。
在分析算法并推导其时间复杂度函数时,如下图 1 所示,您会得到一个以时间为单位的方程。它可以表示算法执行的运算量,但前提是这些常数因子(C_1、C_2、C_3 等)的值均为 1。
综上所述,我只是想知道如何将其定义为步骤数,而实际上这并不是它所代表的含义。我正在尝试清理事情并在时间和操作次数之间建立联系。我觉得有很多信息在我研究过的资源中没有明确说明。希望有人可以帮助我解决问题,并且无需讨论 Big-O,因为在我看来,这是不需要的,并且错过了问题的重点。
感谢大家的时间和帮助。
【问题讨论】:
-
一个很大的原因是不同的计算机配置支持不同的操作时间,因此 CPU 性能的变化直接影响相同 nr 操作执行的速度
-
Computer Science 可能会更好,如果您同意,请标记要迁移的模组
标签: algorithm