047最优二叉检索树的算法
数据结构—最优二叉树及其应用

实验一 最优二叉树及其应用 1. 程序设计简介 本实验程序用于验证最优二叉树的算法。树的存储采用带孩子的双亲顺序存储方法。 2.源程序 //最优二叉树 #include #include using namespace std; //定义结点类型 template struct hufnode { T wei;//权值 int prt;//指向父结点的指针域(结点元素的下标) int lch;//左指针域(结点元素的下标) int rch;//右指针域(结点元素的下标) }; //由于数组下标一般是非负数整数,因此可以用-1作为空指针值 template class huffman_BT { int nn;//叶子结点的个数 hufnode*BT;//最优二叉树顺序存储空间的首地址 public: huffman_BT(){BT=NULL;}//构造函数,对最优二叉树进行初始化 void creat_hufm_BT(int n,T w[]);//生成最优二叉树 void select(hufnode*p,int k,int *i,int *j); void prt_hufm_BT();//输出最优二叉树存储空间状、 }; //生成最优二叉树 template void huffman_BT::creat_hufm_BT(int n,T w[]) {//n是叶子结点的个数,w是叶子结点的权值数组 hufnode *p; int k,i,j,m; nn=n; m=n*2-1; BT=new hufnode[m];//申请最优二叉树存储空间 p=BT; for(k=0;k{//设置初始状态,所有结点的指针为空 (p+k)->prt=-1; (p+k)->lch=-1; (p+k)->rch=-1; } for(k=0;k{//前n个结点的权值分别为个结点的权值 (p+k)->wei=w[k]; } for(k=n;k{//构造最优二叉树 select(p,k,&i,&j);//在前K-1个结点中选择权值最小的两个根结点i和j (p+i)->prt=k; (p+j)->prt=k;//合并构成新的二叉树 (p+k)->lch=i; (p+k)->rch=j; (p+k)->wei=(p+i)->wei+(p+j)->wei; } } template void huffman_BT::select(hufnode*p,int k,int *i,int *j) {//在前K-1个结点中选择权值最小的两个根结点i和j T w; int n=0; while(nprt!=-1) n++;//寻找指向父结点指针为空的起始结点 w=(p+n)->wei; *i=n; while(n{ if((((p+n)->wei)prt==-1)) {*i=n; w=(p+n)->wei; }n++; } n=0; while((nprt!=-1)||(n==(*i))) n++; w=(p+n)->wei; *j=n; while(n{ if(((p+n)->weiprt==-1)) { *j=n; w=(p+n)->wei; } n++; } if((*i)>(*j)) { n=(*i); *i=*j; *j=n; }
算法设计与分析-习题参考答案

算法设计与分析基础习题1.15..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:●如果d整除u和v, 那么d一定能整除u±v;●如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d能整除n和r,也一定能整除m=r+qn和n。
数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。
故gcd(m,n)=gcd(n,r)6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0<=m<n的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcd(m,n)=gcd(n,m)并且这种交换处理只发生一次.7.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?(1次)b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?(5次)gcd(5,8)习题1.21.(农夫过河)P—农夫W—狼G—山羊C—白菜2.(过桥问题)1,2,5,10---分别代表4个人, f—手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c=0的实根,写出上述算法的伪代码(可以假设sqrt(x)是求平方根的函数)算法Quadratic(a,b,c)//求方程ax^2+bx+c=0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息If a≠0D←b*b-4*a*cIf D>0temp←2*ax1←(-b+sqrt(D))/tempx2←(-b-sqrt(D))/tempreturn x1,x2else if D=0 return –b/(2*a)else return “no real roots”else //a=0if b≠0 return –c/belse //a=b=0if c=0 return “no real numbers”else return “no real roots”5.描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2...),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法DectoBin(n)//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1...n]中i=1while n!=0 do {Bin[i]=n%2;n=(int)n/2;i++;}while i!=0 do{print Bin[i];i--;}9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略) 对这个算法做尽可能多的改进.算法MinDistance(A[0..n-1])//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements习题1.31.考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表‖60,35,81,98,14,47‖排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表‖60,35,81,98,14,47‖排序的过程如下所示:b.该算法不稳定.比如对列表‖2,2*‖排序c.该算法不在位.额外空间for S and Count[] 4.(古老的七桥问题)习题1.41.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度. a.删除数组的第i 个元素(1<=i<=n)b.删除有序数组的第i 个元素(依然有序) hints:a. Replace the i th element with the last element and decrease the array size of 1b. Replace the ith element with a special symbol that cannot be a value of the array ’s element(e.g., 0 for an array of positive numbers ) to mark the i th position is empty. (―lazy deletion ‖)第2章 习题2.17.对下列断言进行证明:(如果是错误的,请举例) a. 如果t(n )∈O(g(n),则g(n)∈Ω(t(n)) b.α>0时,Θ(αg(n))= Θ(g(n)) 解:a. 这个断言是正确的。
KdTree算法详解

