考虑到你的本意是要把它们“提炼”到最重要的部分,是否有有限的基本符号?
O(n^2):
O(n):
O(1):
O(log n)对数
哦(不!)阶乘
O(na)多项式
或者你是否需要计算出一些变化,比如O(n^4)等如果是,那是唯一的例外吗?X一的力量?
最佳答案
一般来说,你将大O符号(以及相关的Bachman-Landau符号,如大θ和大ω)提炼为增长最快的N项所以,你移除/简化了较小的项(N2+N==O(N2))和项的不可变系数(O(4N2)==O(N2)),而不是幂或指数基(O(34N)==O(3N))你也不会去除可变系数;n logn是nlogn,不是logn或n。
所以,如果复杂性是多项式(n的幂)或指数(基数的n次幂),通常只会看到大OH符号中的数字。最常见的大oh符号和您显示的一样多,加上nlogn(非常常见)。
然而,如果您正在区分两种相同的一般复杂度的算法,则可以添加较小的术语和/或系数来显示相对的差异;当与其他O(n)算法进行比较时,一种执行线性但有另一个指令的算法可能被描述为o(2n)。然而,单独来看,这两种算法都是线性的(O(N))。
一些大o符号不是代数的,可能涉及到最简单的一般情况形式的多个变量。计数排序,例如,是复杂性O(马克斯(n,m)),其中n是列表中元素的数目,m是这些元素的范围。通常,在特定情况下,可以通过用n来定义m,从而减少到单个变量(如果所讨论的列表是前n个平方,m=n2-1)来减少这一点,但在一般情况下,这两个变量都是独立的且有意义的。BucketSort的复杂性是正式的O(n),但实际上它更像是O(nLogm),其中m是n元素列表的最大值。M通常被认为是无关紧要的,但这取决于您通常排序的值(对十亿个值中的5个值进行排序需要更多的循环来比较10的每个幂,而不是遍历列表以将它们放入bucket)和使用的基数(radix sort是一个base-2bucketsort;同样,对log2值较大的值进行排序将需要更多的循环而不是遍历)。
关于algorithm - Big O表示法的预期语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9116997/