美文网首页
动态规划 2020-03-17

动态规划 2020-03-17

作者: 向前的zz | 来源:发表于2020-03-17 10:47 被阅读0次

动态规划

动态规划重要的是:判断状态,状态转移方程

数字三角形

问题描述
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

[2],
[3,4],
[6,5,7],
[4,1,8,3]

从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

  1. 定义数组元素的含义
    cost[i][j] -> 来存储到达了当前的时候的最小路径
    当到达了数组坐标 (i , j) 的时候,前面所走的结果最小值

  2. 找出数组元素间的关系
    分析:
    题目中的5那个值,可以从4来,也可以从3来。

5的坐标是(2, 1)
3的坐标是(0, 1)
4的坐标是(1, 1)

通过上面得出

g(i, j) = cost[][]
定义 g 函数是最优解和的一个函数
到达5的时候 g(2,1) = min(g(0,1), g(1,1)) + f(2,1) 这个是cost这个数组所需要的函数解

然后出现一个通项式
g(i, j) = min(g(i-1, j-1), g(i-1, j)) [i>=1, j 的值要小于上一楼的下标,不然会越界,这样值可以就不对了 ]

在走到(i, j) 之前,要么是(i-1, j-1)位置,要么是(i-1, j) 位置过来的

cost[i][j] = min(cost[i-1][j-1], cost[i-1][j]) + data[i][j]
data 是原始数据

代码如下:

int[][] data = {
                {2},
                {3, 4},
                {6, 5, 7},
                {4, 1, 8, 3}};
  public static int minTotal(int[][] data) {
        if (data == null || data.length == 0) {
            return 0;
        }
        final int len = data.length;
        int[][] cost = new int[len][len];
        //todo 初始值 这个写完之后忘记给了
        cost[0][0] = data[0][0];
        for (int i = 1; i < len; i++) {
            for (int j = 0; j < data[i].length; j++) {
                //j-1会越界
                int low = max(j - 1, 0);
                //上一排的长度一般会少于这一排,所以下标也可能越界
                int up = min(j, data[i - 1].length - 1);
                cost[i][j] = min(cost[i - 1][low], cost[i - 1][up]) + data[i][j];
            }
        }
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < cost[len - 1].length; i++) {
            min = min(min, cost[len - 1][i]);
        }

        return min;
    }

相关文章

  • 动态规划 2020-03-17

    动态规划 动态规划重要的是:判断状态,状态转移方程 数字三角形 问题描述给定一个数字三角形,找到从顶部到底部的最小...

  • Algorithm进阶计划 -- 动态规划(上)

    动态规划动态规划的基本原理动态规划的运用 1. 动态规划的基本原理 动态规划(Dynamic Programmi...

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 《数据结构与算法之美》27——初识动态规划

    前言 今天开始学习动态规划,一共有三节,分别是:初识动态规划、动态规划理论、动态规划实战。今天这一节就是初识动态规...

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

  • 动态规划

    动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...

  • Dynamic Programming(动态规划)类算法分析随笔

    #动态规划 关于动态规划,先摘一段[wiki][1]的描述: ``` 动态规划(英语:Dynamic progra...

  • 什么是动态规划

    目录 动态规划解决了什么 什么是动态规划 典型的动态规划 1. 动态规划解决了什么 的思想就是将大问题拆分成小问题...

  • 斐波那契数列

    递归解法 动态规划解法1 动态规划解法2

网友评论

      本文标题:动态规划 2020-03-17

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