关于Big-oh表示法的含糊不清

时间:2014-09-04 09:13:48

标签: algorithm big-o

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

2 个答案:

答案 0 :(得分:0)

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

更确切地说,你必须对某些东西(你的例子中的N或M)详细说明线性/二次等。最自然的选择是研究复杂性。输入的大小(例如N)。

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

答案 1 :(得分:0)

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

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