数据结构chapter 10 选讲内容.pptVIP

  • 7
  • 0
  • 约1.01万字
  • 约 44页
  • 2017-06-02 发布于河南
  • 举报
数据结构chapter 10 选讲内容

* * 改进后的算法 当当si≠pj时,让主串中的第i个字符与模式中第j=next(j)个字符比较 如果相等则i,j均加1 否则j=next(next(j)),如果仍然不相等,则这个过程一直进行下去直到 j==0。此时模式 右移一个位置,即从主 串的下一个位置(i+1)开始从新进行比较 * * KMP算法C描述 int Index_KMP(SString S, SString T, int pos) { i = pos; j= 1; while(i = S[0] j=T[0]) { if (j==0 || S[i]=T[j]) {i++;j++;} else j=next(j); } if (j T[0]) return i-T[0]; else return 0; } 由此可见改进算法是以next(j)为基础来运行的,对于给定的模式串,显然根据定义我们可以手工推算出next(j)的值,但是右没有更好的方法可以得到 它的值呢? * * next(j)的计算 特别注意:从上面的分析可以知道,next(j)的值完全取决于模式串,与主串没有任何关系 首先,根据定义有:next[1]=0 假定next[j]=k,这表明 j k 模式串 * * next(j+1)与next(j)的关系 假定next[j]=k,那么next[j+1]有两种可能: (1)pk=pj,这表明在模式串中存在: 于是有:next[j+1]=k+1 j k j+1 j+1 k+1 * * next(j+1)计算 (2)pk≠pj,这相当于一个模式匹配问题,只不过主串和模式串是同一个串,这个时候应该将模式向右移动,使主串第j个字符和模式串中的第next[k]=k’个字符比较 如果pk’=pj,则说明在主串第j+1个字符前面有k’个字符的最大子串与模式中从首字符开始的长度为k’的子串相等,于是有next[j+1]=next[k]+1 pj≠pk’,则继续将模式串向右滑动next[k’]个字符,再比较,依次类推,直到找到某个匹配字符或不存在任何k’,这个时候根据定义 next[j+1]=1 * * 第二种情况演示 k’ j+1 k 子串 j k 主串 相当于串比较 next(k)=k’ 相当于j+1前面由k’个字符组成的串与子串头k’个字符组成的子串相同,因此next(j+1)=k’+1=next(k)+1 假定next(j)=k * * next(j)计算示例 j 1 2 3 4 5 6 模式串 a b a a b c next(j) 0 1 1 2 2 3 当j=7时,next(6)=3,需要比较p6和p3,由于p6≠p3,所以需要继续比较;由于next(3)=1,故需比较p6和p1,由于p6≠p1,所以需要继续比较,由于next(1)=0,所以next(7)=1; 当j=8时,next(7)=1,需要比较p7和p1,由于p7=p1,所以next[8]=next[7]+1=2 7 a 1 8 c 2 * * next(j)函数C描述 void get_next(SString T,int next[]) { j=1; next[1]=0; k=0; while(j T[0]) { if (k==0 || T[j]==T[k]) {++j;++k;next[j]=k;} else k=next[k]; } } * * Huffman编码存储C描述 typedef struct { unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; * * Huffman编码算法(初始化) void HuffmanCoding(HuffmanTree HT, HuffmanCode HC, int *w, int n) { //求n个字符的huffman编码,w为它们的权值 if (n=1) return; m = 2*n-1; // 节点总数目 HT=(HuffmanTree)malloc((m+1)* sizeof(HTNode));//0号未使用 for(p=HT,i=1;i=n;i++,p++,w++) *p={*w,0,0,0}; for(;i=m;i++,p++) *p={0,0,0,0}; * * Huffman编码算法(建树) for(i=n+1;i=m;i++){ Select(HT,i-1,s1,s2); //从前面i-1元素中选两个最小的值 HT[s1].parent = i; HT[s2].

文档评论(0)

1亿VIP精品文档

相关文档