2:猜测(尝试所有可能的方式获取最好的)
3: 关联所有的子问题
计算单个子问题所需要处理的时间
4: 重用子问题结果并记下新的结果,或者使用DP的bottom-up方式(需要注意没有环)
对結果进行组合等等会划掉部分额外的时间总的来说就是:尝试所有可能的子问题的结果将最好的可能子结果存储下来,然后重复利用已經解决的子问题递归去解决所有的问题(猜测+记忆+递归)
它消耗的时间为: 子问题的数量 * 每个子问题处理所需要时间
使用递归的方式求斐波那契数列
memo的存在使得实际产生调用的只有 fib(1) .... fib(n),共n次,区域的直接从memo中获取使用常量的时间
它可以看做是一种拓扑排序(针对DAG),对于使用空間其实只需要记住前两个即可
indegree(t):入度数也就是类似(u,t)边的数量需要去遍历所有t的入边O(1):判断是不是有入边
当图中有环的时候求最短路径产生的問题
解决图中有环的时候求最短路径的问题
对于求最短路径来讲,最长不能超过|V|-1否则就是成环,会造成循环的情况(从0开始的计数)這就是为什么Bellman-Ford的外层循环是 |V|-1
节点的数目是1个源点,边的数目是每多一层实际上就多了加了一遍所有的边。
什么都没做完全是定义 | 节点v的入邊(如果存在的话) |
4:重用子问题结果并记下新的结果 | |