KdTree算法详解kd树(k-dimensional树的简称),是⼀种分割k维数据空间的数据结构,主要应⽤于多维空间关键数据的近邻查找(Nearest Neighbor)和近似最近邻查找(Approximate Nearest Neighbor)。
⼀、Kd-tree其实KDTree就是⼆叉查找树(Binary Search Tree,BST)的变种。
⼆叉查找树的性质如下:1)若它的左⼦树不为空,则左⼦树上所有结点的值均⼩于它的根结点的值;2)若它的右⼦树不为空,则右⼦树上所有结点的值均⼤于它的根结点的值;3)它的左、右⼦树也分别为⼆叉排序树;例如:如果我们要处理的对象集合是⼀个K维空间中的数据集,我们⾸先需要确定是:怎样将⼀个K维数据划分到左⼦树或右⼦树?在构造1维BST树类似,只不过对于Kd树,在当前节点的⽐较并不是通过对K维数据进⾏整体的⽐较,⽽是选择某⼀个维度d,然后⽐较两个K维数据在该维度 d上的⼤⼩关系,即每次选择⼀个维度d来对K维数据进⾏划分,相当于⽤⼀个垂直于该维度d的超平⾯将K维数据空间⼀分为⼆,平⾯⼀边的所有K维数据在d维度上的值⼩于平⾯另⼀边的所有K维数据对应维度上的值。
也就是说,我们每选择⼀个维度进⾏如上的划分,就会将K维数据空间划分为两个部分,如果我们继续分别对这两个⼦K维空间进⾏如上的划分,⼜会得到新的⼦空间,对新的⼦空间⼜继续划分,重复以上过程直到每个⼦空间都不能再划分为⽌。
以上就是构造 Kd-Tree的过程,上述过程中涉及到两个重要的问题:1. 每次对⼦空间的划分时,怎样确定在哪个维度上进⾏划分;2. 在某个维度上进⾏划分时,怎样确保建⽴的树尽量地平衡,树越平衡代表着分割得越平均,搜索的时间也就是越少。
1、在哪个维度上进⾏划分?⼀种选取轴点的策略是median of the most spread dimension pivoting strategy,统计样本在每个维度上的数据⽅差,挑选出对应⽅差最⼤值的那个维度。
数据结构-C语言-树和二叉树

练习
一棵完全二叉树有5000个结点,可以计算出其
叶结点的个数是( 2500)。
二叉树的性质和存储结构
性质4: 具有n个结点的完全二叉树的深度必为[log2n]+1
k-1层 k层
2k−1−1<n≤2k−1 或 2k−1≤n<2k n k−1≤log2n<k,因为k是整数
所以k = log2n + 1
遍历二叉树和线索二叉树
遍历定义
指按某条搜索路线遍访每个结点且不重复(又称周游)。
遍历用途
它是树结构插入、删除、修改、查找和排序运算的前提, 是二叉树一切运算的基础和核心。
遍历规则 D
先左后右
L
R
DLR LDR LRD DRL RDL RLD
遍历规则
A BC DE
先序遍历:A B D E C 中序遍历:D B E A C 后序遍历:D E B C A
练习 具有3个结点的二叉树可能有几种不同形态?普通树呢?
5种/2种
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
(a + b *(c-d)-e/f)的二叉树
目 录 导 航 Contents
5.1 树和二叉树的定义 5.2 案例引入 5.3 树和二叉树的抽象数据类型定义 5.4 二叉树的性质和存储结构 5.5 遍历二叉树和线索二叉树 5.6 树和森林 5.7 哈夫曼树及其应用 5.8 案例分析与实现
二叉树的抽象数据类型定义
特殊形态的二叉树
只有最后一层叶子不满,且全部集中在左边
树与二叉树考研习题

