30、图算法中的最短路径与最小生成树算法解析

图算法中的最短路径与最小生成树算法解析

1. Floyd算法的并发实现

Floyd算法用于计算图中所有节点对之间的最短路径。下面是其并发实现的代码:

void cFloyds(float **D)
{
  int k;
  for (k = 0; k < V; k++) 
    parallel_for(blocked_range2d<int, int> (0, V, rGrainSize, 0, V, cGrainSize), tryK(k, D));
}

这段代码假设定义了两个常量 rGrainSize cGrainSize ,用于设置TBB调度器将循环划分的最小行数和列数。这些值需要通过试验和错误测试来确定,以找到在不影响性能的情况下数组块可以达到的最小大小。

在地图应用中,虽然最初可能只需要下三角矩阵来计算两个城市之间的距离,但对于有向图,路径可能是单向的,或者往返路径的权重不同。因此,为了计算图中所有节点对之间的最短路径,需要对整个距离矩阵 D 进行计算。

1.1 k行的数据竞争问题

在串行算法中, k 循环的每次迭代都会访问 D 数组的所有条目以检查是否需要更新。在并发实现中,可能会出现两个线程 T0 T1 的交错执行情况,其中 T0 负责更新第 i </

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值