Algorithm 关于大oh符号的歧义

Algorithm 关于大oh符号的歧义,algorithm,big-o,Algorithm,Big O,我目前正在尝试学习算法的时间复杂度、大o符号等等。然而,有一点让我很困惑。我知道在大多数情况下,数组的输入大小或我们正在处理的任何东西决定了算法的运行时间。假设我有一个大小为N的未排序数组,我希望在不使用任何特殊算法的情况下找到该数组的最大元素。我只想迭代数组并找到最大元素。由于我的数组的大小是N,因此此过程以O(N)或线性时间运行。设M是一个整数,它是N的平方根。因此N可以写成M的平方,即M*M或M^2。因此,如果我想用M^2替换N,我认为没有什么错。我知道M^2也是我数组的大小,所以我的大o

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

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

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


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

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

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