【问题标题】:Ambiguity about the Big-oh notationBig-oh 符号的歧义
【发布时间】:2014-09-04 09:13:48
【问题描述】:

我目前正在尝试学习算法的时间复杂度、大 O 符号等。然而,有些地方让我很困惑。我知道大多数时候,数组的输入大小或我们正在处理的任何内容都决定了算法的运行时间。假设我有一个大小为N 的未排序数组,我想在不使用任何特殊算法的情况下找到该数组的最大元素。我只想遍历数组并找到最大元素。因为我的数组的大小是N,所以这个过程在O(N) 或线性时间运行。设M 是一个整数,它是N 的平方根。所以N可以写成M的平方,即M*MM^2。所以,我认为如果我想用M^2 替换N 并没有错。我知道M^2 也是我的数组的大小,所以我的大o 符号可以写成O(M^2)。所以,我的新运行时间看起来像在二次时间中运行。为什么会这样?

【问题讨论】:

    标签: algorithm big-o


    【解决方案1】:

    你是对的,如果碰巧你有一些变量M 使得M^2 ~= N 总是正确的,你可以说算法在O(M^2) 中运行。

    但是,请注意,现在 - 算法在 M 相关的二次方中运行,而不是与输入相关的二次方时间,它仍然与输入的大小线性相关

    【讨论】:

      【解决方案2】:

      这里重要的是定义线性/二次等。

      更准确地说,您必须详细说明有关某事物的线性/二次等(例如 N 或 M)。最自然的选择是研究复杂性。输入的大小(以 N 为例)。

      另一个大整数的陷阱是 n 的大小是 log(n)。因此,例如,如果您遍历所有较小的整数,则您的算法不是多项式的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 2012-05-07
        相关资源
        最近更新 更多