warshall's algorithm
2016-04-27 20:58
281 查看
[tags] C++
// created by _yun on 2016.4.27
(2)用R的无穷闭包时间复杂度为O(n*n*n*(n - 1))
对称闭包等于原闭包与其逆的 |
自反闭包等于其与对角闭包的 |
得到集合中某个元素所在的位置
某个元素的入度inDegree
某个元素的出度:outDegree
关系relation的各种性质:(实现的难度较小)
用算法解决实际问题,离散数学中的问题,整个的思路很清晰,但是实现起来并没有想象中那么简单
// created by _yun on 2016.4.27
用warshall’s算法计算传递闭包
(1)时间复杂度为:O(n*n*n)(2)用R的无穷闭包时间复杂度为O(n*n*n*(n - 1))
BinaryRelation BinaryRelation::transitiveClosure() const { BooleanMatrix temp(matrix); for (int i = 1; i <= temp.getRow(); i++) for (int j = 1; j <= temp.getColums(); j++) for (int k = 1; k <= temp.getRow(); k++) temp.replace(temp.getElement(j, k)|temp.getElement(j, i)&temp.getElement(i, k), j, k); BinaryRelation _relation(temp, set); return _relation; }
对称闭包等于原闭包与其逆的 |
BinaryRelation BinaryRelation::symmetricClosure() const { BooleanMatrix temp(matrix.getBooleanMatrix()|matrix); BinaryRelation _brelation(temp, set); return _brelation; }
自反闭包等于其与对角闭包的 |
BinaryRelation BinaryRelation::reflexiveClosure() const { BooleanMatrix temp(matrix); for (int i = 1; i <= matrix.getRow(); i++) if (matrix.getElement(i, i) == 0) temp.replace(1, i, i); BinaryRelation _relation(temp, set); return _relation; }
得到集合中某个元素所在的位置
int BinaryRelation::getSetElePos(int element) { for (int i = 1; i <= set.getSize(); i++) if (set.get(i) == element) return i; return -1; }
某个元素的入度inDegree
int BinaryRelation::inDegree(int element) { if (set.isInSet(element)) { int position = getSetElePos(element); int result = 0; for (int i = 1; i <= matrix.getRow(); i++) result += matrix.getElement(i, position); return result; } return -1; }
某个元素的出度:outDegree
int BinaryRelation::outDegree(int element) { if (set.isInSet(element)) { int position = getSetElePos(element); int result = 0; for (int i = 1; i <= matrix.getColums(); i++) result += matrix.getElement(position, i); return result; } return -1; }
关系relation的各种性质:(实现的难度较小)
// Properties of Relations. bool isReflexive() const; bool isIrreflexive() const; bool isSymmetric() const; bool isAsymmetric() const; bool isAntisymmetric() const; bool isTransitive() const; bool isEquivalence() const;
用算法解决实际问题,离散数学中的问题,整个的思路很清晰,但是实现起来并没有想象中那么简单
相关文章推荐
- Django表单CSRF验证失败解决方案
- HDU 2401 Baskets of Gold Coins(数学题)
- LightOJ 1030 Discovering Gold
- Mongoose(二):快速开始
- Mongoose(一):为什么选择Mongoose
- POJ 3767 I Wanna Go Home(最短路/Floyd)
- Django单元测试简明实践
- JFinal与Mogodb集成的问题
- golang 中的内嵌(embeded)
- Django学习笔记(一)
- Google短网址的API
- zygote进程
- Django error信息邮件通知功能配置部署
- Django “no such table: django_session”的解决办法
- beego的文档生成
- flex写的下载器在Google浏览器下有些文件下载不了如exe文件
- SEO搜索优化傻脸了:Google放弃PageRank
- DashgoD1下位机使用说明
- Django 工程目录结构
- windows 下 go环境配置