用 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 算法的实现及优化相关推荐

  1. 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 ...

  2. 离散ziggurat算法python实现_一种基于LWE采样算法的实现与优化

    一种基于 LWE 采样算法的实现与优化 王柯翔,黎 琳,彭双和 [摘 要] 基于带错误学习问题 (Learning With Errors , LWE) 构造的密码体制 能够抵御量子攻击,它的应用效率 ...

  3. 快速寻找勾股数算法的实现和优化

    快速寻找勾股数算法的实现和优化 深夜隔壁寝室的老哥来访,说他用python实现的寻找2000以内勾股数的算法跑了20秒钟.邀请我一起讨论优化思路,完成后记录如下: 朴素探数法寻找勾股数 首先实现那个需 ...

  4. 高斯模糊算法的实现和优化

    前两年我发过一文:Win32下的C++高斯模糊算法实例,里面给出了一个高斯模糊的实现,并写了粗略的简介. 不过当时内容讲得非常简单,而且附带的例子算法是有缺陷的: 一是对图片的边角采用"跳过 ...

  5. 实用高效的寻路算法——A*寻路算法的实现及优化思路

    前言:寻路是游戏比较重要的一个组成部分.因为不仅AI还有很多地方(例如RTS游戏里操控人物点到地图某个点,然后人物自动寻路走过去)都需要用到自动寻路的功能. 本文将介绍一个经常被使用且效率理想的寻路方 ...

  6. 基于MATLAB的图像压缩感知 算法的实现

    摘要 获取项目源文件,联系Q:1415736481,可指导毕设,课设 数据压缩技术是提高无线数据传输速度的有效措施之一.传统的数据压缩技术是基于奈奎斯特采样定律进行采样,并根据数据本身的特性降低其冗余 ...

  7. 计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random()、webkit中crypto等随机算法的实现

    计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random().webkit中crypto等随机算法的实现 本文篇幅较长,如想直接看 js 的随机数实现可定位本文E ...

  8. 机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)

    一.机器学习算法分类: 机器学习算法可分为两大类,即分类与回归.其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级:而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等 ...

  9. 选择性模糊及其算法的实现。

    选择性模糊及其算法的实现. 我们常见的模糊算法比如均值模糊.高斯模糊等其基本的过程都是计算一个像素周边的的某个领域内,相关像素的某个特征值的累加和及对应的权重,然后得到结果值.比如均值模糊的各像素的权 ...

最新文章

  1. 存储过程中返回结果集
  2. .net数据根据字段进行分类(linq语句)
  3. 每日一皮:客户期望 vs 最终产品
  4. python实现logistic_用Python实现机器学习算法—Logistic 回归算法
  5. maven指定构建的编码格式
  6. 专门针对科学家工程师的僵尸网络
  7. JAVA判断输入的是数字、字符还是汉字
  8. oracle group by 多类别_python数据关系型图表散点图系列多数据系列
  9. java遍历实体类的属性名称与值
  10. 《高阶Perl》——3.8 对象方法里的缓存
  11. 微信小程序在地图上标点 markers 画圈显示范围 circles
  12. 【c++ Primer 】 4.10复习题 12题(int)、(int)和(int*)
  13. 统计与自适应信号处理_时间序列分析 自协方差/自相关系数/偏自相关系数
  14. 部署AdminLTE
  15. 51单片机贪吃蛇程序
  16. shell脚本实现逻辑关系与、或、非
  17. idea git暂存操作
  18. 强化学习--蒙特卡洛法
  19. css背景颜色和图片
  20. npm i 下载依赖一直报错:git dep preparation failed等

热门文章

  1. U盘启动制作及系统安装
  2. 解决电视盒子占用wifi带宽问题
  3. 手机免费使用PDF编辑器一键支持PDF转Word,随时随地处理文档
  4. 天翼网关超级密码获取器
  5. python 合并内容相同单元格
  6. 【连载】Java笔记——欲品香醇先度根叶
  7. [附源码]Python计算机毕业设计SSM建筑工程管理系统(程序+LW)
  8. VisualStudio 2017 c++安装
  9. idea jsp mysql
  10. 计算机学院的迎新晚会,计算机学院举办“互联青春,拾梦翱翔”迎新晚会