对问题进行任务分解需要灵活的应用上面的方法。递归分解,数据分解和搜索分解虽然有不同,但它们之间却不一定相互排斥,因此,在实际的应用中,为了得到更高的并行度,可以将这些分解方法组合使用。
前面我们讨论过快速排序算法,这个算法对大小为n的序列排序时,可以产生O(n)个子任务,但由于任务之间的依赖关系和任务分配的不均匀性,有效的并行性相当有限。比如,第一个任务(将初始序列分割为两个子序列)复杂度为O(n),这确定了并行算法的时间复杂度的下界。
快速排序也可以采用对输入数据进行分解的方法,对快速排序采用输入数据分解以及递归分解的方法可以得到一个更为高效的算法(思考,这个算法的复杂度是多少?)
|