算法设计与分析实验报告(共5页).docx

上传人:飞****2 文档编号:13546703 上传时间:2022-04-30 格式:DOCX 页数:5 大小:31.03KB
返回 下载 相关 举报
算法设计与分析实验报告(共5页).docx_第1页
第1页 / 共5页
算法设计与分析实验报告(共5页).docx_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《算法设计与分析实验报告(共5页).docx》由会员分享,可在线阅读,更多相关《算法设计与分析实验报告(共5页).docx(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上算法设计与分析实验报告20162017学年第二学期老师: 姓名: 学号: 班级: 用分治法求解众数问题 给定含有n个元素的多重集合S,每个元 素在S中出现的次数称为该元素的重数。 多重集S中重数最大的元素称为众数。 例如,S=1,2,2,2,3,5。多重集S的众数 是2,其重数为3。 对于给定的n个自然数组成的多重集S, 计算S的众数及其重数 。问题分析:利用中位数将集合分成左右两部分,比较左右两侧数字个数与中位数个数的大小,在数字个数多的一侧递归,直到中位数的个数大于左右两侧数字的个数。程序代码:#include algorithm#include #include

2、 using namespace std;void split(int s,int n,int &l,int &r) int mid = n/2; for(l = 0; ln; +l) if(sl = smid) break; for(r = l+1;r maxCnt) maxCnt = cnt; mid = snum; if(l+1 maxCnt) getMaxCnt(mid, maxCnt, s, l+1); if(n-r maxCnt) getMaxCnt(mid, maxCnt, s+r, n-r); int main() int s = 1,2,2,2,3,5; int n = si

3、zeof(s)/sizeof(s0); int maxCnt = 0; int num = 0; getMaxCnt(num ,maxCnt, s, n); coutnum maxCnt; return 0;用动态规划算法实现下列问题: 设A和B是两个字符串。我们要用最少的字符 操作将字符串A转换为字符串B,这里所说的 字符操作包括: 删除一个字符; 插入一个字符; 将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操 作数称为字符串A到B的编辑距离,记为d(A,B)。 试设计一个有效算法,对任意两个字符串A和 B,计算出它们的编辑距离d(A,B) 。 以字符串A=“abc”和

4、B=“cbcd”为例, 给出动态规 划算法求解过程.问题分析:状态: DPLR 子串a的前L个字符和子串b的前R个字符的编辑距离 DPLR = min (DPL-1R-1 + 1, DPL-1R + 1, DPLR-1 + 1) a中插入bR,则子问题为 DPLR-1 a中删除aL, 则子问题为 DPL-1R程序代码:#include#include#includeusing namespace std;#define sz 2000char asz, bsz;int dpszsz;int main() while(scanf(%s%s,a,b)!=EOF) int na = strlen(a

5、); int nb = strlen(b); memset(dp,0x3f,sizeof(dp); dp00 = 0; for(int i=0;i=na;i+) for(int j=0;j=nb;j+) dpi+1j+1 = min(dpi+1j+1, dpij + (ai=bj?0:1); dpi+1j = min(dpi+1j, dpij + 1); dpij+1 = min(dpij+1, dpij + 1); printf(%dn,dpnanb); 运行结果:用贪心算法解决删数问题 给定n位正整数a, 去掉其中任意k=n个数 字后, 剩下的数字按原次序排列组成一个 新的正整数. 对于给

6、定的正整数a和正整数k, 设计一个 算法找出剩下数字组成的新数最小的删数方案.问题分析:为了得到的数最小,将整数转换成数组,每次从高位开始,寻找降序子串的第一个数字并删除,直到删除要求的个数。每次删除,都是全局最优选择。程序代码:#include#includeint main() int a,n,k; int i,j,s=1; scanf(%d,&a); scanf(%d,&k); n=log10(a)+1; int pn; j=a; for(i=n-1;i=0;i-) pi=j%10; j/=10; for(i=1;i=k;i+) for(j=0;jn-i;j+) if(pjpj+1) continue; else pj=-1; break; for(j=0;jn-i;j+) if(pj=-1) pj=pj+1; pj+1=-1; for(i=0;in-k;i+) printf(%d,pi); return 0;运行结果:专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