基本思想
使用分治法就是将问题的输入集合拆分成多个子集,然后分别处理,最后再将结果合并。
基本定义
设问题的解决方案为
Y=F(X),其中
X 为问题的输入集合,
F是问题的处理方法,
Y是问题的解。将
X拆分成多个子集以后,设这些子集的集合为
X={Xi∣i≥1,i>n},则
X 满足以下条件:
X1++X2++...++Xn=X
其中
++表示集合连接符,用于直接连接两个子集,并保持原来的顺序,如
[1,2,3]++[4,5]=[1,2,3,4,5]。
在拆分以后,分治法对每个子集独立处理,即
Yi=F(Xi),其中
Xi∈X,则最终结果为:
Y=Marge(Y1,Y2,...,Yn)
其中,Merge函数用于将所有的子结果
Yi 进行合并的函数。
补充说明
如果不考虑子集合的顺序,可以将
X表示如下:
{X1∪X2∪X3...∪Xn=XXi∩Xj=∅,i̸=jandXi,Xj∈X
例如,
[1,2,3,4,5] 可以被拆分为奇数和偶数两个集合
[1,3,5] 和
[2,4].
知识扩展
在并行计算中,尤其是在著名的 MapReduce 框架中,map函数对应的就是
F(Xi),而 reduce 函数对应的是 Merge(
Y1,Y2,...,Yn) 函数。