算法分析与设计总结
- 格式:doc
- 大小:17.00 KB
- 文档页数:3
第一章算法概述1.算法:解决问题的一种方法或过程;由若干条指令组成的有穷指令。
2.算法的性质:1)输入:有零个或多个输入2)输出:有至少一个输出3)确定性:每条指令是清晰的、无歧义的4)有限性:每条指令的执行次数和时间都是有限的3.算法与程序的区别➢程序是算法用某种程序设计语言的具体实现➢程序可以不满足算法的有限性4.算法复杂性分析1)算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性2)三种时间复杂性:最坏情况、最好情况、平均情况3)可操作性最好且最有实际价值的是最坏情况下的时间复杂性第二章递归与分支策略1.递归概念:直接或间接调用自身的算法2.递归函数:用函数自身给出定义的函数3.递归要素:边界条件、递归方程4.递归的应用✧汉诺塔问题void Hanuo(int n,int a,int b,int c){if(n==1) return;Hanuo(n-1,a,c,b);move(a,b)Hanuo(n-1,c,b,a);}✧全排列问题void Perm(Type list[],int k,int m){ //产生list[k,m]的所有排列if(k == m){for(int i = 0;I <= m;i++) cout<<list[i];cout<<endl;}else{for(int i = j; i<=m;i++){Swap(list[k],list[i]);Perm(list,k+1;m);Swap(list[k],list[i])}}}5.分治法的基本思想:将一个规模较大的问题分成若干个规模较小的子问题,这些子问题互相独立且与原问题相同。
6.分治法的使用条件:✓问题的规模缩小到一定程度可以容易地解决✓问题可以分解为若干个规模较小的相同问题✓利用原问题分解出的子问题的解可以合并为原问题的解✓各个子问题是相互独立的7.分治法的时间复杂度8.分治法的应用二分搜索1)时间复杂度 O(logn)2)参考算法快速排序1)快排的运行时间与划分是否对称有关2)时间复杂度O(nlogn)合并排序1)基本思想:将待排元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最总将排序好的子集合合并成所要求的排序好的集合。
第一章:算法定义: 算法是若干指令的有穷序列, 满足性质: (1)输入: 有外部提供的量作为算法的输入。
(2)输出: 算法产生至少一个量作为输出。
1. (3)确定性:组成算法的每条指令是清晰, 无歧义的。
2. (4)有限性:算法中每条指令的执行次数是有限的, 执行每条指令的时间也是有限的。
3. 程序定义: 程序是算法用某种程序设计语言的具体实现。
可以不满足算法的性质(4)。
4. 算法复杂性分为时间复杂性和空间复杂性。
5. 可操作性最好且最有使用价值的是最坏情况下的时间复杂性。
6. O(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)<=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=O(g(n)). 7. Ω(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)>=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=Ω(g(n)). 8. (n)定义:当f(n)=O(g(n))且f(N)=Ω(g(n)), 记作f(N)= (g(n)), 称为同阶。
求下列函数的渐进表达式: 3n2+10n ~~~O(n2) n2/10+2n~~~O(2n) 21+1/n~~~O(1) logn 3~~~O(logn) 10log3n ~~~O(n) 从低到高渐进阶排序: 2 logn n2/3 20n 4n2 3n n!第二章:1. 分治法的设计思想: 将一个难以直接解决的问题, 分割成一些规模较小的相同问题, 以便各个击破分而治之。
2. 例1 Fibonacci 数列 代码(注意边界条件)。
int fibonacci(int n) {if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2);}3. Ackerman 函数双递归。
A(1,1)代入求值。
A(1,1)=A(A(0,1),0)=A(1,0)=24. 全排列的递归算法代码。
算法分析与设计总结10008148 朱凌峰分析与设计总结算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:1、有穷性:一个算法必须保证执行有限步之后结束;2、确切性:算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
没有输出的算法是毫无意义的;5、可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
算法复杂度算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:1、有穷性:一个算法必须保证执行有限步之后结束;2、确切性:算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
算法设计期末总结在这个学期的算法设计课程中,我学到了许多关于算法设计和分析的知识和技巧。
通过课程的学习和实践,我对算法设计的原则、常用算法和问题求解的方法有了更深入的理解。
本文将对我在本学期算法设计课程中所学到的内容进行总结,并对未来的学习和发展提出一些展望。
一、算法设计的基本原则在算法设计的过程中,有一些基本原则是需要遵循的。
首先,算法应该是正确的,即能够解决给定的问题。
其次,算法的效率也是非常重要的,因为对于大规模问题,如果算法的时间和空间复杂度太高,将导致运行时间过长或者无法处理。
另外,算法应该是可读性和可维护性好的,便于其他人理解和修改。
最后,算法的稳定性也是需要考虑的,即对于输入的变化,算法的输出应该是一致的。
二、常用的算法和数据结构在算法设计中,有一些常用的算法和数据结构可以帮助解决大部分的问题。
其中,常见的数据结构有线性表、树、图等,而常用的算法有排序、查找、图算法等。
对于不同类型的问题,选择合适的数据结构和算法是非常重要的,可以大大提高算法的效率。
在课程的学习中,我对线性表、树和图等数据结构进行了详细的学习和实践。
线性表是一种最简单的数据结构,常见的有数组和链表。
对于线性表的操作,如插入、删除、查找等,有不同的实现方法和时间复杂度。
树是一种常见的非线性结构,有很多种类型,如二叉树、堆等。
树的遍历和查找是树算法中常见的操作。
图是一种复杂的数据结构,由节点和边组成,有很多种表示方法和算法。
图的遍历和最短路径算法是图算法中重要的内容。
此外,排序算法是算法设计中重要的一部分。
我学习了冒泡排序、插入排序、选择排序、快速排序、归并排序等常见的排序算法,并对它们的思想、实现和时间复杂度有了更深入的理解。
三、问题求解的方法在算法设计中,我们经常需要求解各种类型的问题,如搜索问题、优化问题等。
对于不同类型的问题,有一些常见的求解方法可以参考。
其中,穷举法、贪心法、动态规划法是常见的求解方法。
穷举法是一种简单直观的求解方法,它通过枚举所有可能的解来找到问题的解。
算法设计与分析总结一、算法引论算法:通常人们将算法定义为一个有穷的指令集,这些指令为解决某一特定的任务规定了一个运算序列。
什么是算法?计算机来解决的某一类问题的方法或步骤。
算法是程序的核心。
算法的两个要素:算法是由操作与控制结构两个要素组成。
(1)操作①算术运算:加、减、乘、除等。
②关系运算:大于、大于等于、小于、小于等于、等于、不等于等。
③逻辑运算:与、或、非等。
④数据传送:输入、输出、赋值等。
(2)控制结构各操作之间的执行顺序:顺序结构、选择结构、循环结构,称为算法的三种基本结构一个算法应当具有以下特性:1、输入。
一个算法必须有0个或多个输入。
它们是算法开始运算前给予算法的量。
2、输出。
一个算法应有一个或多个输出,输出量是算法计算的结果。
3、确定性。
算法的每一步都应确切地、无歧义的定义,对于每一种情况,需要执行的动作都应严格的,清晰的规定。
4、有穷性。
一个算法无论在什么情况下都应在执行有穷步后结束。
5、有效性。
算法中每一条运算都必须是足够基本的。
原则上都能够被精确的执行。
6、一个问题可以有多个解决的算法。
程序可以不满足条件4。
计算机程序是算法的实例,是算法采用编程语言的具体实现。
算法的分类:(1)数值计算算法(2)非数值计算算法算法的表示:1、自然语言2、传统流程图3、N-S流程图4、伪代码5、计算机语言计算机程序设计中有两个核心目标:1、算法必须是易于理解,编码和调试的2、设计的算法能够最有效的使用计算机的资源。
目标1是软件工程的概念 ;目标2是数据结构和算法设计的概念 ;判断一个算法的优劣,主要有以下标准:1、正确性:要求算法能够正确的执行预先规定的功能和性能要求。
2、可使用性:要求算法能够很方便的使用。
3、可读性:算法应当是可读的,这是理解、测试和修改算法的需要。
4、效率:算法的效率主要指算法执行时计算机资源的消耗,包括存储和运行时间的开销。
5、健壮性:要求在算法中对输入参数、打开文件、读文件记录、子程序调用状态进行自动检错、报错并通过与用户对话来纠错的功能,也叫作容错性或例外处理。
算法分析与设计知识点算法是计算机科学中非常重要的一个概念,它是解决问题的有效方法和步骤的描述。
在实际的软件开发过程中,算法的设计和分析是必不可少的环节。
本文将介绍一些算法分析与设计的知识点,帮助读者更好地理解和运用算法。
一、算法分析的重要性在计算机科学中,算法的分析是一项关键任务。
通过对算法进行深入分析,我们可以评估其效率和性能,并选择最优算法来解决特定问题。
算法分析的重要性体现在以下几个方面:1. 时间复杂度:算法的时间复杂度描述了算法在输入规模增大时所需要的时间。
通过对算法的时间复杂度进行分析,我们可以预估算法的运行时间,从而选择更加高效的算法。
2. 空间复杂度:算法的空间复杂度描述了算法在运行过程中所需要的额外空间。
通过对算法的空间复杂度进行分析,我们可以评估算法对内存的消耗,避免出现内存溢出等问题。
3. 算法效率:通过算法分析,我们可以比较不同算法的效率和性能,选择合适的算法来解决问题。
高效的算法可以减少计算时间和资源消耗,提高程序的运行速度。
4. 问题复杂度:算法分析还可以帮助我们理解和评估问题的复杂度。
对问题的复杂度进行分析,有助于判断是否存在多项式时间解决问题的算法,并帮助我们进一步优化算法。
二、常见算法设计方法在算法设计中,有许多常见的设计方法可以帮助我们解决不同类型的问题。
以下是几种常见的算法设计方法:1. 贪心算法:贪心算法是一种简单而高效的算法设计方法。
在每个步骤中,贪心算法总是选择当前最优解,而不考虑未来可能带来的影响。
贪心算法通常用于求解一些最优化问题,如背包问题和最小生成树问题。
2. 动态规划:动态规划是一种将复杂问题分解成较小子问题的方法。
通过记忆已解决的子问题的解,动态规划可以避免重复计算,并提高算法的效率。
动态规划常用于求解最短路径问题、最长公共子序列等。
3. 分治算法:分治算法是一种将大问题分解成相互独立的小问题,并逐个解决的方法。
通过将问题分解为多个子问题,分治算法可以简化问题的求解过程。
算法设计与分析报告在当今数字化的时代,算法无处不在,从我们日常使用的智能手机应用到复杂的科学研究和金融交易系统,都离不开算法的支持。
算法设计与分析作为计算机科学的核心领域之一,对于提高计算效率、优化资源利用以及解决实际问题具有至关重要的意义。
算法,简单来说,就是为解决特定问题而制定的一系列清晰、准确的步骤。
一个好的算法不仅要能够正确地解决问题,还需要在时间和空间复杂度上尽可能地高效。
这就要求我们在设计算法时,充分考虑问题的特点和约束条件,选择最合适的算法策略。
在算法设计的过程中,首先要对问题进行深入的理解和分析。
明确问题的输入和输出,以及所期望达到的目标。
例如,在排序问题中,我们需要将一组无序的数据按照一定的顺序排列。
常见的排序算法有冒泡排序、插入排序、选择排序、快速排序等。
对于较小规模的数据,冒泡排序和插入排序可能是简单而有效的选择;而对于大规模的数据,快速排序通常能够提供更好的性能。
接下来,我们要根据问题的特点和要求选择合适的算法策略。
算法策略可以大致分为贪心算法、分治算法、动态规划、回溯算法等。
贪心算法通过在每一步都做出当前看起来最优的选择来逐步逼近最终的解,但并不一定能得到全局最优解。
分治算法则是将一个大问题分解为若干个规模较小且相互独立的子问题,分别求解这些子问题,然后将子问题的解合并得到原问题的解。
动态规划通过保存已解决子问题的结果,避免重复计算,从而有效地解决具有重叠子问题的优化问题。
回溯算法则是一种通过尝试逐步构建解,如果发现当前构建的解不满足条件就回溯并重新尝试的方法。
以背包问题为例,如果我们要在有限的背包容量内选择一些物品,使得物品的总价值最大,就可以使用贪心算法或者动态规划来解决。
贪心算法可能会在某些情况下得到次优解,而动态规划则可以保证得到最优解,但在实现上相对复杂一些。
在算法的实现过程中,数据结构的选择也非常重要。
数据结构是组织和存储数据的方式,不同的数据结构适用于不同的算法和操作。
算法设计与分析心得在当今数字化的时代,算法无处不在,从我们日常使用的手机应用到复杂的科学研究,从金融交易到交通管理,算法都在发挥着至关重要的作用。
作为一名对算法设计与分析充满兴趣和探索欲望的学习者,我在这个领域中经历了一段充满挑战与收获的旅程。
算法,简单来说,就是解决特定问题的一系列清晰、准确的步骤。
它就像是一本精心编写的指南,告诉计算机在面对各种情况时应该如何做出决策和处理数据。
而算法设计与分析,则是研究如何创造出高效、正确的算法,并评估它们在不同场景下的性能。
在学习算法设计的过程中,我深刻认识到了问题的定义和理解是至关重要的第一步。
如果不能清晰地明确问题的要求和约束条件,那么后续的设计工作就很容易偏离方向。
例如,在解决一个排序问题时,我们需要明确是对整数进行排序还是对字符串进行排序,是要求稳定排序还是非稳定排序,以及数据规模的大小等。
只有对这些细节有了准确的把握,我们才能选择合适的算法策略。
选择合适的算法策略是算法设计的核心。
这就像是在众多工具中挑选出最适合完成特定任务的那一个。
常见的算法策略包括分治法、动态规划、贪心算法、回溯法等。
每种策略都有其适用的场景和特点。
分治法将一个大问题分解为若干个规模较小、结构相似的子问题,然后逐个解决子问题,最后合并子问题的解得到原问题的解。
动态规划则通过保存子问题的解来避免重复计算,从而提高效率。
贪心算法在每一步都做出当前看起来最优的选择,希望最终能得到全局最优解。
回溯法则通过不断尝试和回退来寻找问题的解。
以背包问题为例,如果我们要求在有限的背包容量内装入价值最大的物品,贪心算法可能会因为只考虑当前物品的价值而忽略了整体的最优解。
而动态规划则可以通过建立状态转移方程,计算出在不同容量下能获得的最大价值,从而得到准确的最优解。
在实现算法的过程中,代码的准确性和可读性同样重要。
清晰的代码结构和良好的注释能够让我们更容易理解和维护算法。
而且,在实际编程中,还需要考虑边界情况和异常处理,以确保算法的健壮性。
桂林理工大学算法分析与设计课程总结指导老师:董明刚班级:计本07-3班姓名:覃立泉学号:30704171212010/6/10前言算法设计与分析是一门面向设计,且处于计算机学科核心地位的课程,是计算机软件开发人员必修课,软件的效率和稳定性取决于软件中所采用的算法。
对于一般程序员和计算机专业学生,学习算法设计与分析课程,可以开阔编程思路,编写出优质程序。
使学生掌握算法设计过程与方法,并学会分析算法的时间复杂度、空间复杂度和稳定性,具有问题抽象和建模的初步能力,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法进行复杂性分析奠定坚实的理论基础。
课程内容包括:算法与程序设计简介、穷举与回溯、递归与分治、递推、贪心算法、动态规划算法等。
程序一一问题描叙有3根柱子A,B,C,A柱上有n个盘子,盘子的大小不等,大的盘子在下,小的盘子在上。
要求将A柱上的n个盘子移到C柱上,每次只能移动一个盘子。
在移动过程中,可以借助于任何一根柱子(A、B、C),但必须保证3根柱子上的盘子都是大的盘子在下,小的盘子在上。
二使用的算法递归算法三源代码及思考#include <stdio.h>int q; /*全局变量,统计移动的步数*/void move(char x,char y) /*将1个盘子从x柱移到y柱*/{printf("%c->%c\n",x,y);}/*把A柱上的n个盘子借助于B柱移到C柱上*/void hanoi(int n,char A,char B,char C){if(n==1){move(A,C);q++;}else{hanoi(n-1,A,C,B); /*把A柱上的n个盘子借助于C柱移到B柱上*/move(A,C); /*把A柱上的最后一个盘子移到C柱上*/q++;hanoi(n-1,B,A,C); /*把B柱上的n个盘子借助于A柱移到C柱上*/}}int main(void){int n;printf("Enter the number of diskes:");scanf("%d",&n);printf("\n");hanoi(n,'A','B','C');printf("\nSteps:%d\n\n",q);return 0;}1个的时候当然是1次,2个的时候是3次,3个的时候就用了7次,因此让我们逻辑性的思考一下吧。
算法设计与分析实训课程学习总结在算法设计与分析实训课程的学习过程中,我深入了解了算法的设计原理、分析方法和实际应用,并通过实际操作和实践来进一步提升了自己的算法设计与分析能力。
下面将对我在这门课上所学到的知识和经验进行总结。
一、课程简介算法设计与分析实训课程是计算机科学与技术专业中的一门重要课程,旨在培养学生解决实际问题的能力。
本课程内容涵盖了基本的算法设计与分析方法,包括贪心算法、动态规划、回溯算法等。
通过实际案例和练习题的训练,学生可以学习到如何应用这些算法来解决实际问题,并提高算法的效率和优化。
二、课程收获1. 算法设计原理在课程中,我学习到了不同种类的算法设计原理,如贪心算法、动态规划、分治算法等。
这些原理对于解决不同类型的问题提供了思路和方法。
我学会了根据问题的特性选择合适的算法设计原理,并进行相应的实现和优化。
2. 算法分析方法在课程中,我学习到了如何对算法进行分析和评估,了解了时间复杂度和空间复杂度的计算方法。
通过学习和实践,我对算法的效率有了更深入的认识,并且能够根据问题的规模和要求来选择合适的算法,以提高程序的运行效率。
3. 实际应用通过实际案例和练习题的训练,我学会了将所学的算法应用于实际问题的解决。
例如,在图论中,我学会了如何使用深度优先搜索和广度优先搜索来求解最短路径和最小生成树问题;在动态规划中,我学会了如何通过建立状态转移方程来解决背包问题和最长公共子序列问题;在贪心算法中,我学会了如何选择局部最优解以达到全局最优解。
这些实际应用的训练,增强了我的实际问题解决能力和算法设计思维。
三、学习心得与体会1. 善用工具在课程学习中,我发现利用合适的编程工具,如IDE、调试器等,能够提高算法设计与分析的效率和准确性。
同时,我也学会了如何利用在线资源、论坛和社区来解决在算法实现过程中遇到的问题和困难,这对于自己的学习和成长非常有帮助。
2. 实践与总结算法设计与分析实训课程注重实践操作和实际问题的解决,而不仅仅是理论知识的学习。
10008148 朱凌峰分析与设计总结
算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、有穷性:一个算法必须保证执行有限步之后结束;
2、确切性:算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
没有输出的算法是毫无意义的;
5、可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
算法复杂度
算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。
不同的算法可能用不同的时间、空间或效率来完成同样的任务。
一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。
或者看
成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、有穷性:一个算法必须保证执行有限步之后结束;
2、确切性:算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。
没有输出的算法是毫无意义的;
5、可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
常用算法分为以下五种:
分治法
在计算机科学中,分治法是一种很重要的算法。
字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……
常用算法之回溯法
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。
但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
动态规划法
最优化原理是动态规划的基础。
“一个过程的最优决策具有这样的性质:即无论其初始状态和初始决策如何,其今后诸策略对以第一个决策所形成的状态作为初始状态的过程而言,必须构成最优策略”。
简言之,一个最优策略的子策略,对于它的初态和终态而言也必是最优的。
贪心算法
贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。
就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生
整体最优解或者是整体最优解的近似解。
、
分支限界法
在计算机科学中,分治法是一种很重要的算法。
字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。