知识大全 数据结构考研分类复习真题 第五章 答案[29]

Posted 元素

篇首语:骏马是跑出来的,强兵是打出来的。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第五章 答案[29]相关的知识,希望对你有一定的参考价值。

   [题目分析]设稀疏矩阵的非零元素的三元组以行序为主存储在三元组表中 矩阵的相加是对应元素的相加 对两非零元素相加 若行号不等 则行号大者是结果矩阵中的非零元素 若行号相同 则列号大者是结果中一非零元素 若行号列号相同 若对应元素值之和为零 不予存储 否则 作为新三元组存到三元组表中 题目中要求时间复杂度为O(m+n) 因此需从两个三元组表的最后一个元素开始相加 第一个非零元素放在A矩阵三元组表的第m+n位置上 结果的三元组至多是m+n个非零元素 最后若发生对应元素相加和为零的情况 对三元组表中元素要进行整理 以便使第一个三元组存放在下标 的位置上

  CONST maxnum=大于非零元素数的某个常量  TYPE tuple=RECORD  i j integer v elemtp   END   sparmattp=RECORD  mu nu tu integer   data: ARRAY[ maxnum] OF tuple   END   PROC AddMatrix(VAR A sparmattp B sparmattp)   // 稀疏矩阵A和B各有m和n个非零元素 以三元组表存储 A的空间足够大 本算法实现两个稀疏矩阵相加 结果放到A中   L:=m p:=n k:=m+n // L p为A B三元组表指针 k为结果三元组表指针(下标)   A tu:=m+n // 暂存结果矩阵非零元素个数  WHILE(L≥ )AND(p≥ )DO  [CASE  // 行号不等时 行号大者的三元组为结果三元组表中一项   A data[L] i>B data[p] i A data[k]:=A data[L] L:=L // A中当前项为结果项  A data[L] i<B data[p] i A data[k]:=B data[p] p:=p //B中当前项为结果当前项  A data[L] i=B data[p] i   CASE  //行号相等时 比较列号  A data[L] j>B data[p] j A data[k]:=A data[L] L:=L   A data[L] j<B data[p] j A data[k]:=B data[p] p:=p   A data[L] j=B data[p] j IF A data[L] v+B data[p] v≠ THEN  [A data[L] v=A data[L] v+ B data[p] v   A data[k]:= A data[L] ]  L:=L p:=p   ENDC      //结束行号相等时的处理  ENDC    //结束行号比较处理   k:=k //结果三元组表的指针前移(减 )  ]//结束WHILE循环   WHILE p> DO[A data[k]:=B data[p] k:=k p:=p ]  //处理B的剩余部分   WHILE L> DO[A data[k]:=A data[L] k:=k L:=L ]  //处理A的剩余部分   IF k> THEN    //稀疏矩阵相应元素相加时 有和为零的元素 因而元素总数<m+n   [FOR p:=k TO m+n DO A[p k+ ]:=A[p] // 三元组前移 使第一个三元组的下标为   A tu=m+n k+ ]                    // 修改结果三元组表中非零元素个数   ENDP   // 结束addmatrix

  [算法讨论]算法中三元组的赋值是 成组赋值 可用行值 列值和元素值的三个赋值句代替 A和B的三元组表的当前元素的指针L和p 在每种情况处理后均有修改 而结果三元组表的指针k在CASE语句后统一处理(k:=k ) 算法在B的第一个元素 大于 A的最后一个元素时 时间复杂度最佳为O(n) 最差情况是每个元素都移动(赋值)了一次 且出现了和为零的元素 致使最后(m+n k+ )个元素向前平移一次 时间复杂度最差为O(m+n)

cha138/Article/program/sjjg/201311/23038

相关参考

知识大全 数据结构考研分类复习真题 第五章 答案[1]

  第五章 数组和广义表答案  一选择题  BLJCICBBAHCEAFBEABBBBBABBACDCDFCDCACA  二判断题  ×√√×××√××××√√√  部分答案解释如下  错误

知识大全 数据结构考研分类复习真题 第五章 答案[15]

  .这是一个递归调用问题运行结果为DBHEAIFJCKGL  ()FOR循环中每次执行PerfectShuffle(AN)和CompareExchange(AN)的结果  第次A[]=[]  A[]

知识大全 数据结构考研分类复习真题 第五章 答案[12]

  .()   ()    ()i=j=即A[]       

知识大全 数据结构考研分类复习真题 第五章 答案[43]

  ()略  ()求广义表原子个数的递归模型如下  f(p)=  PROCNumber(p:glist;VARn:integer)  VARm:integer;  n:=;  IFp<>N

知识大全 数据结构考研分类复习真题 第五章 答案[26]

  深度为长度为  ()略  ()表的长度为深度为  ()head(tail(head(head(head(tail(tail(tail(tail(A)))))))))  共享结构广义表A=(((bc

知识大全 数据结构考研分类复习真题 第五章 答案[24]

  Head(Tail(Head(Head(L))))  Head(Head(Head(Tail(Head(Tail(L))))))  类似本题的另外叙述的几个题解答如下  ()head(head(t

知识大全 数据结构考研分类复习真题 第五章 答案[6]

  head(tail(head(tail(H))))  (b)  (xyz)  (de)  GetHead(GetHead(GetTail(L)))  本算法中首先数组b中元素以逆置顺序放入d数组中

知识大全 数据结构考研分类复习真题 第五章 答案[11]

  .每个元素个二进制位主存字长位故每个元素占个字长行下标可平移至到  ()  ()  ()s+  ()s+  . 公式  +L(

知识大全 数据结构考研分类复习真题 第五章 答案[17]

  .错误有以下几处  ()过程参数没有类型说明()出错条件判断缺少OR(i+k>last+)  ()删除元素时FOR循环应正向不应用反向DOWNTO()count没定义  低效体现在两处  (

知识大全 数据结构考研分类复习真题 第五章 答案[3]

    公式LOC(aijk)=LOC(a)+[v*v*(ic)+v*(jc)+(kc)]*l(l为每个元素所占单元数)        第行第列  ()()()  i(i)/+j(<=ij<