算法设计与分析课程报告

合集下载

算法设计与分析课程报告

算法设计与分析课程报告

算法设计与分析课程报告第一章算法问题求解基础1、算法的概念:算法是指解决问题的一种方法或过程,是由若干条指令组成的有穷序列。

2、算法的特性①有穷性:一个算法必须保证执行有限步之后结束;②确切性:算法的每一步骤必须有确切的定义;③输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;④输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。

没有输出的算法是毫无意义的;⑤可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成3、算法与程序的关系:区别:程序可以不一定满足可终止性。

但算法必须在有限时间内结束;程序可以没有输出,而算法则必须有输出;算法是面向问题求解的过程描述,程序则是算法的实现。

联系:程序是算法用某种程序设计语言的具体实现;程序可以不满足算法的有限性性质。

4、算法描述方式:自然语言,流程图,伪代码,高级语言。

第二章算法分析基础1、算法复杂性分析:算法复杂性的高低体现运行该算法所需计算机资源(时间,空间)的多少。

算法复杂性度量:期望反映算法本身性能,与环境无关。

理论上不能用算法在机器上真正的运行开销作为标准(硬件性能、代码质量影响)。

一般是针对问题选择基本运算和基本存储单位,用算法针对基本运算与基本存储单位的开销作为标准。

算法复杂性C依赖于问题规模N、算法输入I和算法本身A。

即C=F(N, I, A)。

第五章分治法1、递归算法:直接或间接地调用自身的算法。

用函数自身给出定义的函数称为递归函数。

注:边界条件与递归方程是递归函数的二个要素。

实例:①阶乘函数;②Fibonacci数列;③Ackerman函数;④排列问题;⑤整数划分问题;⑥Hanoi塔问题优缺点:①优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。

②缺点:递归算法的运行效率低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

算法设计与分析实验报告

算法设计与分析实验报告

算法设计与分析报告学生姓名学号专业班级指导教师完成时间目录一、课程内容 (3)二、算法分析 (3)1、分治法 (3)(1)分治法核心思想 (3)(2)MaxMin算法分析 (3)2、动态规划 (4)(1)动态规划核心思想 (4)(2)矩阵连乘算法分析 (5)3、贪心法 (5)(1)贪心法核心思想 (5)(2)背包问题算法分析 (6)(3)装载问题算法分析 (6)4、回溯法 (7)(1)回溯法核心思想 (7)(2)N皇后问题非递归算法分析 (7)(3)N皇后问题递归算法分析 (8)三、例子说明 (9)1、MaxMin问题 (9)2、矩阵连乘 (9)3、背包问题 (10)4、最优装载 (10)5、N皇后问题(非递归) (11)6、N皇后问题(递归) (11)四、心得体会 (11)五、算法对应的例子代码 (12)1、求最大值最小值 (12)2、矩阵连乘问题 (13)3、背包问题 (14)4、装载问题 (17)5、N皇后问题(非递归) (18)6、N皇后问题(递归) (20)一、课程内容1、分治法,求最大值最小值,maxmin算法;2、动态规划,矩阵连乘,求最少连乘次数;3、贪心法,1)背包问题,2)装载问题;4、回溯法,N皇后问题的循环结构算法和递归结构算法。

二、算法分析1、分治法(1)分治法核心思想当要求解一个输入规模为n,且n的取值相当大的问题时,直接求解往往是非常困难的。

如果问题可以将n个输入分成k个不同子集合,得到k个不同的可独立求解的子问题,其中1<k≤n,而且子问题与原问题性质相同,原问题的解可由这些子问题的解合并得出。

那末,这类问题可以用分治法求解。

分治法的核心技术1)子问题的划分技术。

2)递归技术。

反复使用分治策略将这些子问题分成更小的同类型子问题,直至产生出不用进一步细分就可求解的子问题。

3)合并技术。

(2)MaxMin算法分析问题:在含有n个不同元素的集合中同时找出它的最大和最小元素。

算法设计与分析的实验报告

算法设计与分析的实验报告

实验一递归与分治策略一、实验目的1.加深学生对分治法算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;2.提高学生利用课堂所学知识解决实际问题的能力;3.提高学生综合应用所学知识解决实际问题的能力。

二、实验内容1、①设a[0:n-1]是已排好序的数组。

请写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。

当搜索元素在数组中时,i和j相同,均为x在数组中的位置。

②写出三分搜索法的程序。

