我有一个算法,首先在O(n*log(n))
时间执行某项操作,然后在O(n^2)
时间执行其他操作。我是否正确,总的复杂性将是
O(n*log(n) + n^2)
= O(n*(log(n) + n))
= O(n^2)
因为log(n) + n
由+ n
主导?
答案 0 :(得分:2)
该陈述是正确的,因为O(n log n)
是O(n^2)
的子集;然而,正式的证据就是选择和构造合适的常数。
答案 1 :(得分:0)
如果两者的通话概率相等,那么你是对的。但如果两者的概率不相等,则必须进行摊销分析,将罕见的昂贵电话(n²)分成许多快速呼叫(n log(n))。
例如,对于快速排序(通常需要n log(n),但通常需要n 2),您可以证明平均运行时间是n log(n),因为摊销分析。
答案 2 :(得分:0)
复杂性分析的一个规则是您必须删除具有较低指数或较低因子的术语。
nlogn vs n^2 (divide both by n)
logn vs n
logn小于n,而不是从复杂度方程中删除它
因此,如果复杂度为O(nlogn + n ^ 2),当n非常大时,如果与n ^ 2相比,nlogn的值不重要,这就是为什么要删除它并重写为O(n ^ 2)