【问题标题】:Time complexity with respect to input关于输入的时间复杂度
【发布时间】:2019-07-08 13:35:23
【问题描述】:

这是我一直存在的疑问。例如,我有一个大小为 n^2 的二维数组(n 是行数和列数)。假设我想打印二维数组的所有元素。当我计算算法相对于 n 的时间复杂度时,它是 O(n^2 )。但是,如果我根据输入大小(n^2)计算时间,它是线性的。这两个计算都正确吗?如果是这样,为什么人们在二维数组的任何地方都只使用 O(n^2 )?

【问题讨论】:

    标签: time-complexity


    【解决方案1】:

    时间复杂度并非如此。你不能那样做“简单的数学”。

    范围为x 的二维方阵具有n = x*x 元素。打印这些n 元素需要n 操作(或n/m,如果您一次打印m 项),即O(N)。必要的工作随着元素的数量线性增加(顺便说一下,就数组范围而言,它是二次方的——但如果你在一个 4 维数组中排列相同数量的项目,它会有什么不同吗?显然,不。这不会神奇地使它成为O(N^4))。

    无论如何,您使用时间复杂度的东西并不是那样的东西。您希望时间复杂度告诉您的是,如果您将输入数量增加到超出某个限制,某些特定算法可能会如何改变其行为的大致概念。

    所以,您想知道的是,如果您对一百万件或 百万件物品执行 XYZ,它会花费大约 两倍的时间,还是会例如,它大约需要 16 倍

    时间复杂度分析与“小细节”无关,例如实际操作需要多少时间。这往往会使整个事物在现代架构中变得越来越学术化,实际上毫无用处,因为恒定因素(例如内存延迟或总线延迟、缓存未命中、故障、访问时间等)在它们大部分时间都保持不变的情况下发挥着越来越大的作用几十年来都是如此,而实际每步成本(指令吞吐量、ALU 功率等)随着每一代新计算机而稳步下降。

    在实践中,愚蠢的线性蛮力方法比具有更好时间复杂度的“更好”方法更快的情况经常发生,这仅仅是因为常数因素支配着一切。

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多