三、实验要求(1)用分治法求解上面两个问题;(2)再选择自己熟悉的其它方法求解本问题;(3)上机实现所设计的所有算法;四、实验过程设计(算法设计过程)1、已知a[0:n-1]是一个已排好序的数组,可以采用折半查找(二分查找)算法。

如果搜索元素在数组中,则直接返回下表即可;否则比较搜索元素x与通过二分查找所得最终元素的大小,注意边界条件,从而计算出小于x的最大元素的位置i和大于x的最小元素位置j。

2、将n个元素分成大致相同的三部分,取在数组a的左三分之一部分中继续搜索x。

如果x>a[2(n-1)/3],则只需在数组a的右三分之一部分中继续搜索x。

上述两种情况不成立时,则在数组中间的三分之一部分中继续搜索x。

五、实验结果分析二分搜索法:三分搜索法:时间复杂性:二分搜索每次把搜索区域砍掉一半,很明显时间复杂度为O(log n)。

(n代表集合中元素的个数)三分搜索法:O(3log3n)空间复杂度:O(1)。

六、实验体会本次试验解决了二分查找和三分查找的问题,加深了对分治法的理解,收获很大,同时我也理解到学习算法是一个渐进的过程,算法可能一开始不是很好理解,但是只要多看几遍,只看是不够的还要动手分析一下,这样才能学好算法。

七、附录:(源代码)二分搜索法:#include<iostream.h>#include<stdio.h>int binarySearch(int a[],int x,int n){int left=0;int right=n-1;int i,j;while(left<=right){int middle=(left+right)/2;if(x==a[middle]){i=j=middle;return 1;}if(x>a[middle])left=middle+1;else right=middle-1;}i=right;j=left;return 0;}int main(){ int a[10]={0,1,2,3,4,5,6,7,8,9};int n=10;int x=9;if(binarySearch(a,x,n))cout<<"找到"<<endl;elsecout<<"找不到"<<endl;return 0;}实验二动态规划——求解最优问题一、实验目的1.加深学生对动态规划算法设计方法的基本思想、基本步骤、基本方法的理解与掌握;2.提高学生利用课堂所学知识解决实际问题的能力;3.提高学生综合应用所学知识解决实际问题的能力。

算法设计与分析实验报告_3

算法设计与分析实验报告_3

实验一全排列、快速排序【实验目的】1.掌握全排列的递归算法。

2.了解快速排序的分治算法思想。

【实验原理】一、全排列全排列的生成算法就是对于给定的字符集, 用有效的方法将所有可能的全排列无重复无遗漏地枚举出来。

任何n个字符集的排列都可以与1~n的n个数字的排列一一对应, 因此在此就以n个数字的排列为例说明排列的生成法。

n个字符的全体排列之间存在一个确定的线性顺序关系。

所有的排列中除最后一个排列外, 都有一个后继;除第一个排列外, 都有一个前驱。

每个排列的后继都可以从它的前驱经过最少的变化而得到, 全排列的生成算法就是从第一个排列开始逐个生成所有的排列的方法。

二、快速排序快速排序(Quicksort)是对冒泡排序的一种改进。

它的基本思想是: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行, 以此达到整个数据变成有序序列。

【实验内容】1.全排列递归算法的实现。

2.快速排序分治算法的实现。

【实验结果】1.全排列:快速排序:实验二最长公共子序列、活动安排问题【实验目的】了解动态规划算法设计思想, 运用动态规划算法实现最长公共子序列问题。

了解贪心算法思想, 运用贪心算法设计思想实现活动安排问题。

【实验原理】一、动态规划法解最长公共子序列设序列X=<x1, x2, …, xm>和Y=<y1, y2, …, yn>的一个最长公共子序列Z=<z1, z2, …, zk>, 则:..i.若xm=yn, 则zk=xm=yn且Zk-1是Xm-1和Yn-1的最长公共子序列...ii.若xm≠yn且zk≠x., 则Z是Xm-1和Y的最长公共子序列...iii.若xm≠yn且zk≠y.,则Z是X和Yn-1的最长公共子序列.其中Xm-1=<x1, x2, …, xm-1>, Yn-1=<y1, y2, …, yn-1>, Zk-1=<z1, z2, …, zk-1>。

算法课设实验报告(3篇)

算法课设实验报告(3篇)

第1篇一、实验背景与目的随着计算机技术的飞速发展,算法在计算机科学中扮演着至关重要的角色。

