第三篇 分治法.pdfVIP

  • 25
  • 0
  • 约4.08万字
  • 约 18页
  • 2017-06-22 发布于湖北
  • 举报
第三章 分治法 教学目标 掌握分治法的基本思想和求解步骤 理解分治法的精髓,即如何分?如何治?才能使得算法效率更高 通过实例学习,掌握运用分治法来解决实际问题的方法 凡治众如治寡,分数是也。—— 《孙子兵法》 任何一个可以用计算机求解的问题所需的计算时间都与其规模有关:问题的规模越小, 越容易直接求解,所需的计算时间也就越少。例如,对于 n 个元素的排序问题,当n=1 时, 不需任何计算;n=2 时,只要做一次比较即可排好序;n=3 时只要作 3 次比较即可……,当 n 较大时,问题就不那么容易处理了。可见,要想直接解决一个规模较大的问题,有时是很 困难的。那么,为了更好地解决这些规模较大的问题,分治法应运而生了。 在计算机科学中,分治法是一种很重要的算法。它采取各个击破的技巧来解决一个 规模较大的问题,该技巧是很多高效算法的基础,如排序算法(快速排序,归并排序) , 傅立叶变换(快速傅立叶变换)等。 3.1 概述 3.1.1 分治法的基本思想 分治法,字面上的解释是 “分而治之”,就是把一个复杂的问题分成两个或更多的 相同子问题,再把子问题分成更小的子问题……,直到最后各个子问题可以简单地直接 求解,对各个子问题的解进行合并即得原问题的解。 可见,分治法的基本思想是将一个难以直接解决的大问题,分解成一些规模较小的相同 问题,以便各个击破,分而治之。 那么,何时能、何时应该采用分治法来解决问题呢?即分治法所能解决的问题应该具备 哪些特征?从许多可以用分治法求解的问题中,我们看到这些问题一般具有以下几个特征: (1)问题的规模缩小到一定程度就可以容易地解决。 (2 )问题可以分解为若干个规模较小的相同子问题。 (3 )问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 (4 )问题分解出的子问题的解可以合并为原问题的解; 上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问 题规模的增大而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此 特征反映了递归思想的应用;第三条特征涉及到分治法的效率,如果各个子问题是不独立的, 则分治法要做许多不必要的工作——重复求解公共的子问题;第四条特征是关键,能否利用 分治法完全取决于问题是否具有第四条特征。 Print to PDF without this message by purchasing novaPDF (/) 58算法设计与分析 3.1.2 分治法的求解步骤 通常,分治法的求解过程都要遵循两大步骤:分解和治理。 步骤 1:分解。 既然是分治法,当然要对待求解问题进行分解,即将问题分解为若干个规模较小、相互 独立、与原问题形式相同的子问题; 那么,究竟该如何合理地对问题进行分解呢?应把原问题分解为多少个子问题才较适 宜?每个子问题是否规模相同才为适当?这些问题很难给予肯定的回答。人们从大量的实践 中发现,在用分治法设计算法时,最好使子问题的规模大致相同,即将一个问题分为大小相 等的 k 个子问题 (通常 k=2 ),这种处理方法行之有效。这种使子问题规模大致相等的做法

文档评论(0)

1亿VIP精品文档

相关文档