西北工业大学软件工程专业算法总复习

西北工业大学软件工程专业算法总复习

ID:13288096

大小:6.74 MB

页数:12页

时间:2018-07-21

西北工业大学软件工程专业算法总复习_第1页
西北工业大学软件工程专业算法总复习_第2页
西北工业大学软件工程专业算法总复习_第3页
西北工业大学软件工程专业算法总复习_第4页
西北工业大学软件工程专业算法总复习_第5页
资源描述:

《西北工业大学软件工程专业算法总复习》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一.简答题1.写出回溯算法的一般模式。a)用回溯算法搜索子集树的一般模式voidsearch(intm){if(m>n)//递归结束条件output();//相应的处理(输出结果)else{a[m]=0;//设置状态:0表示不要该物品search(m+1);//递归搜索:继续确定下一个物品a[m]=1;//设置状态:1表示要该物品search(m+1);//递归搜索:继续确定下一个物品}}b)用回溯算法搜索子集树的一般模式voidsearch(intm){if(m>n)//递归结束条件output();//相应的处理(输出结果)elsefor(i=m;i<=n;i++){swap(m,i);

2、//交换a[m]和a[i]if()if(canplace(m))//如果m处可放置search(m+1);//搜索下一层swpa(m,i);//交换a[m]和a[i](换回来)}}2.分治算法的基本思想是什么?分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。它的一般的算法设计模式如下:divide-and-conquer(P){if(

3、P

4、<=n0)adhoc(P);dividePintosmallersubinstancesP1,P2,...,Pk;for(i=1;i<=k;i+

5、+)yi=divide-and-conquer(Pi);returnmerge(y1,...,yk);}其中,

6、P

7、表示问题P的规模。n0为一阀值,表示当问题P的规模不超过n0时,问题已容易解出,不必再继续分解。adhoc(P)是该分治法中的基本子算法,用于直接解小规模的问题P。当P的规模不超过n0时,直接算法adhoc(P)求解。算法merge(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1,P2,...,Pk的解y1,y2,...,yk合并为P的解。3.什么是最优子结构性质?1)重叠子问题2)最优子结构我们在这里讨论的最优子结构性质2)最优子结构:如果问题的最优

8、解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。例如,最短路径问题有以下最优子结构性质:如果一个节点x是到源节点ü的最短路径,同时又是到目的节点V的最短路径,则最短路径从u到v是结合最短路径:u到x和x到v。解决任意两点间的最短路径的算法的Floyd-Warshall算法和贝尔曼-福特是动态规划的典型例子。1.分支限界法的基本思想。2.简述分治法与动态规划算法的区别于联系?一.算法设计(1、2两题任选一题)1.矩阵连乘问题。2.最长公共子序列问题。#include#include

9、ring.h>intlcs_length(charx[],chary[]);intmain(){charx[100],y[100];intlen;while(1){scanf("%s%s",x,y);if(x[0]=='0')//约定第一个字符串以‘0’开始表示结束break;len=lcs_length(x,y);printf("%d",len);}}intlcs_length(charx[],chary[]){intm,n,i,j,l[100][100];m=strlen(x);n=strlen(y);for(i=0;i

10、;j++)l[0][j]=0;for(i=1;i<=m;i++)for(j=1;j<=n;j++)if(x[i-1]==y[j-1])//i,j从1开始,但字符串是从0开始l[i][j]=l[i-1][j-1]+1;elseif(l[i][j-1]>l[i-1][j])l[i][j]=l[i][j-1];elsel[i][j]=l[i-1][j];returnl[m][n];}由于每个数组单元的计算耗费Ο(1)时间,算法lcs_length耗时Ο(mn)。一.应用题(3、4选一题3易4难)1.用优先队列式分支限界法解决。2.写出对下面的序列进行合并排序的过程(从小到大)。3.63149982

11、3481570(举例)privatestaticvoidMerge(T[]array,intlo,intmid,inthi){inti=lo,j=mid+1;//把元素拷贝到辅助数组中for(intk=lo;k<=hi;k++){aux[k]=array[k];}//然后按照规则将数据从辅助数组中拷贝回原始的array中for(intk=lo;k<=hi;k++){//如果左边元素没了,直接将右边的剩余元素都

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。