算法导论 26.3 Exercises 答案
26.3-1
基本思想是,只需要当前排序的数组长度小于等于某个很小的阈值 P-MERGE'
给出。其中 MEGRE'
和 MERGE
相比,表示将排序结果存储到
1 | P-MERGE'(A, p, q, r) |
26.3-2
通过对题目 9.3-10 给出的 MEDIAN3
进行改造,我们给出了一个程序 MEDIAN4
,它用于求解两个有序数组
1 | // 找出数组A[i : n], B[j : m]中的第k小数。 |
由此可以将 P-MERGE-AUX
修改成 P-MERGE-AUX'
,如下:
1 | P-MERGE-AUX(A, p1, r1, p2, r2, B, p3) |
先求解 P-MERGE-AUX'
的工作量
接下来求解 P-MERGE-AUX'
的持续时间
由于 P-MERGE-AUX'
的工作量和持续时间都不变,因此得到的 P-MERGE'
得到的工作量和持续时间和第 26.3 章分析的一样,分别为
26.3-3
PARTITION
的并行化版本 P-PARTITION
如下展示。
1 | // 令T[p, r]表示一棵二叉树T存储了区间[p, r]内所有数的相关信息,包括: |
我们可以首先并行化地构筑出一棵二叉树
因此,第一趟遍历首先是将这棵树的所有节点信息先处理出来(如 P-PARTITION-CAL
所示),由于这棵树一共有
第二趟遍历则是按照树给定的信息,自底向上地将所有元素填入新数组 P-PARTITION-FILL
所示)。这一部分的分析和第一趟类似,这一部分的工作量为
第三趟遍历则是将
也就是说,P-PARTITION
的工作量
26.3-4
给出的 FFT
的并行版本 P-FFT
如下:
1 | FFT(a, n) |
P-FFT
和其串行投影 FFT
的区别在于:将
可见其串行投影为普通的 FFT
,因此其工作量为
每次递归,它都会将两个大小恰好为一半的两个子问题进行递归计算,其余部分只需要 parallel for
循环以及
因此,P-FFT
的并行度为
26.3-5
1 | P-SELECT(A, p, r, i) |
修改后得到的 P-SELECT
算法如上。相比于 SELECT
,P-SELECT
将未满一个组的五个元素进行了延后处理。此外,套用题目 26.3-3 的结论,P-PARTITION-AROUND
可以由 PARTITION-AROUND
转化而来。其余部分只需要
因此,P-SELECT
的工作量 SELECT
的运行时间一样,为
P-SELECT
的持续时间
令
因此,P-SELECT
的并行度为