- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7_时空权衡
* * * * * * * * * * 预排序中的模式的计算 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 算法设计与分析 * 教学内容 7.1 计数排序 7.2 串匹配中的输入增强技术 7.2.1 Horpool算法 7.2.2 Boyer-Moore算法 7.3 散列法 7.3.1 开散列(分离链) 7.3.2 闭散列(开式寻址) 7.4 B树 要求 掌握时空权衡的概念及基本方法,掌握时空权衡的方法在常见问题中的应用。 第7章 时空权衡 输入增强:对问题的部分或者全部输入做预处理,对获得的额外信息进行存储,以加速后面问题的求解 预构造: 做过某些处理(预处理),但这个技术只涉及存取结构 注意一点 回顾图的遍历问题 广度优先查找和深度优先查找的时间效率都依赖于图的数据结构 邻接矩阵Θ(n2) 邻接链表Θ(n+m) n和m分别是顶点和边的数量 时间和空间并非完全矛盾的,有效的数据结构可能使得一个算法无论在运行时间上还是在消耗的空间上都达到最小化 对稀疏图而言,边不多。无论空间还是时间上,邻接链表的效率都会更高 计数排序 思路:针对待排序列表中的每一个元素,算出列表中小于该元素的元素个数,把结果记录在一张表中。 7.1 计数排序 7.1 计数排序 ComparisonCountingSort(A[0..n-1] //输入:可排序数组A[0,…,n-1] //输出:将A中元素按照升序排列的数组S[0…n-1] for(i?0 to n-1) Count[i]?0; for(i?0 to n-2) for(j?i+1 to n-1) if(A[i]A[j]) Count[j]?Count[j]+1; else Count[i]?Count[i]+1; for(i?0 to n-1) do S[Count[i]]?A[i]; return S; 算法 伪代码 7.1 计数排序:伪代码及复杂度 ComparisonCountingSort(A[0..n-1] //输入:可排序数组A[0,…,n-1] //输出:将A中元素按照升序排列的数组S[0…n-1] for(i?0 to n-1) Count[i]?0; for(i?0 to n-2) for(j?i+1 to n-1) if(A[i]A[j]) Count[j]?Count[j]+1; else Count[i]?Count[i]+1; for(i?0 to n-1) do S[Count[i]]?A[i]; return S; 算法 伪代码 时间复杂度是平方级的,键值的比较次数和选择排序一样多;但是却需要额外的线性空间因此几乎不推荐它来做实际的应用 计数排序算法分析 计数排序算法在一种情况下还是卓有成效的,即待排序元素的值都来自一个已知的小集合。 如果元素的值是来自位于[l,u]之间的整数,我们可以计算出这些值出现的频率,然后把它们存在数组F[0..u-l]中。 然后把有序列表的前F[0]个位置填l,接下来的F[1]个位置填入l+1. 对比上一章预排序中的模式的计算 7.1 计数排序:伪代码及复杂度 计数排序算法分析实例 13 11 12 13 12 12 数组值 11 12 13 频率 1 3 2 分布值 1 4 6 DistributionCounting(A[0..n-1]) for(j?0 to u-l) D[j]?0; for(i?0 to n-1) D[A[i]-l]?D[A[i]-l]+1; for(j?1 to u-l) D[j]?D[j-1]+D[j]; for(i?n-1 downto 0){ j?A[i]-l ; S[D[j]-1]?A[i]; D[j]?D[j]-1; } return S; 算法伪代码 从右向左处理数组P192 计数排序算法分析:效率如何? DistributionCountingt(A[0..n-1]) for(j?0 to u-l) D[j]?0; for(i?0 to
文档评论(0)