【发布时间】:2016-09-20 05:53:17
【问题描述】:
实现合并所需的操作数是:
:::::: 6n (logn+1)= 6nlogn+6n。
logn+1 是归并排序的层数。这里的 6n 是什么?
【问题讨论】:
实现合并所需的操作数是:
:::::: 6n (logn+1)= 6nlogn+6n。
logn+1 是归并排序的层数。这里的 6n 是什么?
【问题讨论】:
在粗合并排序的情况下:两次读取以比较两个元素,一次读取和一次写入以将较小的元素复制到工作数组,然后再进行另一次读取和另一次写入以将元素复制回原始数组,每个元素总共有 6 次内存访问(除了边界情况,例如到达运行结束时,在这种情况下,其他运行的剩余部分只是被复制而不进行比较)。更优化的合并排序通过根据合并通道(如果自下而上)或递归级别(如果自上而下)交替合并方向来避免复制回步,将 6 减少到 4。如果一个元素适合寄存器,那么在比较,元素将在寄存器中,不必重新读取,将 6 减少为 3。
【讨论】:
我不确定“什么是 6n”是什么意思?如果您询问算法的复杂性(合并排序),可以将其简化为 nlog(n)。您可以忽略问题中的系数,因为在考虑大 O 复杂性时它们可以忽略不计。在计算 nlog(n) + n 时,您也可以忽略 n,因为它会以比 nlog(n) 慢得多的速度增加。这会给您带来 nlog(n) 的复杂度。
【讨论】: