弗洛伊德(Floyd)算法比较N个数之间的大小

本文探讨了Floyd算法如何用于判断一组数之间的大小关系,对比了它与Dijkstra算法的区别,并通过解决一道实际问题展示了如何利用Floyd算法更新大小关系,最后给出了算法的时间和空间复杂度。
摘要由CSDN通过智能技术生成

关于Floyd(弗洛伊德)算法第一次接触是在数据结构课程中,当时关于图的最短路径的生成里面介绍了两种方面,一种是Dijkstra算法,可以得到单个节点到其他节点的最短路径。另一种就是Floyd算法。
提到这里,就介绍一下两者的区别,Dijkstra算法是采用贪心思想,每次都找到一个距离目标节点最短的节点,通过该节点更新信息,从而得到所有节点距离目标节点的距离。而Floyd算法则是采用动态规划的思想,如果节点a和节点b通过节点c的距离小于节点a,b之间的直接距离,即dis(a,b) > dis(a,c) + dis(c,b),则更新dis(a,b)。
但是最近碰到了这样的一类题,给定输入对(a1, a2),输入对前面的元素大于输入对后面的元素,目前有n个元素,同时有m个输入对。判断是否可以通过这m个输入对来判断a1,a2,….an之间的大小关系。
比如说网易的一道题:
*小明陪小红去看钻石,他们从一堆钻石中随机抽取两颗并比较她们的重量。这些钻石的重量各不相同。在他们们比较了一段时间后,它们看中了两颗钻石g1和g2。现在请你根据之前比较的信息判断这两颗钻石的哪颗更重。
给定两颗钻石的编号g1,g2,编号从1开始,同时给定关系数组vector,其中元素为一些二元组,第一个元素为一次比较中较重的钻石的编号,第二个元素为较轻的钻石的编号。最后给定之前的比较次数n。请返回这两颗钻石的关系,若g1更重返回1,g2更重返回-1,无法判断返回0。输入数据保证合法,不会有矛盾情况出现。
测试样例:
2,3,[[1,2],[2,4],[1,3],[4,3]],4
返回: 1*
开始碰到了想了下,当时想法是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值