2011-2012(1)《算法分析与设计》上机指导书
算法设计与分析实验指导书

算法设计与分析实验指导书. . .. . .算法设计与分析实验指导书东北大学软件学院2012年.. .专业. .目录算法设计与分析 (1)实验指导书 (1)前言 (3)实验要求 (4)实验1 分治法的应用(2学时) (5)1.实验目的 (5)2.实验类型 (5)3.预习要求 (5)4.实验基本要求 (5)5.实验基本步骤 (7)实验2动态规划(2学时) (9)1.实验目的 (9)2.实验类型 (9)3.预习要求 (9)4.实验基本要求 (9)5.实验基本步骤 (10)实验3 回溯法(4学时) (12)1.实验目的 (12)2.实验类型 (12)3.预习要求 (12)4.实验基本要求 (12)5.实验基本步骤 (13)前言《算法设计与分析》是一门面向设计,处于计算机科学与技术学科核心地位的教育课程。
通过对计算机算法系统的学习,使学生理解和掌握计算机算法的通用设计方法,培养对算法的计算复杂性正确分析的能力,为独立设计算法和对算法进行复杂性分析奠定基础。
要求掌握算法复杂度分析、分治法、动态规划法、贪心法、回溯法、分支限界法等算法的设计方法及其分析方法。
能将这些方法灵活的应用到相应的问题中,并且能够用C++实现所涉及的算法,并尽量做到低复杂度,高效率。
通过本课程的实验,使学生加深对课程容的理解,培养学生严密的思维能力,运用所学知识结合具体问题设计适用的算法的能力;培养学生良好的设计风格,激励学生创造新算法和改进旧算法的愿望和热情。
希望同学们能够充分利用实验条件,认真完成实验,从实验中得到应有的锻炼和培养。
希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《算法设计与分析》课程成为对大家有益的课程。
实验要求《算法设计与分析》课程实验的目的是为了使学生在课堂学习的同时,通过一系列的实验,使学生加深理解和更好地掌握《算法设计与分析》课程教学大纲要求的容。
在《算法设计与分析》的课程实验过程中,要求学生做到:(1)仔细观察调试程序过程中出现的各种问题,记录主要问题,做出必要说明和分析。
《算法分析与设计》实验指导书(8学时)

计算机科学与技术学院算法分析与设计实验指导书2011年8月于洪编写2015年9月周应华修订目录实验一分治策略排序 (3)实验二减治策略查找顺序表 (5)实验三动态规划求解0/1背包问题 (8)实验四贪心算法求解最短路径问题 (10)附录1 关于文件的操作 (12)附录2 关于如何统计运算时间 (13)实验一分治策略排序实验目的1)以排序问题为例,掌握分治法的基本设计策略;2)熟练掌握合并排序算法的实现;3)熟练掌握快速排序算法的实现;4) 理解常见的算法经验分析方法。
实验环境计算机、C语言程序设计环境实验学时2学时实验内容与步骤1.准备实验数据要求:编写一个函数data-generate,生成2000个在区间[1,10000]上的随机整数,并将这些数输出到外部文件data.txt中。
这些数作为本算法实验的输入数据。
2.实现合并排序算法要求:实现mergesort算法。
输入:待排数据文件data.txt;输出:有序数据文件resultsMS.txt(注:建议将此排好序的数据作为实验二的算法输入);程序运行时间TimeMS。
合并排序算法(类C语言):/* 数组A[] 中包含待排元素;array B[] is a work array */TopDownMergeSort(A[], B[], n){TopDownSplitMerge(A, 0, n, B);}// iBegin is inclusive; iEnd is exclusive (即:A[iEnd]不是待排元素)TopDownSplitMerge(A[], iBegin, iEnd, B[]){if(iEnd - iBegin < 2) // 如果只有1个待排元素,返回。
return;// recursively split runs into two halves until run size == 1,// then merge themiMiddle = (iEnd + iBegin) / 2; // 划分TopDownSplitMerge(A, iBegin, iMiddle, B);TopDownSplitMerge(A, iMiddle, iEnd, B);TopDownMerge(A, iBegin, iMiddle, iEnd, B); // 合并;元素放到数组B中。
算法分析实验指导书(王红梅)

