Floyd解决传递闭包

传递闭包:在数学上的定义——在集合X上的二元关系R的传递闭包是包含R的X上的最小传递关系。其中定义域是数据集X,而运算关系是必须具有传递性,这里的最小传递关系指的是包含所有可达路径。 我们用一个简单的例子来说明一下这个问题
Floyd解决传递闭包
如上图是一张地图,上面有六个地点,我们已知的路线连接如图中箭头所示,传递闭包就是在原图上的连接关系的基础上,通过传递可以扩展出来的连线,与原图连线共同构成的地点之间可以到达的连接,最终图为:
Floyd解决传递闭包
其中,红色标注的就是新传递出来的路径,由这些路径(箭头)构成的集合就是这个图的传递闭包。下面我们依据传递闭包来解决一个实际问题:学院举办一个辩论会,请你设计一个成绩记录器,要求:先输入参赛队伍数,然后依次输入比赛场次及每场比赛结果,最后可以输入一组队伍,系统可以输出两者的胜负关系。(胜利的关系是传递,且双方只战一场。例:A胜了B,B胜了C,则可以A胜了C。如果无法传递胜负关系则输出不能判断。双方胜利关系由直接对战结果决定)。
不难发现这就是一个闭包问题。我们来做一下对应。X就是所有参赛队的集合;二元关系就是胜利,从题目叙述它正好符合传递性;通过这个问题的对应,我们就可以构建这个传递闭包了。接下来我们将用图算法来解决这个问题,在解决之前,我们先对图进行一个初步的了解。
对于图G=(V,E),最重要的两个元素就是V(顶点或结点)和E(边)。很明显对于以上问题,每个参赛队就是一个结点,每两队之间的胜负关系则构成一条边,这个图就很容的建立了。
图有两种表示方法:1)邻接链表;2)邻接矩阵。邻接链表就是把每一个结点邻接直达的关系连接构成一个链表,这样就会构成length(V)个链表。邻接矩阵的实现则相对简单,它就是把每个结点生成一个二维矩阵的一行或者一列,矩阵的每一个元素则代表了对应两个结点的胜负关系。 对于上图进行两种表示方法的展示:
邻接链表
Floyd解决传递闭包
邻接矩阵:
Floyd解决传递闭包
对比以上两种方法,很明显的,邻接链表方法构建、复杂(结点操作)。而邻接矩阵只是对二维数组对应点的赋值以及检索处理。我们以矩阵方式进行扩展,用floyd算法解决传递闭包来解决这个问题:
Floyd解决传递闭包
至此,问题核心部分就已解决,输入任意队伍组,即可输出二者之间的胜负关系了。但是问题出现了,上述解决似乎忽略了一个闭环的问题;例如,如果三场结果是a战胜b,b战胜c,c战胜a,这就构成了一个闭环。我们分析上述代码,生成上不会有问题, 但是在算法执行中检测到 str[a-1][b-1]==1&&str[b-1][c-1]==1 则会把str[a-1][c-1]置1。此时显示1战胜了3,而实际3战胜了1.为解决此问题,我们可修改代码如下:
Floyd解决传递闭包
修改后的代码中,在生成时,只有两两交战的结果,所以一旦一方获胜自然另一方为负(仅赛一场)。所以可以再设置a胜b的同时,设置b负于a的标志(设置0); 修改floyd算法的判断语句,在检测传递的同时,判断是否两者胜负关系直接已定。由此防止闭环现象的出现,同时设置双方胜负关系。至此算法问题已经解决。
如果矩阵稀疏度很大,即V*V远远大于E,这样矩阵的有效数据则会很少,在矩阵数很大的情况下,这会使运行效率大大降低。对于解决稀疏矩阵,有专门的Jhonson算法, 在此,我们仅从改进floyd算法的做出处理。
Floyd解决传递闭包
以上算法改进在矩阵稀疏度很大的时候,运算效率远高于基本floyd算法,对于以上问题,在1000对参赛,只有5场结果时,在同运行环境和条件下,改进算法的运行时间是16ms,而初始算法则需要5636ms。随着稀疏度降低,对于以上问题就是比赛场次提升时,算法效率也就趋于基本算法。因此,以上改进仅适合矩阵系数度大的情况。

