网站大量收购独家精品文档,联系QQ:2885784924

ch7时空权衡-02.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ch7时空权衡-02

LingJie/GDUT 第7章 时空权衡 主要内容: 7.1 计数排序 7.2 串匹配中的输入增强技术 7.3 散列法 7.4 B树 空间换时间的技术 通常使用额外的存储空间来实现更快或更方便的数据存取。 思路: 对问题的部分或全部输入做预处理,然后对得到的额外信息进行存储,以加速后面问题的求解。——称为输入增强技术。 空间换时间的技术 动态规划法也是与空间换时间的思想有关,其基础是把给定问题的重复子问题的解记录在表中,然后求所讨论问题的解。 有些算法不存在时空争夺的问题。 7.1 计数排序 计数排序:对待排序列表中的每一个元素,算出列表中小于该元素的元素个数,并把结果记录在一张表中。排序时只需简单地把列表中的元素复制到它在新列表中的相应位置上。 计数排序算法 ComparisonCountingSort(A[0..n-1]) //用比较计数法对数组排序 //输入:数组A //输出:已排序数组S; for i=0 to n-1 do count[i]=0 for i=0 to n-1 do for j=i+1 to n-1 do 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 计数排序举例 计数排序算法的效率 分布计数 举例 待排序序列:{13,11,12,13,12,12} 注:如果下标从0开始,分布值减1 D[0] D[1] D[2] S[0] S[1] S[2] S[3] S[4] S[5] 算法伪代码 distributionCounting(A[0..n-1]) //输入数组A,元素值位于l与u之间 //输出数组S For j=0 to u-1 do D[j]=0 For i=0 to n-1 do D[A[i]-l]=D[A[i]-l]+1 For j=1 to u-1 do D[j]=D[j]+D[j-1] For i=n-1 to 0 do j=A[i]-l; S[D[j]-1]=A[i]; D[j]=D[j]-1 Return S 7.2 串匹配中的输入增强技术 模式匹配中的好算法大都使用了输入增强技术,最著名的算法有: KMP算法:Knuth-Morris-Pratt BM算法: Boyer-Moore 1.朴素模式匹配算法 求子串位置的定位函数Index( S, T, pos). 模式匹配:子串的定位操作通常称作串的模式匹配。 目标串:主串S。 模式串:子串T。 匹配成功:若存在T的每个字符依次和S中的一个连续字符序列相等,则称匹配成功。返回T中第一个字符在S中的位置。 匹配不成功:返回0。 Brute-Force简称为BF算法,亦称简单匹配算法,其基本思路是: 从目标串s=“s1s2…sn的第一个字符开始和模式串t=“t1t2…tm中的第一个字符比较,若相等,则继续逐个比较后续字符;否则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较。依次类推,若从模式串s的第i个字符开始,每个字符依次和目标串t中的对应字符相等,则匹配成功,该算法返回i;否则,匹配失败,函数返回0。 例如,设目标串s=“cddcdc”,模式串t=“cdc”。s的长度为n(n=6),t的长度为m(m=3)。用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置。BF模式匹配过程如下所示。 子串定位int Index( SString S, SString T, int pos) { i= pos; j = 1; while( i=S[0] j=T[0]){ if(S[i] == T[j]){ ++i; ++j; } else{ i = i-j+2; j =1; } } if(jT[0]) return i-T[0]; else return 0; } 朴素模式匹配算法的时间复杂度 主串长n; 子串长m。可能匹配成功的位置(1 ~ n-m+1)。 ①最好的情况下, 第i个位置匹配成功,比较了(i-1+m)次,平均比较次数: 最好情况下算法的平均时

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档