《算法设计与分析》实验指导书计算机科学与技术学院石少俭实验一分治法1、实验目的(1)掌握设计有效算法的分治策略。
(2)通过快速排序学习分治策略设计技巧2、实验要求(1)熟练掌握分治法的基本思想及其应用实现。
(2)理解所给出的算法,并对其加以改进。
3、分治法的介绍任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。
问题的规模越小,越容易直接求解,解题所需的计算时间也越少。
而当n较大时,问题就不那么容易处理了。
要想直接解决一个规模较大的问题,有时是相当困难的。
分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。
如果原问题可分割成k个子问题,1<k≤n ,且这些子问题都可解,并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。
由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。
在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。
这自然导致递归过程的产生。
分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。
分治法的适用条件(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。
上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;第二条特征是应用分治法的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑贪心法或动态规划法。
第四条特征涉及到分治法的效率,如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。
算法设计发的顶顶顶顶顶与分析-课程实验指导书

《算法设计与分析》课程实验指导书作者:姜文君杨明李梦娴单位:信息科学与工程学院2015年4月一、实验教学目标《算法设计与分析》旨在教会学生处理各种问题的方法,而通过实验,使学生能够把所学的方法用于具体的问题,并对所用算法进行比较分析,从而提高学生分析问题、解决问题的能力。
只有通过实验,学生才能判定自己所拟算法是否正确,是否算得上一个较优算法。
通过该课程的实验,使学生对课堂中所讲述的内容有一个直观的认识,更好地掌握所学的知识。
同时培养学生的实际动手能力,加强学生创新思维能力的培养。
二、实验教学主要内容实验课外时间组织:实验课外消化理论课堂,老师对项目实验的讲解,并且做好相关的设计与实现。
实验课内时间组织:学生在学院机房集中上机,实验教师在机房采用辅导和自由讨论相结合的方式进行指导。
最终完成实验项目的检查。
三、实验要求《算法设计与分析》是计算机专业的专业核心课程,其先修课程有数据结构和至少一门高级语言。
算法设计与分析课程将覆盖计算机软件实现中的大部分算法,并具有一定的深度和广度,使学生对计算机常用算法有一个全盘的了解;通过此课的学习,学生应该具有针对所给的问题设计和实现高效算法的能力。
通过上机实验,将使学生熟悉、掌握课堂教学中所学的大部分算法。
同时,上机实验是对学生在软件设计方面的综合训练,包括问题分析、总体结构设计、用户界面设计(可选)、程序设计基本技能和技巧等,以培养良好的编程风格和科学作风。
通过理论联系实际,以最终提高学生动手操作的能力以及分析问题的能力。
为了顺利完成《算法设计与分析》课程实验,学生应做到:1、熟练掌握一种高级程序设计语言及相关开发工具。
2、认真学习教材以及老师课堂讲解的项目实验相关内容,提前做好分析设计和实现。
3、自行完成代码编写,不得超袭。
实验课上课时间做好项目陈述和检查的准备,也可以针对一些问题做相应的讨论。
4、遵守机房纪律,服从辅导教师指挥,爱护实验设备。
5、实验课上进行相关的程序检查和测试,结束后提交所有的文档和源程序。
算法实验1-求最大公约数实验报告

精品文档可修改昆明理工大学信息工程与自动化学院学生实验报告( 2011 — 2012 学年第 1 学期)课程名称:算法分析与设计开课实验室:信自楼机房444 2011年10月12日一、上机目的及内容上机目的(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;(2)掌握并应用算法的数学分析和后验分析方法;(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
上机内容求两个自然数m和n的最大公约数。
二、实验原理及基本技术路线图(方框原理图或程序流程图)实验原理(1)至少设计出三个版本的求最大公约数算法;(2)对所设计的算法采用大O符号进行时间复杂性分析;(3)上机实现算法,并用计数法和计时法分别测算算法的运行时间;(4)通过分析对比,得出自己的结论。
流程图三、所用仪器、材料(设备名称、型号、规格等或使用软件)设备:1台PC及VISUAL C++6.0软件。
四、实验方法、步骤(或:程序代码或操作过程)源程序:#include<stdio.h>#include<time.h>#include<stdlib.h>int max(int m,int n){int r;if(m>n)r=n;elser=m;return r;}void Menu(){int a;void algorithmone();void algorithmtwo();void algorithmthree();printf("请选择算法:\n");printf("1.算法一\n");printf("2.算法二\n");printf("3.算法三\n");scanf("%d",&a);getchar();switch(a){case 1:algorithmone();break;case 2:algorithmtwo();break;case 3:algorithmthree();break;default:printf("请输入1,2,3中的一个!\n");}}void algorithmone() //算法一{clock_t start,finish;int m,n,r;char key;printf("求两个数的最大公约数,请输入这两个数:");scanf("%d %d",&m,&n);getchar();start=clock();r=max(m,n);while(r>0){if(m%r==0){if(n%r==0){printf("算法一求出的最大公约数为%d\n",r);finish=clock();break;}elser=r-1;}elser=r-1;}printf("算法一所需的时间是:%ld秒\n",(finish-start));printf("是否返回主菜单?(y/n):");key=getchar();switch(key){case 'y':Menu();break;case 'Y':Menu();break;case 'n':break;case 'N':break;default:printf("error!\n");}}void algorithmtwo() //算法二{clock_t start,finish;int m,n,r;char key;printf("求两个数的最大公约数,请输入这两个数:");scanf("%d %d",&m,&n);start=clock();while((r=m%n)!=0){m=n;n=r;r=m%n;if(r==0){printf("算法二求出的最大公约数为%d\n",n);finish=clock();break;}}printf("算法二所需的时间是:%ld秒\n",(finish-start));getchar();printf("是否返回主菜单?(y/n):");key=getchar();switch(key){case 'y':Menu();break;case 'Y':Menu();break;case 'n':break;case 'N':break;default:printf("error!\n");}}void commonzhishu(int arraym[],int arrayn[]) //提取公共质数{int i,j,k=0,common[3],d=0;for(i=0;i<3;i++)for(j=0;j<3;j++)if(arraym[i]==arrayn[j]){common[k]=arraym[i];k=k+1;}for(k=0;k<3;k++)for(d=k+1;d<3;d++)if(common[k]==common[d])common[d]=1;printf("算法三结果%d\n",common[0]*common[1]*common[2]);}void algorithmthree() //算法三{clock_t start,finish;int m,n,mr,nr,i;float count;char key;mr=2;nr=2;printf("求两个数的最大公约数,请输入这两个数:");scanf("%d %d",&m,&n);int arraym[3],arrayn[3];i=0;start=clock();while(m!=1) //将两数分解{if((count=(float)(m%mr))==0.0){arraym[i]=mr;i++;m=m/mr;}elsemr++;}for(i=0;i<3;i++)printf("%d ",arraym[i]);printf("\n");i=0;while(n!=1){if((count=(float)(n%nr))==0.0){arrayn[i]=nr;i++;n=n/nr;}elsenr++;}for(i=0;i<3;i++)printf("%d ",arrayn[i]);printf("\n");commonzhishu(arraym,arrayn);finish=clock();printf("算法三所需的时间是:%ld秒\n",(finish-start));getchar();printf("是否返回主菜单?(y/n):");key=getchar();switch(key){case 'y':Menu();break;case 'Y':Menu();break;case 'n':break;case 'N':break;default:printf("error!\n");}}void main(){int a;printf("请选择算法:\n");printf("1.算法一\n");printf("2.算法二\n");printf("3.算法三\n");scanf("%d",&a);getchar();switch(a){case 1:algorithmone();break;case 2:algorithmtwo();break;case 3:algorithmthree();break;default:printf("请输入1,2,3中的一个!\n");}}五、实验过程原始记录( 测试数据、图表、计算等)六、实验结果、分析和结论(误差分析与数据处理、成果总结等。
《算法分析与设计》实验指导书

计算机算法分析与设计实验指导书
杨红云
适用专业:软件工程
江西农业大学软件学院
计算机算法分析与设计实验指导书
计算机算法分析与设计是面向设计的,它是计算机科学和软件工程应用的核心。
无论是计算机系统、系统软件和解决计算机的各种应用课题都可归结为算法的设计。
通过本课程的学习,使学生掌握计算机领域中许多常用的非数值的精确的描述:分治法、贪心法、动态规划、回溯法等。
并掌握算法分析的方法。
从而将学生分析问题和解决问题的能力提高到高层理论的高度。
前期课程为程序设计语言、数据结构、高等数学,即学生应该具备一门高级语言程序设计编程基础,学习基本的数据结构知识,还要求学生掌握较好的数学基础。
实验学时:16学时。
《算法设计与分析》上机实验报告(2)

福州大学数学与计算机科学学院《计算机算法设计与分析》上机实验报告(2)4.根据计算最优值时得到的信息,构造最优解3.算法正确性证明对于矩阵连乘积的最优计算次序问题,设计算A[ i : j ],1<=i<=j<=n,所需的最少数乘次数为m[ i ][ j ],则原问题的最优值为m[ 1 ][ n]。
当i=j时,A[ i ; j ]=Ai,为单一矩阵,无需计算,因此m[ i ][ i ]=0。
当i < j时,可以利用最优子结构的性质来计算m[ i ][ j ]。
事实上,若计算A[ i : j ]的最优次序在Ak和Ak+1之间断开,i<=k<j,则m[ i ][ j ]=m[ i ][ k ]+m[k+1][ j ]+Pi-1*Pk*Pj。
其中Pi表示第i个矩阵的列数,也是第i-1个矩阵的行数,P0表示第一个矩阵的行数。
由于在计算时并不知道断开点k的位置,所以k还未定。
不过k的位置只有j-i个可能。
从而m[ i ][ j ]可以递归地定义为当i=j m[ i ][ j ] = 0当i<j m[ i ][ j ] = min{ m[ i ][ k ]+m[ k+1 ][ j ]+Pi-1*Pk*Pj }m[ i ][ j ]给出了最优值,即计算A[ i : j ]所需的最少数乘次数。
同时还确定了计算A[ i : j ]的最优次序中的断开位置k,也就是说,对于这个k有m[ i ][ j ]=m[ i [ k ]+m[ k+1 ][ j] + Pi-1*Pk*Pj若将对应于m[ i ][ j ]的断开位置k记为s[ i ][ j ],在计算最优值m[ i ][ j ]后,可以递归地有s[ i ][ j ]构造出相应的最优解。
根据计算m[ i ][ j ]的递归式,容易写一个递归算法计算m[ 1 ][ n ]。
但是简单地递归将好费指数计算时间。
在递归计算时,许多子问题被重复计算多次。
《算法设计与分析》- 课内上机实验题目及其解答

1 × 23 × 4 = 92
12 × 3 × 4 = 144
西安邮电大学计算机学院
动态规划
西安邮电大学计算机学院
动态规划
西安邮电大学计算机学院
动态规划
算法伪代码
西安邮电大学计算机学院
西安邮电大学计算机学院
递归与分治策略
【问题分析】
(1)数组的生成:许多同学采用固定数组的做法,实际上采用随机数组 是一个比较好的做法,一是可以生成随机数字,便于测试代码;二是相对
于固定长度数组可以很方便地生成任意长度的数组。如下:
西安邮电大学计算机学院
递归与分治策略
(2)算法分析:给同学们的资料上面的算法如下所示:
西安邮电大学计算机学院
贪心算法
算法伪代码
西安邮电大学计算机学院
贪心算法
西安邮电大学计算机学院
贪心算法
(2)小结:本题目大部分同学设计正确,也有部分同学考虑不够全面,
特别是一些边界值没有考虑。测试用例仍然是老问题。
西安邮电大学计算机学院
算法设计与分析
回溯法
西安邮电大学计算机学院
回溯法
基本题 1:最小重量机器设计问题(第 4 版教材
令 TriArray 表示数字三角形转换成的二维矩阵, ResArray[ i ][ j ]为结果数组,表示第 i 层第 j 个数字到最低端的最优解。 则有递推式:
ResArray[ i - 1 ][ j ] = max{ ( TriArray[ i - 1 ][ j ] + ResArray[ i ][ j ] ),
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《算法分析与设计》实验指导书(适用于计算机科学与技术、软件工程专业)计算机科学与技术学院软件教研室2011-8目录实验一算法分析 (3)实验二分治策略 (4)实验三堆排序 (5)实验四动态规划 (6)实验五贪心算法 (8)实验六图算法1-基本图算法 (10)实验七图算法2-最小生成树和单源顶点最短路径 (12)实验八图算法3-所有点对最短路径.14 附录一实验规范. 15实验一算法分析一、实验目的及任务1、使学生通过插入排序和合并排序的算法实现,理解算法的概念并且通过运行时间比较其时间复杂度。
2、体会合并排序的分治方法的三个步骤:分解、递归求解和合并。
3、了解渐近记号的意义和初步分析算法复杂性。
二、实验环境c++或java或Turbo c三、问题描述Input: A sequence of n numbers <a1, a2, . . .,a n>.Output: A permutation (reordering) <a1’, a2’, . . .,a n’> of the input sequence such that a1’≤a2’≤ . . . ≤a n’四、编程任务给定长度为n的一个序列,对其进行插入排序和合并排序五、数据输入随机产生10000以上的数据,放入输入文件input.txt,用来进行排序六、结果输出排序后的结果和两种排序算法的运行时间输出到文件output.txt七、实验报告内容见《算法分析与设计》实验规范。
实验二分治策略一、实验目的及任务1、掌握递归和分治策略的概念和基本思想,分析并掌握“快速排序”问题的分治算法;2、分治算法思想解决median问题。
二、实验环境c++或java或Turbo c三、问题描述(1) Input: A sequence of n numbers <a1, a2, . . .,a n>.Output: A permutation (reordering) <a1’, a2’, . . .,a n’> of the input sequence such that a1’≤a2’≤ . . . ≤a n’(2) Input: A set A of n (distinct) numbers and a number i, with 1 ≤i ≤n.Output: The element x∈A that is larger than exactly i - 1 other elements of A.四、编程任务给定长度为n的一个序列,对其进行快速排序和求第i小数五、数据输入A=<13,19,9,5,12,8,7,4,11,2,6,21>六、结果输出将排序结果输出到文件output.txt。
如果不存在所要求的第i小数,则输出-1。
七、实验报告内容见《算法分析与设计》实验规范。
实验三堆排序一、实验目的及任务1、了解堆的性质; 2利用堆构成一个优先队列,并实现相关的函数功能; 3为图算法做好准备。
二、实验环境c++或java或Turbo c三、问题描述A priority queue is a data structure for maintaining a set S of elements, each with an associated value called a key. A max-priority queue supports the following operations.. INSERT(S, x) inserts the element x into the set S. This operation could be written as S←S ∪ {x}.. MAXIMUM(S) returns the element of S with the largest key.. EXTRACT-MAX(S) removes and returns the element of S with the largest key.. INCREASE-KEY(S, x, k) increases the value of element x's key to the new value k,which is assumed to be at least as large as x's current key value. 四、编程任务编程建立最大堆,构造优先队列并实现以上的相关操作。
五、数据输入A=<15,13,9,5,12,8,7,4,0,6,2,1>六、结果输出执行INSERT(A, 10),EXTRACT-MAX(A),将结果输出到文件output.txt。
七、实验报告内容见《算法分析与设计》实验规范。
实验四动态规划一、实验目的及任务1、掌握动态规划算法的基本步骤:找出最优解的性质,并刻画其结构特征;递归地定义最优值;以自底向上的方式计算出最优值;根据计算最优值时得到的信息,构造最优解。
2、熟悉最长公共子序列问题的算法,设计一个算法解决编辑距离问题。
二、实验环境c++或java或Turbo c三、问题描述1 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。
例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。
给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。
给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。
2 设A和B是2个字符串。
要用最少的字符操作将字符串A转换为字符串B。
这里所说的字符操作包括:山出一个字符、插入一个字符、将一个字符改为另一个字符。
将字符串A变换为字符串B所用的最少字符操作称为字符串A到字符串B的编辑距离,记为d(A,B)。
试设计一个有效算法,对任意给定的两个字符串,计算出它们的编辑距离d(A,B)。
四、编程任务1 求X和Y的最长公共子序列长度以及最长公共子序列2 对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。
五、数据输入1由文件input.txt提供输入数据,X={A,B,C,B,D,A,B}和Y={B,D,C,A,B,A}。
2由文件input.txt提供输入数据。
文件的第1行是字符串A,文件的第2行是字符串B。
A:fxpimu B:xwrs六、结果输出1程序运行结束时,将编程计算出的最长公共子序列长度以及最长公共子序列输出到文件output.txt中。
2 程序运行结束时,将编辑距离d(A,B)输出到文件output.txt的第1行中。
七、实验报告内容见《算法分析与设计》实验规范。
实验五贪心算法一、实验目的及任务1、掌握贪心算法的基本性质。
2 贪心算法与动态规划的区别。
3 贪心算法解决活动安排问题和背包问题。
二、实验环境c++或java或Turbo c三、问题描述1 有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。
每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。
如果选择了活动i,则它在半开时间区间[si, fi]内占用资源。
若区间[si, fi]与区间[sj, fj]不相交,则称活动i与活动j是相容的。
也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。
该问题要求高效地安排一系列争用某一公共资源的活动。
贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。
2 0-1背包问题:给定n种物品和一个背包。
物品i的重量是Wi,其价值为Vi,背包的容量为C。
应如何选择装入背包的物品,使得装入背包中物品的总价值最大?背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1≤i≤n。
四、编程任务1 在所给的活动集合中选出最大的相容活动子集合。
2 计算背包问题/0-1背包问题背包的价值五、数据输入1i 1 2 3 4 5 6 7 8 9 10 11si 1 3 0 5 3 5 6 8 8 2 12fi 4 5 6 7 8 9 10 11 12 13 142W={10,100,120} V={10,20,30} C=50六、结果输出1、将编程计算出的最长最大活动安排结果输出到文件output1.txt。
2、将编程计算出的背包价值输出到文件output2.txt。
七、实验报告内容见《算法分析与设计》实验规范。
实验六图算法1-基本图算法一、实验目的及任务1、掌握图邻接表的存储方法;2、掌握深度优先遍历算法(DFS);3、利用深度优先遍历的timestamps进行拓扑排序或计算有向图的强连通分支;二、实验环境c++或java或Turbo c三、问题描述Given G=(V,E) In DFS, edges are explored out the most recently discovered vertex v that still has unexplored edges leaving it. When v's edges have been explored, the search "backtracks" to explore edges leaving the vertex from which v was discovered. Besides creating a depth-first forest, DFS also timestamps each vertex. Each vertex v has two timestamps: the first timestamp d[v] records when v is first discovered, and the second one f[v] records when the search finishes examining v's adjacency list.A topological sort of a directed acyclic graph (DAG) G = (V;E) is a linear ordering of all its vertices such that if G contains an edge (u; v), then u appears before v in the ordering (if the graph is cyclic, then no linear ordering is possible).A strongly connected component (SCC) of a directed graph G = (V;E) is a maximal subset of vertices C ⊆ V such that ∀u, v ∈C, we have u→v and v→ u.四、编程任务1 、深度优先遍历; 2、利用深度优先遍历的timestamps进行拓扑排序;3、利用深度优先遍历的timestamps进行有向图的强连通分支;五、数据输入六、结果输出1、将编程计算出深度优先遍历结果输出到文件output1.txt;2、将编程进行拓扑排序结果输出到文件output2.txt;3、将编程进行有向图的强连通分支的结果输出到文件output3.txt。