`
wbj0110
  • 浏览: 1553567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多
分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。     如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 分治法所能解决的问题一般具有以下几个特征:
该问题的规模缩小到一定的程度就可以容易地解决;
该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
利用该问题分解出的子问题的解可以合并为该问题的解;
该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。第四条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
分治法的基本步骤 分治法在每一层递归上都有三个步骤:
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;
合并:将各个子问题的解合并为原问题的解。
分享到:
评论

相关推荐

    计算机算法设计与分析的递归与分治策略

    递归与分治策略是学习计算机算法设计与分析的基础,掌握了这样的思想才能良好地高效率地去解决一些问题

    分治策略 线性时间选择

    分治策略 线性时间选择 分治策略 线性时间选择

    递归与分治策略.ppt

    理解递归的概念 掌握设计有效算法的分治策略:分治法的基本思想 通过范例学习分治策略的算法分析及设计技巧 二分搜索技术、大整数的乘法、Strassen矩阵乘法 合并排序和快速排序

    算法大作业源代码利用分治策略改进的FFT.zip

    算法大作业源代码利用分治策略改进的FFT算法大作业源代码利用分治策略改进的FFT算法大作业源代码利用分治策略改进的FFT算法大作业源代码利用分治策略改进的FFT算法大作业源代码利用分治策略改进的FFT算法大作业源...

    递归和分治策略算法实现

    本资源是从众多学生中选取出来的优秀范例,运行效率较高,包含完整可执行代码和详细算法...范例中包含了士兵战队,集合划分等5个基于递归与分治策略算法实现的问题,每个范例都有详尽代码和算法分析PPT!学习的好材料。

    L型骨牌(棋盘覆盖问题)---算法分析之分治策略

    算法分析与设计 课程中分治策略的典型例子,采用MFC文档编程可视化实现算法; 能够手动进行对棋盘的颜色填充,并能显示棋盘中的填充数值。 由于这是课程作业,时间紧而赶制的,封装性可能比较差。 我用的版本是C++...

    算法设计与分析 递归与分治策略.docx

    算法设计与分析实验报告:递归与分治策略,用python写的,附源码。主要处理问题如下: 1.ackerman函数实现; 2.大数划分; 3. 数据集合{1,2,3,4,5,6,7,8,9,10}的排列组合;

    递归与分治策略(从概念原理到多个实例的详细讲解)

    递归与分治策略,其中有用到数学归纳法。阶乘函数,Fibonacci数列,基于递归的插入排序,时间递归方程和复杂性分析,整数划分问题,Hanoi塔问题,分治法的适用条件,二分搜索算法,大整数的乘法,Strassen矩阵乘法,...

    实验二:归并排序的分治策略设计

    实验目的:掌握使用分治策略消除递归;基本掌握分治策略的原理方法。 实验原理: 分治策略 实验步骤:利用分治策略编程实现合并排序,教材P21-22; 问题描述:合并排序(MERGE SORT),是用分之策略实现对n个元素...

    数据结构中基于分治策略的排序算法探讨

    数据结构中基于分治策略的排序算法探讨数据结构中基于分治策略的排序算法探讨

    算法分析分治策略

    算法的分析,分治思想,能使同学能理解算法的思想,对学习语言能简单。

    递归与分治策略 递归与分治策略

    对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止

    《算法设计与分析》实验报告:实验一(分治策略)

    必做:n 用分治思想设计实现二分搜索、合并排序,并且用不同数据量进行实验对比分析。 选做:阶乘(递归与分治)。

    二分搜索算法(分治策略)报告.doc

    算法设计与分析实验报告,附已通过源码,供学习参考,共勉♪ 目录摘要如下: 1.问题描述 2.实验目的 3.实验原理 4.实验设计 ...(包括输入格式、算法、输出格式) ...(除了截图外,实验结果还用图表进行了分析) ...

    归并排序-分治策略

    本程序实现了系统自动生成100万个随机浮点数,然后分别调用本程序采用分之策略实现的归并排序算法和系统STL中的Sort()方法,对其排序的时间进行比较。

    递归与分治策略及其应用

    1. 编程实现整数的划分问题的递归算法 3. 编程实现特殊棋盘覆盖问题的求解

    分治策略——快速排序

    快速排序有很多不同的算法来解决,在此我是用C++来编写这个程序的,根据快速排序的算法思想,很容易将此问题解决。还可以运用非递归的方法解决,但是我不熟练。

    棋盘覆盖算法 ,算法设计与分析,递归与分治策略

    在一个2的k次方乘以2的k次方个方格的棋盘中,恰有一个方格与其他方格不同为特殊方格,棋盘称为特殊棋盘,用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

    递归与分治策略

    掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 大整数乘法; Strassen矩阵乘法; 棋盘覆盖; 合并排序 循环赛日程表 递归算法:直接或者间接调用自身的算法称为递归算法。 适合递归算法的问题...

Global site tag (gtag.js) - Google Analytics