贪心与动态规划的区别与联系

先来看一个例子:

如图,各结 点代表城市, 两结点间连 线上数字表 示城市间的 距离。试找出从结点A到 结点E的最短距离  

              贪心与动态规划的区别与联系

贪心:

    首先,这题如果用贪心来看的话,则为A->B2,B2->C4,  C4->D2,  D2->E,  这应该没有争议吧(如果硬要挑毛病的话那么就假设是有向图,只能往右走),这样得出来的结果是31,这是贪心的结果,即每次考虑眼前的最优解。

动态规划:
    如果从动归的角度来看的话,那么它的选择就不是线性的了,而是在到达B、C、D、E这四个阶段时从前面记录的所有相邻节点所记录的最短路径中选择下一条最短路径(总结得过于繁琐),怎么理解呢?我们一步步来看。

    我们从A开始,在贪心和动归眼里都是两条路,但不同的是贪心选择了A->B2这条最短路径,就遗忘了还有A->B1这个选择,那么它的下一步就只能从B2这个节点开始选择下一步的最短路径;而对于动态规划来说,它需要记录的不是从A开始的下一条最短路径,它要记录的是到从A开始的到B1所走过的最短距离和到B2所走过的最短距离,即B1=6,B2=2;然后下一步,进入到第二阶段,即从B开始,它首先从B1开始,走向C1,然后记录到C1的最短距离,即C1=8,然后是C3=17,C4=13;然后从B2开始走,C2=10,然后到C3的时候发现以前的值(即从B1到C3)比现在的大,进行更新(如果比现在的路径距离小则跳过,也就是说对于每个格子要有一句判断语句,判断当前值与过去的值)即C3=9,同理C4=8;然后进入C阶段,对D系列进行写入,这里便不再赘述。                        
                                                  8
                                           6    10    14
最后形成这样一记录表格:0               17    18   由此我们可知,最短距离就是E处记录的值18;
                                           2     9     19

                                                  8

因此,我们可以看出贪心与动归的本质区别,贪心记录眼前最优值,而动归记录到达每个位置时的值,而且是到达每个位置时的最优值,为什么不漏掉某个位置呢,因为没人会直到全局最优路径会不会是从这条路走出来的

请注意我上面说的这句话,它暗含的意思是从局部最优不一定能推出全局最优,同时也表明了贪心不一定能算出全局最优。而动归是全局的最优解。

(下面的内容经我检查,发现有误,请勿轻易阅读!!!!!!,但未查明原因,故尚未删除)
下面就动归的问题,我有些其他的思考:

   计算矩阵连乘积:
    在科学计算中经常要计算矩阵的乘积。若A是一个p×q 的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个 p×r的矩阵。计算C=AB总共需要pqr次的乘法。现在 的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是 可乘的,i=1,2,…,n-1。要求计算出这n个矩阵的连乘积 A1A2…An

    看一个计算3个矩阵{A1,A2,A3}的连乘积的例子。设3个 矩阵的维数:10×100,100×5和5×50。按 ((A1A2)A3) 算,需10×100×5+10×5×50=7500次乘法。若按 (A1(A2A3))算,则需要的乘法次数为 100×5×50+10×100×50=75000 

下面是上课时老师给出的关于动态规划解矩阵连乘积问题的思路

    记矩阵连乘积AiAi+1…Aj为Ai…j,设计算次序在矩阵Ak和Ak+1之间将矩阵链断开, 1<=k<n,则完全加括号方式为((A1…Ak) (Ak+1…An))  先计算A1…k和Ak+1…n,然后将所得的结果相乘才 得到A1…n。显然其总计算量为计算A1…k的计算量 加上计算Ak+1…n的计算量,再加上A1…k与Ak+1…n 相乘的计算量  关键特征是:计算A1…n的一个最优次序所包含的 计算A1…k和Ak+1…n的次序也是最优的  

这里说到A1...Aj可以分解为A1...Ak和Ak+1...Aj,这似乎与我前面说的有些出入,因为这里暗含的意思是局部最优可以推出全局最优,那么怎么回事呢?请注意思路中所说,  对于矩阵来说,它的总计算量是等于分段的计算量相乘的,  也就是说在这里相当于单一的路径,请看下面的图:

                                    贪心与动态规划的区别与联系

    (没找到合适的图,暂且用这张,假设为有权图,即每条边都有权值,设为长度),如果要求求出从0到9的最短距离,那么很明显,点0,3,6,9是必经点,在这几个点上,贪心的结论是成立的,即0->9的最短路径可以分为几段路径之和,但对于其他点来说,这一结论是不成立的,因为最短路径不一定会经过那个点。同样,对于本文一开始给出的那张图来说,结论可谓是处处不成立,因为除了两端点每个点都是分裂点。(这仅是我在老师讲解动态规划举矩阵连乘时产生的思考,本人水平不高,如若有错,敬请指正,谢谢)