Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm O(n*logn)工作,然后O(n^2)工作的代码的复杂度是多少?_Algorithm_Data Structures_Time Complexity_Complexity Theory - Fatal编程技术网

Algorithm O(n*logn)工作,然后O(n^2)工作的代码的复杂度是多少?

Algorithm O(n*logn)工作,然后O(n^2)工作的代码的复杂度是多少?,algorithm,data-structures,time-complexity,complexity-theory,Algorithm,Data Structures,Time Complexity,Complexity Theory,我有一个算法,它首先在O(n*log(n))time中执行某些操作,然后在O(n^2)time中执行其他操作。总的复杂性是 O(n*log(n) + n^2) = O(n*(log(n) + n)) = O(n^2) 由于log(n)+n由+n?控制,因此该语句是正确的,因为O(n logn)是O(n^2)的子集;然而,一个正式的证明将包括选择和构造合适的常数。如果两者的调用概率相等,那么你是对的。但如果两者的概率不相等,则必须进行摊销分析,将罕见的昂贵呼叫(n²)拆分为许多快速呼叫(n lo

我有一个算法,它首先在
O(n*log(n))
time中执行某些操作,然后在
O(n^2)
time中执行其他操作。总的复杂性是

O(n*log(n) + n^2)
= O(n*(log(n) + n))
= O(n^2)

由于
log(n)+n
+n

控制,因此该语句是正确的,因为
O(n logn)
O(n^2)
的子集;然而,一个正式的证明将包括选择和构造合适的常数。

如果两者的调用概率相等,那么你是对的。但如果两者的概率不相等,则必须进行摊销分析,将罕见的昂贵呼叫(n²)拆分为许多快速呼叫(n log(n))


例如,对于快速排序(通常需要n log(n),但很少需要n²),由于摊销分析,您可以证明平均运行时间是n log(n)。

复杂性分析的规则之一是,您必须删除具有较低指数或较低因子的项

nlogn vs n^2 (divide both by n)

logn vs n
logn小于n,不能从复杂度方程中删除它


因此,如果复杂性为O(nlogn+n^2),当n非常大时,如果与n^2相比,nlogn的值并不重要,这就是为什么你删除它并重写为O(n^2)

这是正确的,n²项将占主导地位。我想你误解了这个问题。我认为这是一个由两个步骤组成的算法:一个在O(n logn)时间内运行,另一个在O(n²)时间内运行。不涉及概率。那么codor的答案是最好的