Warshall‘s algorithm 算法的实现及优化
用 Warshall’s 算法计算传递闭包
(1)时间复杂度为:O(nnn)
(2)用R的无穷闭包时间复杂度为O(nnn*(n - 1))
经典实现:
下面展示一些 经典代码片
。
void computeAPSP(const int n) {/* calculate shortest paths from every vertex to every vertex */for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {a[i][j] = min( a[i][j], a[i][k] + a[k][j] );}}}
}
利用矩阵的对称性优化:
void computeAPSP(const int n)
{for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {if (k != i) {const int a_ki = (k < i) ? a[i][k] : a[k][i];for (int j = 0; j < min(k, i); j++)a[i][j] = min( a[i][j], a_ki + a[k][j] );for (int j = k + 1; j < i; j++)a[i][j] = min( a[i][j], a_ki + a[j][k] );}}}
}
只使用矩阵的下三角部分进行优化:
void computeAPSP(const int n)
{for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {if (k != i) {const int a_ki = (k < i) ? a[i][k] : a[k][i];for (int j = 0; j < min(k, i); j++)a[i][j] = min( a[i][j], a_ki + a[k][j] );for (int j = k + 1; j < i; j++)a[i][j] = min( a[i][j], a_ki + a[j][k] );}}}
}
避免大量调用数学函数进行优化:
void computeAPSP(const int n)
{for (int k = 0; k < n; k++) {for (int i = 0; i < n; i++) {if (k != i) {const int a_ki = (k < i) ? a[i][k] : a[k][i];// skip if no pathif (a_ki == POSITIVE_INFINITY) continue;for (int j = 0; j < min(k, i); j++) {const int s_kj = a_ki + a[k][j];if( s_kj < a[i][j] ) a[i][j] = s_kj;}for (int j = k + 1; j < i; j++) {const int s_jk = a_ki + a[j][k];if( s_jk < a[i][j] ) a[i][j] = s_jk;}}}}
}
Warshall‘s algorithm 算法的实现及优化相关推荐
- Warshall‘s algorithm 算法的实现及优化(修改版)
用 Warshall's 算法计算传递闭包 离散数学定义: t® = R u R^2 u R^3 u- 其中R^(n+1) = R^n 复合 R 矩阵表示: M(R) = M + M^2 + M^3 ...
- 离散ziggurat算法python实现_一种基于LWE采样算法的实现与优化
一种基于 LWE 采样算法的实现与优化 王柯翔,黎 琳,彭双和 [摘 要] 基于带错误学习问题 (Learning With Errors , LWE) 构造的密码体制 能够抵御量子攻击,它的应用效率 ...
- 快速寻找勾股数算法的实现和优化
快速寻找勾股数算法的实现和优化 深夜隔壁寝室的老哥来访,说他用python实现的寻找2000以内勾股数的算法跑了20秒钟.邀请我一起讨论优化思路,完成后记录如下: 朴素探数法寻找勾股数 首先实现那个需 ...
- 高斯模糊算法的实现和优化
前两年我发过一文:Win32下的C++高斯模糊算法实例,里面给出了一个高斯模糊的实现,并写了粗略的简介. 不过当时内容讲得非常简单,而且附带的例子算法是有缺陷的: 一是对图片的边角采用"跳过 ...
- 实用高效的寻路算法——A*寻路算法的实现及优化思路
前言:寻路是游戏比较重要的一个组成部分.因为不仅AI还有很多地方(例如RTS游戏里操控人物点到地图某个点,然后人物自动寻路走过去)都需要用到自动寻路的功能. 本文将介绍一个经常被使用且效率理想的寻路方 ...
- 基于MATLAB的图像压缩感知 算法的实现
摘要 获取项目源文件,联系Q:1415736481,可指导毕设,课设 数据压缩技术是提高无线数据传输速度的有效措施之一.传统的数据压缩技术是基于奈奎斯特采样定律进行采样,并根据数据本身的特性降低其冗余 ...
- 计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random()、webkit中crypto等随机算法的实现
计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random().webkit中crypto等随机算法的实现 本文篇幅较长,如想直接看 js 的随机数实现可定位本文E ...
- 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)
一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...
- 选择性模糊及其算法的实现。
选择性模糊及其算法的实现. 我们常见的模糊算法比如均值模糊.高斯模糊等其基本的过程都是计算一个像素周边的的某个领域内,相关像素的某个特征值的累加和及对应的权重,然后得到结果值.比如均值模糊的各像素的权 ...
最新文章
- 存储过程中返回结果集
- .net数据根据字段进行分类(linq语句)
- 每日一皮:客户期望 vs 最终产品
- python实现logistic_用Python实现机器学习算法—Logistic 回归算法
- maven指定构建的编码格式
- 专门针对科学家工程师的僵尸网络
- JAVA判断输入的是数字、字符还是汉字
- oracle group by 多类别_python数据关系型图表散点图系列多数据系列
- java遍历实体类的属性名称与值
- 《高阶Perl》——3.8 对象方法里的缓存
- 微信小程序在地图上标点 markers 画圈显示范围 circles
- 【c++ Primer 】 4.10复习题 12题(int)、(int)和(int*)
- 统计与自适应信号处理_时间序列分析 自协方差/自相关系数/偏自相关系数
- 部署AdminLTE
- 51单片机贪吃蛇程序
- shell脚本实现逻辑关系与、或、非
- idea git暂存操作
- 强化学习--蒙特卡洛法
- css背景颜色和图片
- npm i 下载依赖一直报错:git dep preparation failed等