参考文献

殷建平,徐云,王刚等译.算法导论第三版[M].机械工业出版社,2013,341-412.

马新成

2015.03.10

原创文章,作者:admin,如若转载,请注明出处:https://www.isclab.org.cn/2015/03/10/floyd%e8%a7%a3%e5%86%b3%e4%bc%a0%e9%80%92%e9%97%ad%e5%8c%85/

(0)
adminadmin
上一篇 2015年2月5日
下一篇 2015年4月22日

相关推荐

  • 安卓原生库和系统服务的漏洞挖掘

    本学术报告围绕Android原生库的自动化模糊测试问题展开。内容涵盖:安卓原生库漏洞挖掘的主流方法;介绍了两种模糊测试算法的原理以及两篇工作的实验验证与局限性分析。报告旨在分享安卓…

    2026年6月15日
    258
  • 走近特定音频识别(之三)—— 检索 Vs 识别

    在说明计算机如何进行特定音频识别这个问题之前,我们有必要对两个我们经常接触到的概念加以区分——“检索”和“识别”。     刚刚接触音频信号处理的朋友们常常会混淆这两个概念,本人刚…

    学术报告 2014年10月25日
    2.4K
  • 人工智能模型的谈忘学习方法

    遗忘学习被称为机器遗忘或取消学习,是指机器学习或深度学习系统中先前获取的知识随着时间推移而退化的现象。本次学习报告的主要讲解了两种人工智能模型的遗忘学习方法,遗忘训练数据中的特定样…

    2024年11月5日
    2.9K
  • 利用图挖掘的内部威胁检测方法

    随着图神经网络的广泛应用,以及越来越多的组织和企业关注内部威胁,利用图挖掘的方法检测内部威胁受到越来越多研究者的重视。本次报告介绍了利用图挖掘内部威胁检测方法的整体架构,以及如何从…

    2022年6月14日
    3.1K
  • 表格数据生成:GAN模型的演进与未来

    表格数据生成能为深度学习扩充不平衡数据,同时也能避免隐私问题,研究如何生成高保真表格数据具有重要意义。本次报告分析了各个生成模型的优劣,以及GAN在表格数据领域的创新思路。

    2023年8月15日
    2.8K
  • 一段话,多个情绪?模型如何识别“情绪变化”的蛛丝马迹

    情绪变化识别在人机交互、情绪计算等对话智能领域中具有重要价值,显著增强了模型对动态语境的理解能力。本次报告将介绍对话与语音中的情绪建模任务,分析其研究背景与应用意义,并重点讲解两类…

    2025年4月14日
    2.8K
  • 深度学习讨论会

        本次学术报告简单介绍了深度学习的定义和过程,并给出了基于Keras实现手写数字识别的基本过程和实验结果,讨论了设置不同batch s…

    学术报告 2017年12月3日
    2.8K
  • 关系抽取之远程监督

    远程监督方法用于关系抽取任务,会给数据集带来噪声样本,为此,本文介绍了两种基于多示例学习的去噪方法,能够有效的去除训练集中存在的噪声样本。

    2019年8月24日
    2.9K
  • 大规模多标签分类方法

    近年来,随着互联网技术的高速发展和数据规模的快速增长、大数据的应用,多标签分类应用场景越来越多,如电子商务中的商品分类、网页标签、新闻标注、蛋白质功能分类、音乐分类、语义场景分类等…

    2020年12月13日
    4.4K
  • 神经网络模型的覆盖测试

    人工智能系统在近年来取得丰硕的成果,其中神经网络在自动驾驶领域等图像处理方向应用较为广泛。但是神经网络存在安全隐患,容易受到攻击导致决策错误,比如对抗样本攻击和后门攻击。如何测试神…

    2022年1月4日
    2.8K