1、杨春明西南科学技大学计算机学院,算法分析与设计 Analysis and Design of Computer Algorithms第七章 时空权衡Space and Time Tradeoffs,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,2,教学内容,时空权衡的方法计数排序串匹配中的输入增强技术散列法B树要求掌握时空权衡的概念及基本方法,掌握时空权衡的方法在常见问题中的应用。,http:/www.mryang.org/, School of Computer Science and Tech
2、nology, SWUST,3,时空权衡,时空权衡是指在算法的设计中,对算法的时间和空间作出权衡。常见的以空间换取时间的方法有:输入增强计数排序,串匹配算法的改进预构造散列法,B树动态规划,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,4,计数排序,思路:针对待排序列表中的每一个元素,算出列表中小于该元素的元素个数,把结果记录在一张表中。,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,5,计数排序算法
3、,算法 ComparisonCountingSort(A0.n-1)for(i0 to n-1) Counti0;for(i0 to n-1) for(ji+1 to n-1) if(AiAj) CountjCountj+1; else CountiCounti+1;for(i0 to n-1) SCountiAi;return S;,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,6,计数排序算法分析,技术排序算法在一种情况下还是卓有成效的,即待排序元素的值都来自一个已知的小集合。如果元素的值是来
4、自位于l,u之间的整数,我们可以计算出这些值出现的频率,然后把它们存在数组F0.u-l中。然后把有序列表的前F0个位置填l,接下来的F1个位置填入l+1.,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,7,计数排序算法分析实例,算法 DistributionCountingt(A0.n-1)for(j0 to u-l) Dj0;for(i0 to n-1) DAi-lDAi-l+1;for(ji+1 to u-l) DjDj-1+Dj;for(in-1 downto 0) jAj-l; SDj-1
5、Ai; DjDj-1;return S;,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,8,串匹配中的输入增强技术,串匹配中的输入增强思想对模式进行预处理,得到它的一些信息,然后在查找的过程中使用这些信息。两种著名算法Knuth-Morris-PartBoyer-Moore,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,9,Horspool算法,考虑在某些文本中查找模式BARBER,s0s1 . c
6、. sn-1,BARBER,移动幅度等于模式长度,移动幅度等于模式长度,模式中最右边的字符c和文本中的c对齐,把模式中前m-1个字符中的c和文本中的c对齐,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,10,Horspool算法中模式的移动距离,对于每一个字符c,移动距离t(c)为:,例如:对于模式BAEBER,E,B,R,A的移动距离分别为1,2,3,4,其他的为6,算法 ShiftTable(P0.m-1)/用Horspool算法和Boyer-Moore算法填充移动表/输入:模式p0.m-1以
7、及一个可能出现字符的字符表/输出:以字母表中字符为索引的数组table0.size-1把Table中的所有元素初始化为m;for(j0 to m-2 ) do TablePjm-1-j;return Table;,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,11,Horspool算法,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,12,Horspool算法,Horspool算法的最差效率(mn)对于
8、随机文本,它的效率为(n),http:/www.mryang.org/, School of Computer Science and Technology, SWUST,13,Boyer-Moore算法,如果在遇到一个不匹配字符之前,如果已经有k(0k0个成功匹配的字符所确定。称为好后缀移动把模式的结尾部分叫做模式的长度为k的后缀,记作suff(k)情况1:当模式中存在两个以上suff(k)的情况时,移动距离d2就是从有数到第二个suff(k)到最右边的距离。,http:/www.mryang.org/, School of Computer Science and Technology,
9、SWUST,16,Boyer-Moore算法,情况2:当模式中存在1个suff(k)的情况时:,k=3移动6,k=3移动?次,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,17,Boyer-Moore算法,为了避免情况2的出现,我们需要找出长度为l0的B树来说,有:,http:/www.mryang.org/, School of Computer Science and Technology, SWUST,29,第七章小结,空间换时间技术有两种主要的类型:输入增强和预构造。分布计数是一种特殊方法,用来对元素取值来自于一个小集合的列表排序。串匹配的Horspool算法是Boyer-Moore算法的简化,都以输入增强技术为基础,且从右向左比较模式中的字符。散列是一种非常高效的实现字典的方法,分为开散列和闭散列,其中必须采用碰撞解决机制。B树是一棵平衡查找树。,