为了加深对算法设计与分析的理解,提高实际应用能力,本实验课程设计旨在通过实际操作,让学生掌握算法设计与分析的基本方法,学会运用所学知识解决实际问题。

二、实验内容与步骤本次实验共分为三个部分,分别为排序算法、贪心算法和动态规划算法的设计与实现。

1. 排序算法(1)实验目的:熟悉常见的排序算法,理解其原理,比较其优缺点,并实现至少三种排序算法。

(2)实验内容:- 实现冒泡排序、快速排序和归并排序三种算法。

- 对每种算法进行时间复杂度和空间复杂度的分析。

- 编写测试程序,对算法进行性能测试,比较不同算法的优劣。

(3)实验步骤:- 分析冒泡排序、快速排序和归并排序的原理。

- 编写三种排序算法的代码。

- 分析代码的时间复杂度和空间复杂度。

- 编写测试程序,生成随机测试数据,测试三种算法的性能。

- 比较三种算法的运行时间和内存占用。

2. 贪心算法(1)实验目的:理解贪心算法的基本思想,掌握贪心算法的解题步骤,并实现一个贪心算法问题。

(2)实验内容:- 实现一个贪心算法问题,如活动选择问题。

- 分析贪心算法的正确性,并证明其最优性。

(3)实验步骤:- 分析活动选择问题的贪心策略。

- 编写贪心算法的代码。

- 分析贪心算法的正确性,并证明其最优性。

- 编写测试程序,验证贪心算法的正确性。

3. 动态规划算法(1)实验目的:理解动态规划算法的基本思想,掌握动态规划算法的解题步骤,并实现一个动态规划算法问题。

(2)实验内容:- 实现一个动态规划算法问题,如背包问题。

- 分析动态规划算法的正确性,并证明其最优性。

(3)实验步骤:- 分析背包问题的动态规划策略。

- 编写动态规划算法的代码。

- 分析动态规划算法的正确性,并证明其最优性。

- 编写测试程序,验证动态规划算法的正确性。

三、实验结果与分析1. 排序算法实验结果:- 冒泡排序:时间复杂度O(n^2),空间复杂度O(1)。

算法设计与分析实验报告(中南民族大学)

算法设计与分析实验报告(中南民族大学)

院系:计算机科学学院专业:年级:课程名称:算法设计与分析基础班号:组号:指导教师:年月日实验结果及分析1.求最大数2.递归法与迭代法性能比较递归迭代3.改进算法1.利用公式法对第n项Fibonacci数求解时可能会得出错误结果。

主要原因是由于double类型的精度还不够,所以程序算出来的结果会有误差,要把公式展开计算。

2.由于递归调用栈是一个费时的过程,通过递归法和迭代法的比较表明,虽然递归算法的代码更精简更有可读性,但是执行速度无法满足大数问题的求解。

3.在当前计算机的空间较大的情况下,在一些速度较慢的问题中,空间换时间是一个比较周全的策略。

实验原理(算法基本思想)定义:若A=(a ij), B=(b ij)是n×n的方阵,则对i,j=1,2,…n,定义乘积C=A⋅B 中的元素c ij为:1.分块解法通常的做法是将矩阵进行分块相乘,如下图所示:二.Strassen解法分治法思想将问题实例划分为同一问题的几个较小的实例。

对这些较小实例求解,通常使用递归方法,但在问题规模足够小时,也会使用另一种算法。

如果有必要,合并这些问题的解,以得到原始问题的解。

求解矩阵相乘的DAC算法,使用了strassen算法。

