数据结构(严蔚版)重点练习答案.docVIP

  • 66
  • 0
  • 约 9页
  • 2016-10-12 发布于贵州
  • 举报
数据结构(严蔚版)重点练习答案

作业汇总及参考答案 [如果哪位同学发现本答案中有不对的地方,请星期四告诉我一声,谢谢!] 一、写函数void DelData(int a[], int N),删除有序表a中多余的相同元素。其中N为元素个数[2007-09-18]。 int a[N]; void DelData(int a[], int N) { int i, j; for (i=0, j=0; jN; i++, j++) { if (i j) { a[i] = a[j]; } while (a[i] == a[j+1]) j++; } a[i] = a[j]; } 二、现有模式串ababaabbab,求其next值。[请写出每个next值的求取过程] [2007-09-27] 解: 求next[j]值的算法 ⑴、j的初值为1, next[1]=0, i=0 ⑵、While(j模式串长度) { ①.若i=0或者Ti=Tj,则i++,j++,next[j]=i ②.否则,i=next[i] } 设 a b a b a a b b a b的次序为: 1 2 3 4 5 6 7 8 9 10 则 next(1) = 0; next(2) = 1; next(3) = 1; 因为 P2=b != Pnext(2)=P1=a next(4) = 2; 因为 P3=a = Pnext(3)=P1=a next(5) = 3; 因为 P4=b = Pnext(4)=P2=b next(6) = 4; 因为 P5=a = Pnext(5)=P3=a next(7) = 2; 因为 P6=a != Pnext(6)=P4=b 且!= Pnext(4)=P2=b且!= Pnext(2)=P1=a next(8) = 3; 因为 P7=b = Pnext(7)=P2=b next(9) = 1; 因为 P8=b != Pnext(8)=P3=a 且!= Pnext(3)=P1=a next(10)= 2; 因为 P9=b = Pnext(9)=P1=a 三、假设字符a, b, c, d, e的频度分别为34%, 14%, 25%, 12%, 15%, 计算Huffman编码(要求Huffman树的右子树小于左子树). [2007-10-16] 解: a: 00 b: 010 c: 10 d: 011 e: 11 四、请采用普里姆(Prim)算法(从顶点1开始)和克鲁斯卡尔(Kruskal)算法分别生成下图的最小生成树(请画出每一步的过程)。[2007-10-25] 解: 1、普里姆(Prim)算法是从指定点开始,连通分量不断增长的过程 ⑴ ⑵ ⑶ ⑷ ⑸ 其中:(4,5)和(4,6)两条边权值相等,因此哪个先做都可以。 2、克鲁斯卡尔(Kruskal)算法是从最小的边开始,不断将两个连通分量变成一个连通分量的过程 ⑴ ⑵ ⑶ ⑷ ⑸ 其中:(4,5),(4,6),(1,3)三条边权值都为1,因此哪个先做都可以;然后,再做(2,4), (1,4)两条边,当然这两条边权值也相等,因此,哪个先做都可以。 五.有向网N={V,E},V={0,1,2,3,4},E={0,1,1,0,3,3,0,4,10,1,2,5,2,4,1,3,2,2,3,4,6},E中每个元组的第三个元素表示权。 ⑴、画出该网。 ⑵、用Dijkstra算法求最短路径,写出顶点0到其它各顶点的最短路径长度、路径及产生过程。 ⑶、求关键路径,写出计算过程。[2007-11-01] 解: ⑴、有向网N如右图所示 ⑵、用Dijkstra算法求最短路径过程如下 D[i] 1 1 {0,1} 2 ∞ 6 {0,1,2} 5 {0,3,2} 3 3 {0,3} 3 {0,3} 4 10 {0,4} 10 {0,10} 9 {0,3,4} 6 {0,3,2,4} S {0,1} {0,1

文档评论(0)

1亿VIP精品文档

相关文档