zoukankan      html  css  js  c++  java
  • Floyd算法学习

    今天做了个题,LeetCode1462,对于同一个图多次查询最短路径,然后用dfs超时了,之后就不会了,看题解是用floyd。但是这个算法看起来简单,我想了很久,主要是这个dp的无后效性想了很久,现在差不多明白了,之前怕的后效性指的是,当第k个点作为中继点将某两个(设为ij)点松弛之后,ik和kj在之后的过程中如果被其他点(设为l)松弛,能否保证在这些松弛过程中ij之间一直是当前最优的,即点l来时的松弛效果能直接传递到点ij上,即是无后效性的关键。

    还是接着之前的情况考虑。当点l来的时候,它必然出现在ik之间或kj之间,不妨让他出现在ik之间吧。那么在点l的松弛轮次中,对ik是正常的松弛结果,而l到j呢?仔细一想可以知道,l到j无非是选择经过k与否的问题,而这个问题在点k的松弛轮次中已经解决。因此也就体现出了无后效性。

    也就是说,每一个新点在开始往路上插之前,都已经被已经进行过插点轮次的点检验过是否插了,所以当它往别人的路上插的时候,完全不用考虑能否更新当前路被它分割的其他部分是否最优。因为其他部分是以他为起点或终点而被已出现中继点分割的路径,在之前的中继轮次中已经考虑,这里相当于记忆化直接使用结果了。

    dpyyds。

  • 相关阅读:
    《网络攻防》第九周学习总结
    《网络攻防》第八周学习总结
    《网络攻防》第七周学习总结
    《网络攻防》第六周学习总结
    《网络攻防》第五周学习总结
    《网络攻防》第四周学习总结
    《网络攻防》第三周学习总结
    《网络攻防第二周作业》
    Kafka学习
    HBase简介及集群安装
  • 原文地址:https://www.cnblogs.com/agnes6/p/13232154.html
Copyright © 2011-2022 走看看