《算法导论》笔记(17) 所有结点对最短路径 部分习题

习题25.1-6 O(n^3)时间内从已经计算出的最短路径权重矩阵L计算出前驱矩阵Π。任意的L[i, j]最短路径,若j结点前驱为k,则必然有L[i, j]= L[i, k]+ w[k, j]。如此可遍历L矩阵的第i行所有元素L[i, k],若L[i, j]= L[i, k]+ w[k, j],表明k是i-> j最短路径的j的前驱结点。

习题25.1-7 在Extend_Shortest_Paths方法中加入记录前驱结点的功能。

extend_shortest_paths(L, W){
for i= 1 to n
  for j=1 to n
    for k=1 to n
      if( L'[i, j]> L[i, k]+ W[k, j] )  { L'[i, j]= L[i, k]+ W[k, j]; P[i, j]=k; }
return L', P
}
slow_all_pairs_shortest_paths(){
  L[1]=W;
  for m=2 to n-1
    L[m], P[m]=extend_shortest_paths(L[m-1])
}

习题25.1-10 找到最短的权重为负值的环路的长度(边数)。最短路径矩阵L中若元素L[i, i]是负值,则表明i在一个负权重的环路中。同时对上面方法找到的前驱矩阵进行查找,得到环路的边数。

习题25.2-4 证明去掉上标的Floyd-Warshall算法是正确的,从而将空间需求降低到Θ(n^2)。对任意k,d[i, j]依赖于d[i, k]和d[k, j],d[i, k]与d[k, j]可能经历了k-1次松弛也可能经历了k次松弛。但不管如何,d[i, j]是中间结点取自{1, 2, ..., k}的一条最短路径。此即循环不变量。则当k取n时,全部d[i, j]均得到了包含所有结点的最短路径。

习题25.2-8 给出一个O(VE)的时间复杂度的算法来计算有向图G(V, E)的传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值