亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

白話版 動態規劃法

標簽:
職場生活

关于动态规划法的解释, 大多都是基于背包问题的, 但背包问题背负了很多算法的解释工作,经常让初学者混淆,刚刚刷leetcode的时候,发现了一个很不错的关于动态规划算法的例题,特来分享一下!

700

Leetcode120

这是一个典型的动态规划问题:

  • 在走第N步的之前, 第1步到第N-1步已经达到了最优.

  • 走出第N步之后, 第N-1步的最优就要动态变化为"相对最优",而第一步到第N步依然是最优.

动态规划法的优势在于, 前面N-1步保持了"很多"状态, 当走出第N-1步的时候后, 可以基于保存的状态直接得出"很多新的"状态, 然后从新状态中得到最优解.

为了简化问题, 对于上面的题目,我们可以从底向上走:

700

动态规划法

class Solution:
    def minimumTotal(self, triangle):
        """
        :type triangle: List[List[int]]
        :rtype: int
        """
        for m in range(len(triangle)-1)[::-1]:            # m 为 主数组索引
            if (m == len(triangle)-1):                pass
            # n 为当前元素索引
            for n in range(len(triangle[m])):
                triangle[m][n] = min(triangle[m][n]+triangle[m+1][n], triangle[m][n]+triangle[m+1][n+1])
                print("第",m,"行", "第",n,"个元素当前值为", triangle[m][n])      
                
        return triangle[0][0]                
            
def main():

    result = Solution().minimumTotal([[2], [3, 4], [6, 5, 7], [4, 1, 8, 3]])     
    print("最短路径为==>",result)            
        
if __name__ == '__main__':
    main()

700

动态规划法结果

动态规划与贪心法的区别:

  • 贪心只考虑当前最优, 只保留当前最优的状态;

  • 动态规划法, 不仅保留了当前最优,而且保留了(很多)相对最优的状态





點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
3868
獲贊與收藏
283

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消