这里不讲代码和原理,只是解释下大家的疑惑
如果要计算经过5
条边 a->b
的最短路,为什么 1+4
是对的,为什么不用考虑2+3
.
一个最简单的直观的理解方式是
假设 a
经过2
条边走到u
, 再从u
走3
条边走到b
,那么我们可以把路径拆成:
1. a-x-u
两条边
2. u-y-z-b
三条边
其中x,y,z
是最短路径上的3个点。
那就很容易观察到,其实 上面这个2+3
的case可以改成写
1. a-x
(1条边)
2. x-u-y-z-b
(4条边)
简单贪心证明:因为u-y-z-b
是经过三条边的从u
到b
的最短路径,而x-u
只有一条边,所以它一定也是最短路径,因此 x-u-y-z-b
就一定是经过4条边的从x到b的最短路径
这时候的x
就是我们在做 1+4
的时候所枚举的u
. 因此2+3
和 1+4
等价,可以用倍增来降低复杂度。
这个本质其实和矩阵乘法没啥关系,而是加法的结合律。
(2 + 3) = (1 + 1) + (1 + 1 + 1) = 1 + 4