heyichao@sjzue.edu.cn 6.1分治法算法总体思想 分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 (类似于打仗一样。各个击破) 将求出的小规模的问题的解合并为一个更大规模问题的解,自底向上逐步求出原来问题的解。 分治法算法思想: 将数组分成两个: A[1...n/2] A[n/2+1...n] 分别在两个数组中寻找最大、最小值。 算法描述如下: stp4.以mm为中间数据,划分数组A为三个序列 A1={a|amm}; A2={a|a=mm}; A3={a|amm}。 step5.根据数据的条件进行如下处理: |A1|=k:第k小数一定在A1之中,所以对A1序列继续求解,递归调用select(A1,1,|A1|,k); |A1|+|A2|=k:第k小数就是mm; |A1|+|A2|k:第k小数肯定在A3中,|A1|+|A2|是全部序列中小于第k小数的全部元素个数。 则:select(A3,1,|A3|,k-|A1|-|A2|)。 例6.共有如下数据序列: 8、33、17、51、57、49、35、11、25、37、14
原创力文档

文档评论(0)