分治算法:谈一谈大规模计算框架MapReduce中的分治思想
MapReduce是Google大数据处理的三驾马车之一,另外两个是GFS和Bigtable
理解分治算法:
将原问题划分成n个规模较小,并且结构与原问题相似的子问题,递归的解决这些子问题,然后再合并其结果得到原问题的解
分治算法是一种处理问题的思想,递归是一种编程技巧,分治算法的递归实现中,每一层递归都会涉及这样三个操作:
- 分解:将原问题分解成一系列子问题
- 解决:递归解决各个子问题,若子问题足够小,直接求解
- 合并:将子问题的结果合并成原问题
分治算法应用举例分析
用有序度表示一组 数据的有序程度,逆序度表示一组数据的无序程度。
假设我们有n个数据,期望数据从小到大排列,那么完全有序的数据的有序度就是n(n-1)/2,逆序度是0,相反,倒序排列的数据的有序度是0,逆序度是n(n-1)/2
2,4,3,1,5,6 逆序对个数:4
(2,1) (4,3) (4.1) (3,1)
如何编程求出一组数据的有序对个数或者逆序对个数?
套用分治算法思想求数组A的逆序对个数,将数组分成前后两半A1 A2,分别计算A1 A2的逆序对个数K1 K2,然后再计算A1 A2的逆序对个数K3,数组A的逆序对个数&