如果插入sort和mergesort占用1000个元素的相同时间,比如说1秒,每个算法分别对10 ^ 6个元素和10 ^ 9个元素进行排序需要多长时间?
插入排序和合并输出的大O分别为n ^ 2和n * log n。
这实际上是关于作业的一个侧面问题所以应该有一个可靠的答案。
请解释你的答案背后的理由。
答案 0 :(得分:1)
我的回答是这个问题无法回答,因为我们没有告诉任何关于元素大小以及mergesort获取所需工作内存的方式。 (插入排序需要不断的额外内存; mergesort需要额外的O(n)内存。)如果元素是100KiB,那么分配工作内存将花费大量时间。
答案 1 :(得分:0)
语法排序的时间复杂度为O(n^2)
,因此时间与要排序的元素数n
呈二次方式。如果n=1000
需要1秒钟,则n=10^6
需要1*(10^6/1000)^2=10^6
秒,n=10^9
需要1*(10^9/1000)^2=10^12
秒。 Mergesort时间复杂度为O(n*log(n))
。因此,可以相应地缩放时间,以发现n=10^6
需要2000秒而n=10^9
需要3*10^6
秒。由于O(n^2)
和O(n*log(n))
都高于O(n)
,我们可以忽略,比如说,为合并排序分配额外存储空间O(n)
所需的时间在大n
限制中并且仅基于排序时间复杂度进行估计。希望这会有所帮助。