【课后习题】

一、 问答题

1、[矩阵转置].请参照图6.3.3给出行方向条带状划分时矩阵转置的算法分析和性能评价。



2、[矩阵乘积的运算次序问题].所谓矩阵乘积的运算次序问题,是指多个矩阵的乘积 按照怎样的运算次序(即怎样加括号)使得运算速度最快的问题。根据矩阵运算的结合性,不论按照怎样的次序运算,其结果都是一样的,但运算速度有所不同,现举例来说明。比如要计算乘积 ,假设三个矩阵的大小分别为5×10、10×20和20×40。按照 的运算次序所花的操作步数是5×10×20+5×20×40=5000;而按照 的运算次序所花的操作步数是10×20×40+5×10×40=10000。后者所花的时间是前者的两倍。看来寻找一个合适的运算次序是很有必要的。
     最简单的方法是穷举法,把所有可能的情况一一列举出来,计算其时间开销,从中选出耗时最少的运算次序。设有n个矩阵参与相乘,需要进行n-1次乘法运算,这些运算之间的次序共有(n-1)!种,这是指数增长的,扩展性很差。
     请用动态规划法分析和解决上述问题,并给出并行化的算法分析与性能评价。



3、[Dijkstra算法].本题讨论对于图论中一点到其它所有点的最短路问题,即对于一个赋权图G=(V, E, w)和图G任意一点v,寻找v到图G中其它各点的最短路,最终结果是一个向量。Dijkstra算法是解决一点到其它各点最短路的常用方法,算法如下:
1.     procedure DIKDTRA_SINGLE-SOURCF-SP(V:E:w:s:)
2     . begin
3.         VT:={s};
4.         for all v∈(V- VT)do
5.              if(s:v) exitst set l[v]=w(s,v);
6.              elst set l[v]=∝;
7.         while VT ≠V do
8.         begin
9.              find a vertex u such that l[u]=min{l[v]|v∈(V- VT)};
10.              VT := VT∪{u};
11.              for all v∈(V- VT) do
12.                   l[v]=min{l[v],l[v]+w(u,v)};
13.         endwhile
14.     end DIJKSTRA_SINGLE_SOURCE_SP
     请给出求解一点到其它各点最短路的并行算法并分析其性能。