DAC(A[],B[],n){If n=2 使用7次乘法的方法求得解ElseDivide(A)//把A分成4块Divide(B)//把B分成4块调用7次strassen算法求得解的4块合并这4块得到解并返回}伪代码Serial_StrassenMultiply(A, B, C) {T1 = A0 + A3;T2 = B0 + B3;StrassenMultiply(T1, T2, M1);T1 = A2 + A3;StrassenMultiply(T1, B0, M2);T1 = (B1 - B3);StrassenMultiply (A0, T1, M3);T1 = B2 - B0;StrassenMultiply(A3, T1, M4);T1 = A0 + A1;StrassenMultiply(T1, B3, M5);T1 = A2 – A0;T2 = B0 + B1;StrassenMultiply(T1, T2, M6);T1 = A1 – A3;T2 = B2 + B3;StrassenMultiply(T1, T2, M7);C0 = M1 + M4 - M5 + M7C1 = M3 + M5C2 = M2 + M4C3 = M1 - M2 + M3 + M6}实验结果及分析时间复杂度1.分块相乘总共用了8次乘法,因而需要Θ(n log28)即Θ(n3)的时间复杂度。

算法设计 课程设计报告

算法设计 课程设计报告

《算法设计与分析》1什么是算法?算法的特征有哪些?根据我自己的理解,算法是解决问题的方法步骤。

比如在解决高数问题的时候,可以分步骤进行解答,在编程的过程算法可以得到最好的体现。

算法是一系列解决问题的清晰指令,因为我最近在考研复习,对于会的题目还有进行多次的巩固,但是一步步的写很浪费时间,所以我只是写出关键指令,比如化简通分,洛必达法则,上下同阶。

这样可以提高效率。

算法的指令也是同样的。

能够对一定规范的输入,在有限时间内获得所要求的输出。

一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

2若给定某一算法,一般如何对其分析与评价?一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。

计算机的资源,最重要的是时间和空间(存储器)资源。

算法的复杂性有时间复杂性和空间复杂性之分。

1.时间复杂性:例1:设一程序段如下(为讨论方便,每行前加一行号)(1) for i:=1 to n do(2) for j:=1 to n do(3) x:=x+1......试问在程序运行中各步执行的次数各为多少?解答:行号次数(频度)(1) n+1(2) n*(n+1)(3) n*n可见,这段程序总的执行次数是:f(n)=2n2+2n+1。

在这里,n可以表示问题的规模,当n趋向无穷大时,如果f(n)的值很小,则算法优。

作为初学者,我们可以用f(n)的数量级O来粗略地判断算法的时间复杂性,如上例中的时间复杂性可粗略地表示为T(n)=O(n2)。

2.空间复杂性:例2:将一一维数组的数据(n个)逆序存放到原数组中,下面是实现该问题的两种算法:算法1:for i:=1 to n dob[i]:=a[n-i+1];for i:=1 to n doa[i]:=b[i];算法2:for i:=1 to n div 2 dobegint:=a[i];a[i]:=a[n-i-1];a[n-i-1]:=tend;算法1的时间复杂度为2n,空间复杂度为2n算法2的时间复杂度为3*n/2,空间复杂度为n+1显然算法2比算法1优,这两种算法的空间复杂度可粗略地表示为S(n)=O(n)3、从下面算法策略中自选一组,结合某具体问题的求解来介绍算法思想,并加以总结、比较:递归与分治、动态规划与贪心法、回溯法与分支限界法动态规划算法类似于分治法,基本思想也是将待求解问题分解成若干个子问题。

算法设计与分析实验报告

算法设计与分析实验报告

算法设计与分析实验报告算法设计与分析实验报告引言:算法设计与分析是计算机科学中的重要课程,它旨在培养学生解决实际问题的能力。

本次实验旨在通过设计和分析不同类型的算法,加深对算法的理解,并探索其在实际应用中的效果。

一、实验背景算法是解决问题的步骤和方法的描述,是计算机程序的核心。

在本次实验中,我们将重点研究几种经典的算法,包括贪心算法、动态规划算法和分治算法。

通过对这些算法的设计和分析,我们可以更好地理解它们的原理和应用场景。

二、贪心算法贪心算法是一种基于局部最优选择的算法,它每一步都选择当前状态下的最优解,最终得到全局最优解。

在实验中,我们以背包问题为例,通过贪心算法求解背包能够装下的最大价值物品。

我们首先将物品按照单位重量的价值从大到小排序,然后依次将能够装入背包的物品放入,直到背包无法再装下物品为止。

三、动态规划算法动态规划算法是一种通过将问题分解为子问题,并记录子问题的解来求解整体问题的算法。

在实验中,我们以斐波那契数列为例,通过动态规划算法计算斐波那契数列的第n项。

我们定义一个数组来保存已经计算过的斐波那契数列的值,然后通过递推公式将前两项的值相加得到后一项的值,最终得到第n项的值。

四、分治算法分治算法是一种将问题分解为更小的子问题,并通过递归求解子问题的算法。

在实验中,我们以归并排序为例,通过分治算法对一个无序数组进行排序。

我们首先将数组分成两个子数组,然后对子数组进行递归排序,最后将两个有序的子数组合并成一个有序的数组。

五、实验结果与分析通过对以上三种算法的设计和分析,我们得到了以下实验结果。

在贪心算法中,我们发现该算法能够在有限的时间内得到一个近似最优解,但并不能保证一定得到全局最优解。

在动态规划算法中,我们发现该算法能够通过记忆化搜索的方式得到准确的结果,但在问题规模较大时,其时间复杂度较高。

在分治算法中,我们发现该算法能够将问题分解为更小的子问题,并通过递归求解子问题,最终得到整体问题的解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析课程报告
第一章 算法问题求解基础
1、算法的概念:算法是指解决问题的一种方法或过程,是由若干条指令组成的有穷序列。

2、算法的特性
① 有穷性:一个算法必须保证执行有限步之后结束;
② 确切性:算法的每一步骤必须有确切的定义;
③ 输入: 一个算法有 0 个或多个输入, 法
本身定除了初始条件;
④ 输出: 一个算法有一个或多个输出, 是毫无意义的;
⑤可行性:算法原则上能够精确地运行,
而且人们用笔和纸做有限次运算后即可完成
3、算法与程序的关系:
区别:程序可以不一定满足可终止性。

但算法必须在有限时间内结束;
程序可以没有输出 ,而算法则必须有输出;
算法是面向问题求解的过程描述,程序则是算法的实现。

联系:程序是算法用某种程序设计语言的具体实现;
程序可以不满足算法的有限性性质。

4、算法描述方式:自然语言,流程图,伪代码,高级语言。

第二章 算法分析基础
1、算法复杂性分析:
算法复杂性的高低体现运行该算法所需计算机资源(时间,空间)的多少。

算法复杂性度量:
期望反映算法本身性能,与环境无关。

理论上不能用算法在机器上真正的运行开销作为标准(硬件性能、代码质量影响)
般是针对问题选择基本运算和基本存储单位,用算法针对基本运算与基本存储单
以刻画运算对象的初始情况, 所谓 0 个输入是指算
以反映对输入数据加工后的结果。

没有输出的算法
位的开销作为标准。

算法复杂性C依赖于问题规模N、算法输入I和算法本身A。

即C=F(N,
I,A)。

第五章分治法
1、递归算法:直接或间接地调用自身的算法。

用函数自身给出定义的函数称为递归函数。

注:边界条件与递归方程是递归函数的二个要素。

实例:①阶乘函数;
② Fibonacci 数列;③ Ackerman 函数;
④排列问题;
⑤整数划分问题;
⑥ Hanoi 塔问题
优缺点:①优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性, 因此它为设计算法、调试程序带来很大方便。

②缺点:递归算法的运行效率低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

2、分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

(将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解)
分治法所能解决的问题一般具有以下几个特征:
①该问题的规模缩小到一定的程度就可以容易地解决;
②该问题可以分为若干个规模更小的相同问题,即该问题具有最有子结构性质;
③利用该问题分解出的子问题的解可以合并为该问题的解;
④该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。

第六章贪心法
1、贪心算法的思想:
采用逐步构造最优解的方法。

每个阶段,都作出一个看上去最有的决定。

决策一旦做出,就不可再更改。

其特点如下:
①不能保证最后求得的解是最佳的,即:多半是近似解(少数问题除外)
②策略容易发现(少数问题除外)
③策略多样,结果也多样;
④算法实现过程中,通常用到辅助算法:排序;
(1)活动问题安排描述:
活动安排问题是要在所给的活动集合中选出最大的相容活动子集合,
有效求解的很好例子。

该问题要求高效地安排一系列争用某一公共资源的活动。

是可以用贪心算法
贪心算法提
供了一个简单、漂亮的方法使得尽可能多的活动多的活动能兼容地使用公共资源。

贪心算法的证明多使用反证法。

贪心算法的两个重要性质:
①贪心选择性:所求问题的整体最优解可以通过一系列局部最优的选择,达到;即:在当前状态
下做出局部最优,然后解这个选择时候产生的子问题。

从全局看来,运用贪心策略解决的问题在程序的
运行中无回溯过程;
即贪心选择来
②最优子结构性质:当一个问题的最优解包含着其它的子问题的最优解时,
有最优子结构性质。

该性质是可用动态规划或贪心算法求解的一个关键特性。

称此问题具
贪心算法和动态算法的差异:两者虽然都要求具有最优子结构性质,但是能用动态规划算法求
解的问题不一定能用贪心算法来求解。

0-1背包问题描述:给定n种物品和一个背包。

物品i的重量是Wi,其价值是Vi,背
包的容量是C。

问应如何选择装入背包中的物品的总价值最大?
注:在选择装入背包的物品时,对每种物品i 中只有两种选择,即装入背包或不装入背包。

不能将物品i 装入部分的物品i。

背包问题描述:与0-1 背包问题相似,所不同的是在选择物品装入背包时,可以选择物品的一部
分,而不一定要全部装入背包。

分析:两个问题相似,但背包问题可以用贪心算法求解,而0-1 背包问题却不能。

(2)背包问题的贪心算法描述:
首先计算每种物品单位重量的价值Vi/Wi ,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。

若将这种物品全部装入背包后,背包内的物品总重量未超过
C ,则选择单位重量价值次高的物品并尽可能多的装入背包。

第七章 动态规划法
1、动态规划算法总体思想:
与分治法类似, 其基本思想也是将待求解的问题分解成若干个子问题。

到的子问题往往不是相互独立的。

不同的的数目常常只有多项式量级。

些子问题被重复计算了许多次。

如果能够保存已解决的子问题的答案, 求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。

2、基本要素:①最优子结构性质;②重叠子问题性质:递归算法求解问题时,每次产生的 子问题并不总是新问题,有些子问题被反复计算多次
3、基本步骤:①找出最优解的性质;
② 递归的定义最优值;
③ 以自底向上的方式计算出最优值;
④ 根据计算最优值时得到的信息,构造最优解。

4、范例(能够解决的问题):①矩阵连乘问题;
②最长公共子程序;

背包问题; ④ 最优二叉搜索树。

第八章 回溯法
1、回溯法的基本思想:
2、回溯法的使用条件:
3、回溯法适用于搜索问题和优化问题。

4、回溯法的设计要素:
5、针对问题定义解空间:
问题解向量 解向量分量取值集合
依此策略一直到背包装满为止。

但是, 经分解得 在分治法求解时, 有 而在需要时再找出已
构造解空间树
6、两类典型的解空间树: 子集树:当所给的问题是从n 个元素的集合S 中找出满足某种性质的子集时, 相应的解 空间树称为子集树。

子集树通常有 2n 个叶结点
排列树: 当所给的问题是确定 n 个元素满足某种性质的排列时, 相应的解空间树称为排 列树。

排列树通常有 n! 个叶结点。

判断问题是否满足多米诺性质。

搜索解空间树,确定剪枝函数。

确定存储搜索路径的数据结构。

第九章分支限界法
1、分支限界法的基本思想:
分支界限法类似与回溯法,也是在问题解空间中搜索问题解的一种算法。

2、分支界限法与回溯法思想对比: 求解目标: 回溯法的求解目标是找出解空间树中满足约束条件的所有解, 而分支限界法 的求解目标则是找出满足约束条件的一个解, 或是在满足约束条件的解中找出在某种意义下 的最优解。

搜索方式的不同: 回溯法以深度优先的方式搜索解空间树, 或以最小耗费优先的方式搜索解空间树。

而分支限界法则以广度优先 活结点一旦成为扩展结点, 在这些儿子结点中, 导致不可行解或导致非最优解的儿子结 点被舍弃,其余儿子结点被加入活结点表中。

在分支限界法中, 每一个活结点只有一次机会成为扩展结点。

就一次性产生其所有儿子结点。

此后,从活结点表中取下一结点成为当前扩展结点, 程一直持续到找到所需的解或活结点表为空时为止。

并重复上述结点扩展过程。

这个过 3、常见的两种分支界限法: 队列式(FIFO 分支限界法:按照队列先进先出( FIFO 原则选取下一个节点为扩展节点。

优先队列式分支限界法: 按照优先队列中规定的优先级选取优先级最高的节点成为当前 扩展节点。

4、最大堆:最大效益优先
最小堆:最小耗费优先
第十章 NP 完全问题
1、P 类和NP 完全问题
2、 Cook 定理和证明
3、一些经典的 NP 完全问题 第十三章 密码算法
加密方法
总结:
在这一部分中,我学习了分治法、贪心法、动态规划法、
0/1 背包问题的掌握仍不太熟练,需要多加练习。

PS 感谢老师这一学期的教导,我学到了许多。

算法设计与分析主要包括三部分:
算法和算法分析、算法设计策略、求解困难问题。

其中比较重要的是算法设计策略。

回溯法和分支限界法。

但对于。

相关文档
最新文档