大连理工大学算法分析与设计.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
大连理工大学算法分析与设计

5、 已知一有向图G=(V,E),其每条边(u,v)∈E均对应有一个实数值r(u,v),表示从顶点u到顶点v之间的通信线路的可靠性,取值范围为0≤r(u,v)≤1,定义r(u,v)为从u到v的线路不中断的概率,并假定这些概率是相互独立的。写出一个有效算法,来找出两个指定顶点间的最可靠的线路。 解答: 运用Dijkstra算法的思想,将原来的加法计算改为乘法即可。 例如下图: 解答过程如下: 每一行的意义:从A出发,经过所用可能路径, 到达各点的最可靠效率 第一次找到B之后,就不用再找了, 因为再乘以任何r(u,v)([0-1]) 会使得A到B的可靠性减小;6、 Floyd算法求出任意两点间的最短距离。 例:有向图中有四个点,点之间的距离如下所示: 解答: for(k=0;kn;k++) for(i=0;in;i++) for(j=0;jn;j++) A [ i,j ] = min { A [ i,j ],A [ i,k ] + A [ k,j ] } 算法思想: 从图的带权邻接矩阵A=[a(i,j)] n×n开始, 递归地进行n次更新,即由矩阵D(0)=A, 按一个公式,构造出矩阵D(1); 又用同样地公式由D(1)构造出D(2); 最后又用同样的公式由D(n-1)构造出矩阵D(n)。 矩阵D(n)的i行j列元素便是i号顶点到j号顶点的最短路径长度;9、对于矩阵乘法: 第1个乘号 第(n-1)个乘号 A1 × A2 × … × An d0 × d1 d1 × d2 dn-1 × dn 给出每个乘法运算的执行顺序,使得进行整个矩阵乘法运算过程中进行的数值乘法次数最少。;伪代码实现:;对root数组进行如下的后序遍历,即可得到代价最少的乘法次序,乘法进行的次序存储在数组multOrder[]中 int multOrderNext; extractOrderWrap(int n, int root[], multOrder[]) { multOrderNext = 1; extractOrder(1, n, multOrder); } extractOrder(int low, int high, int root[], int multOrder[]) { Int k; If (low high) k = root[low][high]; extractOrder(low, k, multOrder); extractOrder(k+1, high, multOrder); multOrder[multOrderNext] = k; multOrderNext++; };举例:; C13 = C11 + C23 + 30×1×10 = 700 ok C12 + C33 + 30×40×10 = 13200 R13 = 1 C24 = C22 + C34 + 1×40×25 = 11000 C23 + C44 + 1×10×25 = 650 ok R24 = 3 C14 = C11 + C24 + 30×1×25 = 1400 ok C12 + C34 + 30×40×25 1400 C13 + C44 + 30×10×25 1400 R14 = 1 所以最小代价C14 = 1400 ;10、给定长度为n的有序元素序列K1, K2, …,Kn,其各个元素被查找的概率(或频率)分别为p1,p2, …, pn。描述构造最优二分树的算法;伪代码实现: 定义两个二维数组cost[1...n+1][0…n]和root[1…n+1][0…n] // 初始化数组的对角线元素,即(t+1, t) for( i=1; i=n+1; i++ ) cost[i][i-1] = 0; root[i][i-1] = -1; // 按一定的顺序填充数组 for( low=n; low=1; low-- ) for( high=low; high=n; high++) cost[low][high] = maxNum;//maxNum表示无穷大 for (k=low; k=high; k++)//选取不同的元素作为当前树的树根 currentCost = low…high的概率和 + cost(low, k-1) + cost(

文档评论(0)

celkhn5460 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档