我正在攻读CS 125期末考试,并且简要介绍了Big O Notation。
鉴于:
如果要对数组进行排序,那么mergesort的总调用次数(激活次数)是多少?假设基本案例对单个值进行排序。
我会继续说,只需将32插入最坏情况或最佳情况(因为mergesort保证O(N lg(N))。
这不能给我正确的解决方案(显然是31)。有人可以提供一些指示或解释吗?我只是没有看到它。
答案 0 :(得分:3)
当32是2 5 时,递归树将是完整的二叉树。然后我们对mergesort进行1 + 2 + 4 + 8 + 16 + 32 = 63次调用。我不清楚为什么答案是31,当他们说基本情况是长度为1.显然他们不计算最后一级递归(或者他们假设你不会在长度为0时递归1)。
在您的原始尝试中,您将使用递归调用混淆运行时间。 Mergesort的O(n log n)是算法所做的元素之间比较次数的上限。因为我们想要计算递归调用的数量,知道这个绑定对我们没有任何好处(虽然知道算法如何工作)。
答案 1 :(得分:0)
因此,mergeSort 方法完成拆分工作,merge 方法完成征服工作。
对于 32 的列表大小,我认为有 63 次 mergeSort 调用,即 2 * 32 - 1 = 63。还有 31 次合并调用,即 32 - 1 = 31。