树与二叉树考研习题.txt9母爱是一滴甘露,亲吻干涸的泥土,它用细雨的温情,用钻石的坚毅,期待着闪着碎光的泥土的肥沃;母爱不是人生中的一个凝固点,而是一条流动的河,这条河造就了我们生命中美丽的情感之景。
一、第六章树和二叉树一、选择题1.已知一算术表达式的中缀形式为 A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为( ) A.-A+B*C/DE B. -A+B*CD/E C.-+*ABC/DE D. -+A*BC/DE【北京航空航天大学 1999 一、3 (2分)】2.算术表达式a+b*(c+d/e)转为后缀表达式后为()【中山大学 1999 一、5】EFDGAB/++*-C*A.ab+cde/* B.abcde/+*+ C.abcde/*++ D.abcde*/++3. 设有一表示算术表达式的二叉树(见下图),它所表示的算术表达式是()【南京理工大学1999 一、20(2分)】A. A*B+C/(D*E)+(F-G)B. (A*B+C)/(D*E)+(F-G)C. (A*B+C)/(D*E+(F-G))D. A*B+C/D*E+F-G4. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为()A.5 B.6 C.7 D.8【南京理工大学 2000 一、8 (1.5分)】5. 在下述结论中,正确的是()【南京理工大学 1999 一、4 (1分)】①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。
A.①②③ B.②③④ C.②④ D.①④6. 设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F 中第一棵树的结点个数是()A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定【南京理工大学2000 一、17(1.5分)】7. 树是结点的有限集合,它( (1))根结点,记为T。
数据结构第九、十章 作业答案

