Math 大O代数简化
简化大O表达式的步骤Math 大O代数简化,math,data-structures,big-o,Math,Data Structures,Big O,简化大O表达式的步骤 我们省略了所有常数 我们忽略了n的次幂 例如: O(n+5)=O(n) O(n²+6n+7)=O(n²) O(6n1/3+n1/2+7)=O(n1/2) 这些例子我说得对吗?你几乎是对的。第二条规则应该是,当n趋于无穷大时,忽略除具有最大限制的项以外的所有项。如果术语不是n的幂,例如logs或其他数学函数,这一点很重要 还值得注意的是,大O符号有时会掩盖重要的其他细节。一个O(n logn)的算法将比O(n^2)的算法具有更好的性能,但前提是输入足够大,以使那些大多数项占据
O(n+5)=O(n)
O(n²+6n+7)=O(n²)
O(6n1/3+n1/2+7)=O(n1/2)
这些例子我说得对吗?你几乎是对的。第二条规则应该是,当
n
趋于无穷大时,忽略除具有最大限制的项以外的所有项。如果术语不是n
的幂,例如log
s或其他数学函数,这一点很重要
还值得注意的是,大O符号有时会掩盖重要的其他细节。一个
O(n logn)
的算法将比O(n^2)
的算法具有更好的性能,但前提是输入足够大,以使那些大多数项占据运行时间。这可能是因为对于您在特定应用程序中实际必须处理的输入大小,O(n^2)
算法实际上执行得更好 1。我们省略了所有常量
严格来说,你不会忽略所有常数,只忽略最外层的被乘数常数。这意味着O(cf(n))=O(f(n))
。加性常数也很好,因为
f(n)
从一些n
开始,因此O(f(n)+c)=O(f(n))
但在复合函数中不能忽略常量。有时可能会这样做(O(log(cn))
或者甚至O(log(n^c))
),但一般不会。例如,考虑代码< > 2 ^ 2n < /代码>,可能会放弃2,并将其放入<代码> O(2 ^ n)< /代码>,这是错误的。
2。我们忽略了n的低次幂
是的,但请记住,您并不总是使用多项式函数。通常可以忽略任何添加的渐近下函数。假设你有f(n)
和g(n)
,当g(n)=O(f(n))
时,那么O(f(n)+g(n))=O(f(n))
用乘法不能做到这一点