我目前正在尝试学习算法的时间复杂度,大写符号等等。但是,有些观点让我很困惑。我知道大多数时候,数组的输入大小或我们处理的任何内容都决定了算法的运行时间。假设我有一个大小为N
的未排序数组,我想在不使用任何特殊算法的情况下找到此数组的最大元素。我只想迭代数组并找到最大元素。由于我的数组大小为N
,因此此过程在O(N)
或线性时间运行。设M
是一个整数,它是N
的平方根。因此,N
可以写为M*M
或M^2
的M的平方。所以,如果我想用N
替换M^2
,我认为没有错。我知道M^2
也是我的数组的大小所以我的大写符号可以写成O(M^2)
。所以,我的新运行时间看起来像是在二次时间运行。为什么会这样?
答案 0 :(得分:0)
这里重要的是定义线性/二次等等。
更确切地说,你必须对某些东西(你的例子中的N或M)详细说明线性/二次等。最自然的选择是研究复杂性。输入的大小(例如N)。
大整数的另一个陷阱是n的大小是log(n)。因此,例如,如果循环遍历所有较小的整数,则算法不是多项式。
答案 1 :(得分:0)
你是对的,如果碰巧你有一些变量M
使得M^2 ~= N
总是如此,你可以说算法在O(M^2)
中运行。
但是,请注意,现在 - 算法运行在与<{1}} 相关的二次方,而不是与输入相关的二次时间,它仍然线性相关的大小输入。