美文网首页
动态规划算法的研究

动态规划算法的研究

作者: 飘曳的舟 | 来源:发表于2018-12-25 23:11 被阅读0次

动态规划算法(Dynamic Programming)是一种非常常用和易考察的算法,尤其是在程序员面试的时候。大体上DP的实现方式有两种,一种是自下而上的,通常是可以抽象出表格的形式,通常非常容易写成循环体的形式。另外一种是备忘录式的,即自顶向下的,通常很容易写成递归的形式。动态规划的两个关键思路点是。1. 找到解决问题的最优子问题,什么意思呢?就是想要解决一个大问题,我们看能不能先找到它里面元素构成的子问题的最优解,通过这些子问题的最优解从而很快速的求出大问题的最优解,如果满足这个形式的问题,通常就可以考虑DP的求解了,如果找不到这样的求解模式,很大可能是我们设置的子问题的形式上需要做一些转变。2. 重叠问题的记录,在1可以的情况下,我们再思考重叠问题该以何种形式存储,1维list还是2维,存储的是index还是value还是其他复杂的表示。有了这些基础思路,我们开始做题,实战出真知嘛。

股票的售卖问题 Leetcode 123

class Solution:
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        length = len(prices)
        if length < 2:
            return 0
        dp1 = [0 for i in range(length + 1)]
        dp2 = [0 for i in range(length + 1)]
        r1 = [0 for i in range(length + 1)]
        r2 = [0 for i in range(length + 1)]
        dp1[0] = dp1[1] = 0
        dp2[length] = dp2[length - 1] = 0
        r1[0] = r1[1] = 0
        r2[length] = r2[length - 1] = 0

        for x in range(2, length + 1):
            dp1[x] = max(dp1[x - 1] + prices[x - 1] - prices[x - 2], prices[x - 1] - prices[x - 2])
            r1[x] = max(r1[x - 1], dp1[x])
        for y in range(length - 2, -1,-1):
            dp2[y] = max(dp2[y + 1] + prices[y + 1] - prices[y], prices[y + 1] - prices[y])
            r2[y] = max(r2[y + 1], dp2[y])
        sum = 0
        for k in range(length + 1):
            sum = max(sum, r1[k] + r2[k])
        return sum

相关文章

  • 动态规划算法的研究

    动态规划算法(Dynamic Programming)是一种非常常用和易考察的算法,尤其是在程序员面试的时候。大体...

  • 动态规划算法

    动态规划算法 最长上升子序列

  • 维特比算法

    维特比(Viterbi)算法是一种动态规划算法,在处理隐马尔可夫(HMM)最优路径问题时经常被使用. 动态规划算法...

  • 背包问题

    介绍 学习动态规划算法的经典例题。动态规划算法一般有3个特征1、最优化原理:最优解所包含的子问题的解也是最优的。2...

  • 最短路径解决方法

    Floyd算法;Dijkstra算法;Bellman-Ford算法;动态规划算法

  • 动态规划算法(01背包问题)

    一. 动态规划算法介绍: 动态规划算法和分治算法类似,也是将待求解问题分成若干个小问题一步步求解,不同的是,每一个...

  • 动态规划入门

    1.什么是动态规划动态规划是在前面已有答案的基础上向下递推的过程 动态规划算法的两种形式上面已经知道动态规划算法的...

  • 【JS算法】动态规划 - 斐波那契数列

    动态规划算法 动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法。其基本思想也...

  • 基础算法

    二分查找 冒泡排序(优化) 归并排序 动态规划算法

  • 2019-11-04 回溯算法

    package others; import java.util.Arrays; /** 动态规划算法计算10个工...

网友评论

      本文标题:动态规划算法的研究

      本文链接:https://www.haomeiwen.com/subject/ljlakqtx.html