分治法(1)数学表示

基本思想
使用分治法就是将问题的输入集合拆分成多个子集,然后分别处理,最后再将结果合并。

基本定义
设问题的解决方案为 Y = F ( X ) Y=F(X) ,其中 X X 为问题的输入集合, F F 是问题的处理方法, Y Y 是问题的解。将 X X 拆分成多个子集以后,设这些子集的集合为 X = { X i i 1 , i > n } \mathbb{X}=\{X_i | i \geq1, i>n \} ,则 X \mathbb{X} 满足以下条件:
X 1 + + X 2 + + . . . + + X n = X X_1 ++ X_2 ++ ...++X_n = X

其中 + + ++ 表示集合连接符,用于直接连接两个子集,并保持原来的顺序,如 [ 1 , 2 , 3 ] + + [ 4 , 5 ] = [ 1 , 2 , 3 , 4 , 5 ] [1,2,3] ++ [4,5] = [1,2,3,4,5]

在拆分以后,分治法对每个子集独立处理,即 Y i = F ( X i ) Y_i = F(X_i) ,其中 X i X X_i \in \mathbb{X} ,则最终结果为:
Y = M a r g e ( Y 1 , Y 2 , . . . , Y n ) Y = \mathrm{Marge}(Y_1, Y_2, ..., Y_n)

其中,Merge函数用于将所有的子结果 Y i Y_i 进行合并的函数。

补充说明
如果不考虑子集合的顺序,可以将 X \mathbb{X} 表示如下:
{ X 1 X 2 X 3 . . . X n = X X i X j = , i j   a n d   X i , X j X \begin{cases} X_1 \cup X_2 \cup X_3 ... \cup X_n = X\\ X_i \cap X_j = \empty, i \neq j \:\mathrm{and}\: X_i, X_j \in \mathbb{X} \end{cases}

例如, [ 1 , 2 , 3 , 4 , 5 ] [1,2,3,4,5] 可以被拆分为奇数和偶数两个集合 [ 1 , 3 , 5 ] [1,3,5] [ 2 , 4 ] [2,4] .

知识扩展
在并行计算中,尤其是在著名的 MapReduce 框架中,map函数对应的就是 F ( X i ) F(X_i) ,而 reduce 函数对应的是 Merge( Y 1 , Y 2 , . . . , Y n Y_1, Y_2,..., Y_n ) 函数。

猜你喜欢

转载自blog.csdn.net/weixin_43145361/article/details/89510447
今日推荐