【发布时间】:2018-08-10 07:01:10
【问题描述】:
在Merge Sort中,每个元素的Divide步骤的运行时间在CLRS中被认为是theta(1),即常数时间。
我的困惑是:
让除法是一个基本操作,需要恒定的时间 C1。
现在,考虑伪代码
现在,当 MERGE-SORT 函数第一次调用时,将需要 C1 来划分输入 (注意:- 我们不考虑时间由 Merge 函数获取) 而这个 MERGE-SORT 会将输入 lg(n) 时间 ( 或者我们可以说它会称自己为 lg((n))次) 所以划分输入所花费的总时间应该是C1 * lg(n) 即 theta(lg(n))。
如果我们考虑到,那么 Divide Step 将需要 theta(1) 时间(作为整体)
注意:lg 是以 2 为底的对数
附言- 提前抱歉,因为我的英语达不到那个分数。欢迎编辑:)
【问题讨论】:
-
这里只是一个评论,库中合并排序的大多数实际实现都是bottom up merge sort的变体,其中除法步骤将n个元素的数组视为n次大小为1的运行,然后开始合并过程。混合自下而上合并排序可能首先使用插入排序对 k 个元素的组进行排序,然后对现在已排序的 n/k 个组使用合并排序。
标签: algorithm sorting mergesort