Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 为什么Heapsort的时间复杂度是O(nlogn)而不是O(log(n!)?_Algorithm_Sorting_Time Complexity_Complexity Theory_Heapsort - Fatal编程技术网

Algorithm 为什么Heapsort的时间复杂度是O(nlogn)而不是O(log(n!)?

Algorithm 为什么Heapsort的时间复杂度是O(nlogn)而不是O(log(n!)?,algorithm,sorting,time-complexity,complexity-theory,heapsort,Algorithm,Sorting,Time Complexity,Complexity Theory,Heapsort,Heapsort,每次它在中迭代时,heapsize都会减少1,因此时间复杂度应为Sigma(i=N到1)O(logi),这将导致O(logn!)。为什么我们不能将Heapsort的时间复杂度报告为O(logn!) 在回答这个问题时,我遇到了斯特林近似值,并意识到logn!->n logn作为n->inf。此外,我们之所以同意使用O(n logn)而不是O(logn!),即使log(n!)在很大范围内小于n logn,原因是什么呢?O(n logn)与O(logn!)n logn比logn有一些

Heapsort,每次它在中迭代时,heapsize都会减少1,因此时间复杂度应为
Sigma(i=N到1)O(logi)
,这将导致
O(logn!)
。为什么我们不能将Heapsort的时间复杂度报告为
O(logn!)


在回答这个问题时,我遇到了斯特林近似值,并意识到
logn!->n logn
作为
n->inf
。此外,我们之所以同意使用
O(n logn)
而不是
O(logn!)
,即使
log(n!)
在很大范围内小于
n logn
,原因是什么呢?

O(n logn)与O(logn!)n logn比logn有一些优势!(它更易于计算,并允许与其他基于比较的排序算法进行轻松比较)。Sedgewick在他的许多书中都对各种算法执行的比较次数进行了更精确的计算,这可能是你感兴趣的,而不是big-O。对不起,我投票结束了这个问题。我不认为这是一个真正的问题,因为它要么是一个历史研究(我们是如何选择n logn而不是logn!),要么是主观因素的权衡。O(n logn)和O(logn!)是渐近等价的,完全停止。顺便说一句,如果您想挑剔的话,每一次堆缩减都有一个与上限(Log(N))成比例的成本,并且总的成本是Log N!不是“更准确”。