哈工大软件开发设计与实践.docxVIP

  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文档。上传文档
查看更多
《软件开发设计与实践》实验报告王逸格计算机科学与技术学院2016年5月摘要本报告阐述了《软件开发与设计》课程所实现的各个程序的功能,介绍了其算法设计思路的由来,并分析了算法的效率,优缺点及实际应用的场合。报告分模块对程序进行解释,将重点置于对新颖设计思想的介绍,以及由此思想设计出的算法的优劣的分析,穿插着个人设计思路的心得体会以及对经典思路的总结分析,此外,通过设计程序实现了一些算法的实际应用。 1 线性结构41.1 跳表ADT41.1.1 功能介绍41.1.2 算法分析及具体实现41.1.3运用51.1.4 运行结果51.2 KMP算法51.2.1 功能介绍51.2.2 算法分析51.3 优先队列61.3.1 程序功能61.3.2 算法分析61.3.3 运行结果71.4 矩阵的优化81.4.1 程序的功能81.4.2 算法的分析81.5实现语言和运用环境92 树形结构92.1 前序、后序线索二叉树的实现及遍历92.1.1 程序功能92.1.2算法分析92.1.3 实验结果112.2 二叉树与森林之间的转换112.2.1 程序功能112.2.2 算法分析122.2.3 运行结果132.3 K叉哈夫曼树142.3.1 程序功能142.3.2 算法分析142.3.3 运行结果143 图结构143.1无向图的双连通性问题及有向图的强连通性143.1.1程序功能143.1.2 无向图双连通性问题153.1.3 有向图的强连通性163.1.4 运行结果173.2 最小生成树算法的实现173.2.1 Prim 算法173.2.2 Kruskal算法183.3 最短路径的算法优化193.3.1 程序功能193.3.2 Dijkstra算法203.3.3 Dijkstra算法的运行结果203.3.4 Floyd 算法203.3.5 Floyd 算法的运行结果234 查找及散列结构234.1 平衡树234.1.1 程序功能234.1.2 算法分析244.1.3 运行结果264.2散列查找274.2.1 算法的实现285 排序方法295.1快排的优化295.1.1 程序的功能295.1.2算法实现295.1.3 运行结果305.2 线性排序算法305.2.1 计数排序315.2.2 基数排序315.2.3 桶排序311 线性结构1.1 跳表ADT1.1.1 功能介绍跳表支持插入,删除,查找,打印等功能,其具体实现函数由skip_list *create_skip_list() 创建跳表函数int Insert(skip_list *list, int value) 插入函数int DELETENODE(skip_list *list,int value) 删除函数int SEARCH(skip_list *list, int value) 查找函数void PRINT(skip_list *list) 打印函数void freelist(skip_list *list) 清空跳表函数1.1.2 算法分析及具体实现跳表是链表的一种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查找元素时,跳表能够提供O(log n)的时间复杂度。跳表的核心思想?,其实是一种通过“空间来换取时间”的一个算法,通过在每个节点中增加了向前的指针(即层),从而提升查找的效率。跳跃列表是按层建造的。底层是一个普通的有序链表。每个更高层都充当下面列表的「快速跑道」一个跳表,应该具有以下特征:1,一个跳表应该有几个层(level)组成;2,跳表的第一层包含所有的元素;3,每一层都是一个有序的链表;4,如果元素x出现在第i层,则所有比i小的层都包含x;5,每个节点包含key及其对应的value和一个指向同一层链表的下个节点的指针数组具体实现过程:创建跳表:跳表list含level和Node *head,Node含元素的value和*next[],对跳表进行初始化。插入:跳表list含level,编写一个int randomlevel()函数,随机产生层数,将元素插入相应层数查找:从高层开始查找,若遇到第一个比该数大的数,则往下走一层,之后向后走,遇到大数则向下,直到搜索到或遍历完整个跳表为止。删除:查找到该元素的位置,逐层进行删除,若有必要要更新当前跳表的层数。打印跳表:逐层打印。清空跳表:1.1.3运用跳表在当前热门的开源项目中也有很多应用,比如LevelDB的核心数据结构memtable是用跳表实现的,redis的sorted set数据结构也是有跳表实现的。1.1.4 运行结果随机生成20个100以内的随机数进行测试:1.2 KMP算法1.2.1 功能介绍KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同

文档评论(0)

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

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

1亿VIP精品文档

相关文档