《算法指导书.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法指导书

目 录 实验一:分治与递归 1 实验二:贪心算法 3 实验三:动态规划法 5 实验四(一):回溯法 7 实验四(二):分枝限界法 9 参考书目: 11 实验一:分治与递归 【实验目的】 学会应用分治算法思想完成汽车牌照的快速查找。 【实验要求】 利用基数排序的思想对一批具有结构特征的汽车牌照进行排序,并且利用二分查找的思想对排好序的汽车牌照记录实现查询。对于车牌号为关键字的记录集合,可以人工录入数据,也可以按自动方式随机生成。按分治与递归的算法思想策略完成程序编写及实现,输入要求的一批数据记录后,屏幕输出排好序的车牌号码及相关信息。查询时,程序查找到匹配的数据,并输出该关键字的其他数据项。要求完成:⑴算法描述⑵写出程序代码⑶完成调试⑷进行过程与结果分析。 【实验性质】 验证性实验。 【实验内容】 应用分治策略,进行二分查找。将一个较大的问题划分为若干较小的问题进行求解,降低求解难度,从而获得原问题的解。进行算法设计,并写出相应程序,进行调试测试。 测试数据的每个记录包括五项,分别为牌照号码、汽车商标、颜色、注册日期和车主的姓名,其中牌照号码一项的输入形式如下: k0 k1 k2 k3 k4 k5 k6 0 1 B 7 3 2 8 其中k0----k1输入值为01―31(代表地区),k2输入值为A----Z(代表车的使用类型),后4位为0000―9999(代表车号),例如:01B7328。这种牌照号码具有多关键字的特征,可以将其分为三段来考虑,即:数字、字母和数字。其余四项输入内容因为不涉及本程序的核心思想,故只要求一般字符串类型即可。查询时要求输入合法的汽车牌照号码。测试数据要求用30个左右的数据项进行测试,头两位暂限定01-04,第3位也暂限定为A----E,以便可使牌照号码相对集中。 【注意事项】 用C语言或C++实现算法。选择合适的数据结构。 【调试分析和心得体会】 对整个算法实现的时间复杂度进行讨论分析。 【选做题一】 完成矩阵乘积的Strassen算法描述、实现及其复杂度分析。 【选做题二】 设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表:⑴每个选手必须与其他n-1个选手各赛一次;⑵每个选手一天只能赛一次;⑶循环赛一共进行n-1天。按此要求可将比赛日程表设计-成有n行和n-l列的一个表。在表中第i行和第j列处填入第i个选手在第j天所遇到的选手。用分治法编写为该循环赛设计一张比赛日程表的算法并运行实现、对复杂度进行分析。 实验二:贪心算法 【实验目的】 应用贪心算法思想求解管道铺设施工的最佳方案。 【实验要求】 需要在某个城市的n个居民区之间铺设煤气管道,则在这n个居民区之间只要铺设n-1条管道即可。假设任意两个居民区之间都可以架设管道,但由于地理环境的不同,所需经费不同。选择最优的施工方案能使总投资尽可能少,这个问题即为求网的“最小生成树”问题。参照以下居民区示意图,使得求解算法为:在可能架设的m条管道中选取n-1条,既能连通n-1个居民区,有使总投资达到“最小”。网可采用邻接矩阵为存储结构,以定点对(i,j)的形式输出最小生成树的边。 要求完成:⑴算法描述⑵写出程序代码⑶完成调试⑷进行过程与结果分析。 【实验性质】 验证性实验。 【实验内容】 应用贪心算法策略,具体可采用Kruskal算法或Prim算法来求解居民区示意图的最小生成树,使得对每一条边的选择都是当前状态下最优的。但无论采用何种算法实现都要选好恰当的辅助数据结构,来存放边或顶点的集合。根据所设计的算法完成程序实现。 【注意事项】 选上述居民区示意图中的数据作为测试数据。用C语言或C++实现算法。选择合适的数据结构。 【调试分析和心得体会】 注意整个算法的时间复杂度,并对其进行分析。 【选做题一】 就下列问题描述应用贪心策略完成其算法描述并实现该算法,之后对其复杂度进行分析:有n个活动的集合A={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。已知:每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。求解:安排尽量多项活动在该场地进行,即求A的最大相容子集。 设待安排的11个活动的开始时间和结束时间按结束时间的升序排列如下: i 1 2 3 4 5 6 7 8 9 10 11 s[i] 1 3 0 5 3 5

文档评论(0)

haha85864 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档