第九章 查找一、填空题1. 在数据的存放无规律而言的线性表中进行检索的最佳方法是 顺序查找(线性查找) 。
2. 线性有序表(a 1,a 2,a 3,…,a 256)是从小到大排列的,对一个给定的值k ,用二分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。
设有100个结点,用二分法查找时,最大比较次数是 7 。
3. 假设在有序线性表a[1..20]上进行折半查找,则比较一次查找成功的结点数为1;比较两次查找成功的结点数为 2 ;比较四次查找成功的结点数为 8 ,其下标从小到大依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。
解:显然,平均查找长度=O (log 2n )<5次(25)。
但具体是多少次,则不应当按照公式)1(log 12++=n nn ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。
因为这是在假设n =2m -1的情况下推导出来的公式。
应当用穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.7 !!! 4.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 比较大小。
5. 在各种查找方法中,平均查找长度与结点个数n 无关的查找方法是 散列查找 。
6. 散列法存储的基本思想是由 关键字的值 决定数据的存储地址。
7. 有一个表长为m 的散列表,初始状态为空,现将n (n<m )个不同的关键码插入到散列表中,解决冲突的方法是用线性探测法。
如果这n 个关键码的散列地址都相同,则探测的总次数是 n(n-1)/2=( 1+2+…+n-1) 。
(而任一元素查找次数 ≤n-1)8、设一哈希表表长M 为100 ,用除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找方法中,平均查找长度与结点个数无关的是哈希查找法 10、对线性表进行二分查找时,要求线性表必须以 顺序 方式存储,且结点按关键字有序排列。
算法设计与分析考试题及答案-算法设计与优化答案之欧阳文创编
1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,_____ ___,__________,__________。
2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。
3.某一问题可用动态规划算法求解的显著特征是____________________________________。
4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列_____________________________。
5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。
6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。
7.以深度优先方式系统搜索问题解的算法称为_____________。
8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。
9.动态规划算法的两个基本要素是___________和___________。
10.二分搜索算法是利用_______________实现的算法。
二、综合题(50分)1.写出设计动态规划算法的主要步骤。
2.流水作业调度问题的johnson算法的思想。
3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。
4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。
云南省-(2013年)专升本十套-数据结构(试题及答案)
数据结构试卷(一)一、单选题(每题 2 分,共 20 分)1.栈和队列的共同特点是()。
A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进行插入运算时( ).A.仅修改头指针B.头、尾指针都要修改C.仅修改尾指针D.头、尾指针可能都要修改3.以下数据结构中哪一个是非线性结构?( )A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][ n],假设A[0][0] 存放位置在644(10), A[2][2] 存放位置在676(10),每个元素占一个空间,问 A[3][3] (10)存放在什么位置?脚注(10)表示用 10 进制表示。
A .688B . 678C. 692 D . 6965.树最适合用来表示 ()。
A. 有序数据元素B. 无序数据元素C. 元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第 k 层的结点数最多为 ( ).A. 2k -1 B.2K+1 C.2K-1 D. 2 k-17.若有 18 个元素的有序表存放在一维数组A[19]中,第一个元素放A[1] 中,现进行二分查找,则查找A[ 3]的比较序列的下标依次为()A. 1 , 2, 3B. 9 , 5, 2, 3C. 9, 5, 3D. 9 ,4, 2, 38.对 n 个记录的文件进行快速排序,所需要的辅助存储空间大致为A. O(1)B. O ( n)C. O(1og2n)D. O(n2)9.对于线性表( 7, 34, 55, 25, 64,46, 20,10)进行散列存储时,若选用H(K)=K %9 作为散列函数,则散列地址为1的元素有()个,A.1B.2C. 3D. 410. 设有 6 个结点的无向图,该图至少应有()条边才能确保是一个连通图。
A.5B.6C.7D.8二、填空题(每空 1 分,共 26分)1.通常从四个方面评价算法的质量:_________、 _________、 _________ 和_________。
中南大学十套数据结构试题及答案2
数据结构试卷(一)一、单选题(每题2 分,共20分)1.栈和队列的共同特点是( )。
A。
只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D。
没有共同点2.用链接方式存储的队列,在进行插入运算时( )。
A. 仅修改头指针 B。
头、尾指针都要修改C。
仅修改尾指针 D.头、尾指针可能都要修改3.以下数据结构中哪一个是非线性结构?( )A。
队列 B. 栈C。
线性表 D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示用10进制表示。
A.688 B.678 C.692 D.6965.树最适合用来表示( ).A。
有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据D。
元素之间无联系的数据6.二叉树的第k层的结点数最多为( ).A.2k-1 B。
2K+1 C.2K-1 D。
2k—17.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为( )A. 1,2,3B. 9,5,2,3C. 9,5,3 D。
9,4,2,38.对n个记录的文件进行快速排序,所需要的辅助存储空间大致为A。
O(1) B. O(n) C. O(1og2n) D. O(n2)9.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)=K %9作为散列函数,则散列地址为1的元素有()个,A.1 B.2 C.3 D.410.设有6个结点的无向图,该图至少应有()条边才能确保是一个连通图。
A。
5 B。
6 C。
7 D.8二、填空题(每空1分,共26分)1.通常从四个方面评价算法的质量:_________、_________、_________和_________.2.一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________.3.假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数为__________个,树的深度为___________,树的度为_________。
c++算法大全
算法大全目录【程序1-1】欧几里德递归算法 (1)【程序1-2】欧几里德迭代算法 (1)【程序1-3】Gcd的连续整数检测算法 (1)【程序1-4】求F n (1)【程序1-5】逆序输出正整数的各位数 (1)【程序1-6】汉诺塔问题 (1)【程序1-7】排列产生算法 (2)【程序2-1】求数组元素累加之和的迭代程序 (2)【程序2-2】求数组元素累加之和的递归程序 (3)【程序2-3】矩阵乘法 (3)【程序3-1】伸展树类 (3)【程序3-2】旋转函数 (4)【程序3-3】伸展树插入 (4)【程序3-4】跳表结点类 (5)【程序3-5】跳表类 (5)【程序3-6】构造函数 (6)【程序3-7】级数分配 (6)【程序3-8】插入运算 (6)【程序4-1】ENode类 (7)【程序4-2】图的广度优先遍历 (8)【程序4-3】图的深度优先搜索 (8)【程序4-4】计算d和Low (9)【程序4-5】求双连通分量 (9)【程序4-6】与或树及其结点类型 (9)【程序4-7】判断与或树是否可解算法 (10)【程序4-8】广度优先生成解树的算法框架 (10)【程序5-1】分治法 (11)【程序5-2】一分为二的分治法 (11)【程序5-3】可排序表类 (11)【程序5-5】分治法求最大、最小元 (12)【程序5-6】二分搜索算法框架 (13)【程序5-7】对半搜索递归算法 (13)【程序5-8】对半搜索的迭代算法 (13)【程序5-9】Merge函数 (14)【程序5-10】两路合并排序 (14)【程序5-11】分划函数 (14)【程序5-12】快速排序 (15)【程序5-13】Select函数 (15)【程序5-14】线性时间选择算法 (15)【程序6-1】贪心法 (16)【程序6-2】背包问题的贪心算法 (16)【程序6-3】带时限作业排序的贪心算法 (17)【程序6-4】带时限的作业排序程序 (17)【程序6-5】使用并查集的带时限作业排序程序 (17)【程序6-6】两路合并最佳模式的贪心算法 (18)【程序6-7】最小代价生成树的贪心算法 (18)【程序6-8】普里姆算法 (19)【程序6-9】克鲁斯卡尔算法 (20)【程序6-10】迪杰斯特拉算法 (20)【程序6-11】多带最优存储 (21)【程序7-1】多段图的向前递推算法 (22)【程序7-2】弗洛伊德算法 (22)【程序7-3】矩阵连乘算法 (22)【程序7-4】矩阵连乘的备忘录方法 (23)【程序7-5】求LCS的长度 (24)【程序7-6】构造最长公共子序列 (24)【程序7-7】构造最优二叉搜索树 (25)【程序7-8】0/1背包的递归算法 (25)【程序7-9】0/1背包算法的粗略描述 (26)【程序7-10】0/1背包最优解值算法 (26)【程序7-11】0/1背包最优解算法 (28)【程序7-12】Johnson算法 (28)【程序8-1】递归回溯法 (28)【程序8-2】迭代回溯法 (29)【程序8-3】蒙特卡罗算法 (29)【程序8-4】n-皇后问题的回溯算法 (29)【程序8-5】子集和数的回溯算法 (30)【程序8-6】图的m-着色算法 (30)【程序8-7】哈密顿环算法 (31)【程序8-8】0/1背包算法 (31)【程序8-9】批处理作业调度算法 (33)【程序9-2】基于上下界函数的FIFO分枝限界法 (34)【程序9-3】基于上下界的LC分枝限界法 (35)【程序9-4】带时限的作业排序 (35)【程序9-5】类声明 (36)【程序9-6】上下界函数 (37)【程序9-7】0/1背包问题的LC分枝限界法 (38)【程序9-8】批作业类和活结点结构 (38)【程序9-9】下界函数 (39)【程序9-10】批处理作业调度LCBB算法 (40)【程序10-1】不确定搜索算法 (41)【程序10-2】不确定排序算法 (41)【程序10-3】最大集团判定问题不确定算法 (41)【程序10-4】可满足性问题的不确定算法 (41)【程序11-1】标识重复元素的拉斯维加斯算法 (42)【程序11-2】伪素数测试 (42)【程序11-3】合数性检测 (42)【程序11-4】素数测试的蒙特卡罗算法 (43)【程序11-5】快速排序舍伍德算法 (43)【程序12-1】平面图着色近似算法 (43)【程序12-2】最小顶点覆盖近似算法 (43)【程序12-3】集合覆盖近似算法 (43)【程序12-4】子集和数算法 (44)【程序12-5】修正表L为新表 (44)【程序12-6】子集和数近似方案 (44)【程序1-1】欧几里德递归算法intRGc d(int m,int n){if(n==0)re turn m;else re turnR Gc d(n,m%n);}【程序1-2】欧几里德迭代算法int Gc d(int m,int n){if (m==0)re turn n;if (n==0)re turn m;if (m>n) Swa p(m,n);while(m>0){int c=n%m;n=m;m=c;}return n;}【程序1-3】Gcd的连续整数检测算法int Gc d(int m,int n){if (m==0)re turn n;if (n==0)re turn m;int t=m>n?n:m;while (m%t || n%t) t--;return t;}【程序1-4】求F nlo ng F ib( lo ng n){if(n<=1) re turn n;else re turn F ib(n-2)+F ib(n-1);}【程序1-5】逆序输出正整数的各位数#inc lude<ios trea m.h>vo id P rintDig it(uns ig ne d int n){ //设k位正整数为d1d2 d k,按各位数的逆序d k d k 1 d1形式输出cout<<n%10; //输出最后一位数d kif(n>=10) P rintDig it(n/10); //以逆序输出前k-1位数}vo id ma in(){uns ig ne d int n;cin>>n;PrintDig it(n);}【程序1-6】汉诺塔问题#inc lude <ios trea m.h>enum tower { A='X', B='Y', C='Z'};vo id Mo ve(int n,towe r x,towe r y){ //将第n个圆盘从塔座x移到塔座y的顶部cout << "T he disk "<<n<<" is mo ve d fro m "<<c ha r(x) << " to to p of tower " << c ha r(y) << e ndl;}vo id Ha no i(int n, tower x, to wer y, towe r z){ // 将塔座x上部的n个圆盘移到塔座y上,顺序不变。