【动态规划】简单多状态dp问题(2)买卖股票问题

news2024/11/27 17:54:52

买卖股票问题

在这里插入图片描述

文章目录

  • 【动态规划】简单多状态dp问题(2)买卖股票问题
    • 1. 最佳买卖股票时机含冷冻期(买卖股票Ⅰ)
      • 1.1 题目解析
      • 1.2 算法原理
        • 1.2.1 状态表示
        • 1.2.2 状态机
        • 1.2.3 状态转移方程
        • 1.2.4 初始化
        • 1.2.5 填表顺序
        • 1.2.6 返回值
      • 1.3 编写代码
    • 2. 买卖股票的最佳时机含手续费(买卖股票Ⅱ)
      • 2.1 题目解析
      • 2.2 算法原理
        • 2.2.1 状态表示
        • 2.2.3 状态机
        • 2.2.3 状态转移方程
        • 2.2.4 初始化
        • 2.2.5 填表顺序
        • 2.2.6 返回值
      • 2.3 编写代码
    • 3. 买卖股票的最佳时期限制次数(买卖股票Ⅲ)
      • 3.1 题目解析
      • 3.2 算法原理
        • 3.2.1 状态表示
        • 3.2.2 状态机
        • 3.2.3 状态转移方程
        • 3.2.4 初始化
        • 3.2.5 填表顺序
        • 3.2.6 返回值
      • 3.3 编写代码
    • 4. 买卖股票的最佳实际限制次数(买卖股票Ⅳ)
      • 4.1 与第三题的关系
      • 4.2 编写代码

【动态规划】简单多状态dp问题(2)买卖股票问题

1. 最佳买卖股票时机含冷冻期(买卖股票Ⅰ)

传送门:力扣309. 最佳买卖股票时机含冷冻期

题目:

在这里插入图片描述

1.1 题目解析

在这里插入图片描述

在这里插入图片描述

越难的dp问题,看示例只能起到了解题目的效果,一般推不出啥普遍的规律,所以接下来就是我们的算法原理,通过动归的思想去理解,才会豁然开朗!

1.2 算法原理

1.2.1 状态表示

我们需要通过经验 + 题目要求去决定状态表示:

  1. 根据题目的意境以及数据结构,我们得出需要建立一维的dp表(大小为 n)
    • 对于为什么用一维,首先这道题数据结构为一维的,而一维如果确实可以解决问题就没有必要上升到二维
  2. 经验:以某个坐标为结尾或者以某个坐标为起点去研究题目问题!
    • 此题用的是“结尾”

再根据经验,一般dp表的其中一值就应该是答案!

  • 所以含义应该就是“最大收益”

综合得到状态表示:dp[i]表示就是从起点到i坐标这些天 结束后 的最大收益

  • 应该为结束后,否则会不全面,即第i + 1天干了什么跟dp[i]的值无关,那么最后一天干了什么将没有意义,这是不应该出现的!

而这道题,与之前做过的题不一样的是,一个坐标的状态有三种情况,需要我们继续细化

  1. 持有股票(可交易)
  2. 未持有股票(可交易)
  3. 冷冻期

在这里插入图片描述

所以,最终的状态表示为:

f[i]表示的是,从起点到 i 坐标的这些天结束后,为可交易的持有股票状态的情况下的最大收益

g[i]表示的是,从起点到 i 坐标的这些天结束后,为可交易的未持有股票状态的情况下的最大收益

h[i]表示的是,从起点到 i 坐标的这些天结束后,为不可交易的冷冻期状态的情况下的最大收益

1.2.2 状态机

在推导状态转移方程之前,我们要做一些准备工作

  • 因为这道题更我们之前做的题不一样,因为从一天到另一天,状态的转换具有一定的逻辑关系,稍微有点复杂并不是“齐次对称的”,而我们需要考虑到各个情况,所以就可以这样做:

在这里插入图片描述

  • 所以,最终得出有五种转换关系的存在
    1. 到 f 的有两种
    2. 到 g 的有两种
    3. 到 h 的有一种

而这一幅图,就是”状态机”

1.2.3 状态转移方程

同样的套路,我们需要根据已确定的dp表的值来推导 f[i] 、 g[i] 以及 h[i]的值,并且牢记他们的状态表示!

  1. 我们以坐标 i 为结尾
  2. 根据“最近一步”去划分问题

“最近一步”可以理解为“必然事件”

  • 此题的“必然事件”就是,到达坐标 i 之前,必然要先到达坐标 i - 1

在这里插入图片描述

结合状态机:
在这里插入图片描述

  1. 如果这一天结束后为f,那么前一天结束后可能是g或者f

    • 如果前一天是g,则今天的收益应该为g[i - 1] - prices[i](前一天的收益减去上花掉的钱)
      • 因为g[i - 1]代表第i天结束后为g,则收费应该算的是第i + 1天的费用,即prices[i]
      • 而因此,第i + 1天结束后为f
    • 如果前一天是f,则今天的收益不变,为f[i - 1]
    • 取较大值
  2. 如果这一天结束后为g,那么前一天结束后可能为g或者h

    • 如果前一天是g,则今天的收益不变,为g[i - 1]
    • 如果前一天是h,则今天的收益不变,为h[i - 1]
    • 取较大值
  3. 如果这一天结束后为h,那么前一天结束后一定为f

    • 今天的收益为f[i - 1] + prices[i] (前一天的收益加上卖掉的钱)
      • 因为f[i - 1]代表第i天结束后为f,则收入应该算的是第i + 1天的费用,即prices[i]
      • 而因此,第i + 1天结束后为h

所以得出状态转移方程:

f[i] = max{g[i - 1] - prices[i], f[i - 1]};

g[i] = max{g[i - 1], h[i - 1]};

h[i] = f[i - 1] + prices[i]

1.2.4 初始化

在第一天结束后

  1. 处于f状态,需要买一张票:f[0] = - prices[0]
  2. 处于可交易的g状态,啥也不干:g[0] = 0
  3. 买一张票立即卖了:h[0] = 0

1.2.5 填表顺序

从做到有,三个表一起填

在这里插入图片描述

1.2.6 返回值

最后其实处于三种状态都有可能,取较大值即可!

1.3 编写代码

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[] f = new int[n];
        int[] g = new int[n];
        int[] h = new int[n];
        f[0] = -prices[0];
        for(int i = 1; i < n; i++) {
            f[i] = Math.max(f[i - 1], g[i - 1] - prices[i]);
            g[i] = Math.max(g[i - 1], h[i - 1]);
            h[i] = f[i - 1] + prices[i];
        }
        return Math.max(
            Math.max(f[n - 1], g[n - 1]), h[n - 1]
        );
    }
}

时空复杂度都为:O(N)

在这里插入图片描述

2. 买卖股票的最佳时机含手续费(买卖股票Ⅱ)

传送门:力扣714. 买卖股票的最佳时机含手续费

题目:

在这里插入图片描述

2.1 题目解析

在这里插入图片描述

在这里插入图片描述

越难的dp问题,看示例只能起到了解题目的效果,一般推不出啥普遍的规律,所以接下来就是我们的算法原理,通过动归的思想去理解,才会豁然开朗!

2.2 算法原理

2.2.1 状态表示

我们需要通过经验 + 题目要求去决定状态表示:

  1. 根据题目的意境以及数据结构,我们得出需要建立一维的dp表(大小为 n)
    • 对于为什么用一维,首先这道题数据结构为一维的,而一维如果确实可以解决问题就没有必要上升到二维
  2. 经验:以某个坐标为结尾或者以某个坐标为起点去研究题目问题!
    • 此题用的是“结尾”

再根据经验,一般dp表的其中一值就应该是答案!

  • 所以含义应该就是“最长预约时长”

综合得到状态表示:dp[i]表示就是起点到坐标为 i 的位置【这些天结束后】的最大收益

而这道题,与之前做过的题不一样的是,一个坐标的状态有两种情况,需要我们继续细化

  1. 持票
  2. 未持票

在这里插入图片描述

所以,最终的状态表示为:

f[i]表示的是,从起点到 i 坐标的这些天结束后,持票的情况下的最大收益

g[i]表示的是,从起点到 i 坐标的这些天结束后,未持票的情况下的最大收益

2.2.3 状态机

同样的画一下状态机:
在这里插入图片描述

2.2.3 状态转移方程

同样的套路,我们需要根据已确定的dp表的值来推导 f[i] 和 g[i] 的值,并且牢记他们的状态表示!

  1. 我们以坐标 i 为结尾
  2. 根据“最近一步”去划分问题

“最近一步”可以理解为“必然事件”

  • 此题的“必然事件”就是,到达坐标 i 之前,必然要先到达坐标 i - 1
    在这里插入图片描述
  1. 这一天结束后为持票的话,前一天结束后可能为f或者g
    • f的话,收益不变,为f[i - 1]
    • g的话,支付票价,为g[i - 1] - prices[i]
  2. 这一天结束后为未持票的话,前一天结束后可能为f或者g
    • f的话,支付手续费获得收入,为f[i - 1] + prices[i] - fee
    • g的话,收益不变,为g[i - 1]

而1代表着f表怎么填,2代表着g表怎么填

所以得出状态转移方程:

f[i] = max{f[i - 1], g[i - 1] - prices[i]};

g[i] = max{f[i - 1] + prices[i] - fee, g[i - 1]};

2.2.4 初始化

在第一天结束后

  1. 为持票状态,即买一张票,为prices[0] * (-1)
  2. 为未持票状态,啥也不干,为0

2.2.5 填表顺序

从左往右两个表一起填
在这里插入图片描述

2.2.6 返回值

最后一天结束后,两种情况收益的较大值

2.3 编写代码

class Solution {
    public int maxProfit(int[] prices, int fee) {
        int n = prices.length;
        int[] f = new int[n];
        int[] g = new int[n];
        f[0] = -prices[0];
        for(int i = 1; i < n; i++) {
            f[i] = Math.max(f[i - 1], g[i - 1] - prices[i]);
            g[i] = Math.max(g[i - 1], f[i - 1] + prices[i] - fee);
        }
        return Math.max(f[n - 1], g[n - 1]);
    }
}

时空复杂度都为:O(N)

在这里插入图片描述

3. 买卖股票的最佳时期限制次数(买卖股票Ⅲ)

传送门:力扣123.买卖股票的最佳时机 III

题目:

在这里插入图片描述

3.1 题目解析

在这里插入图片描述

在这里插入图片描述

越难的dp问题,看示例只能起到了解题目的效果,一般推不出啥普遍的规律,所以接下来就是我们的算法原理,通过动归的思想去理解,才会豁然开朗!

3.2 算法原理

3.2.1 状态表示

我们需要通过经验 + 题目要求去决定状态表示:

  1. 根据题目的意境以及数据结构,我们得出需要建立二维的dp表(大小为 n × 3)
  2. 经验:以某个坐标为结尾或者以某个坐标为起点去研究题目问题!
    • 此题用的是“结尾”

再根据经验,一般dp表的其中一值就应该是答案!

  • 所以含义应该就是“最大收益”

综合得到状态表示:dp[i][j]表示就是起点到坐标为 i 的位置这些天结束后交易次数为j的最大收益

而这道题,与之前做过的题不一样的是,一个坐标的状态有两种情况,需要我们继续细化

  1. 持票
  2. 未持票

在之前的题目里,我们到达一个坐标并无其他选择,而现在有~
在这里插入图片描述

所以,最终的状态表示为:

f[i] [j]表示的是,从起点到 i 坐标的这些天结束后,持票且交易次数为 j 的情况下的最大收益

g[i] [j]表示的是,从起点到 i 坐标的这些天结束,未持票且交易次数为 j 的情况下的最大收益

3.2.2 状态机

在这里插入图片描述

3.2.3 状态转移方程

同样的套路,我们需要根据已确定的dp表的值来推导 f[i] [j] 和 g[i] [j]的值,并且牢记他们的状态表示!

  1. 我们以坐标 i 为结尾
  2. 根据“最近一步”去划分问题

“最近一步”可以理解为“必然事件”

  • 此题的“必然事件”就是走到(i, j)之前,
    1. f表,先要走到(i - 1, j)
    2. g表,先要走到(i - 1, j - 1)或者(i - 1, j)
      • 完成第j次交易之前,要先完成第j-1次交易

在这里插入图片描述

  1. 这一天结束后为持票的话,前一天结束后可能为f或者g
    • f的话,收益不变,为f[i - 1] [j]
    • g的话,支付票价,为g[i - 1] [j] - prices[i]
  2. 这一天结束后为未持票的话,前一天结束后可能为f或者g
    • f的话,支付手续费获得收入,为f[i - 1] [j - 1] + prices[i]
    • g的话,收益不变,为g[i - 1] [j]

而1代表着f表怎么填,2代表着g表怎么填

所以得出状态转移方程:

f[i] [j] = max{f[i - 1] [j], g[i - 1] [j] - prices[i]};

g[i] [j] = max{g[i - 1] [j], f[i - 1] [j - 1] + prices[i]};

问题:怎么做到限制次数的?

首先,到达交易三次的前提是到达交易两次

  • 那么,交易两次后,其值并没有追加在其他元素上,那么就不会增加交易次数

依此限制了交易次数

3.2.4 初始化

初始化:

f表:

  • 第0行:f[0] [0] = - prices[0] 、f[0] [1] = -∞、f[0] [2] = -∞(取-∞这是因为不存在这种可能)
    • -∞取MIN_VALUE的话,由于上面设计一个减操作,所以它反而变成了一个很大的正数,而我们想要的是让其绝对不会被选中,所以应该让 -∞ = -0x3f3f3f3f(常用的无穷大数)

g表:

  • 第0行:g[0] [0] = 0 、g[0] [1] = -∞、g[0] [2] = -∞(取-∞这是因为不存在这种可能)
  • 第0列:都为0(其实g[i] [0] = g[i - 1] [0],可以在状态转移方程中去处理)

即,g表的状态转移方程为:

  1. g[i] [j] = g[i - 1] [j]
  2. 如果j >= 1,g[i] [j] = max{g[i] [j], f[i - 1] [j - 1]};

3.2.5 填表顺序

从上到下两个表一起填每一行,每一行每一列一起填

3.2.6 返回值

最后一天结束后,f或者g状态下,各个交易次数都要算上,去最大值!

3.3 编写代码

class Solution {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[][] f = new int[n][3];
        int[][] g = new int[n][3];

        f[0][0] = -prices[0];
        for(int i = 1; i < 3; i++) {
            f[0][i] = -0x3f3f3f3f;
            g[0][i] = -0x3f3f3f3f;
        }
        for(int i = 1; i < n; i++) {
            for(int j = 0; j < 3; j++) {
                f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i]);
                g[i][j] = g[i - 1][j];
                if(j >= 1) {
                    g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);
                }
            }
        }
        int min = -0x3f3f3f3f;
        for(int i = 0; i < 3; i++) {
            min = Math.max(min, f[n - 1][i]);
            min = Math.max(min, g[n - 1][i]);
        }
        return min;
    }
}

时空复杂度都为:O(N)

在这里插入图片描述

4. 买卖股票的最佳实际限制次数(买卖股票Ⅳ)

传送门:力扣188. 买卖股票的最佳时机 IV

题目:

在这里插入图片描述

4.1 与第三题的关系

这道题,跟第三题唯一的区别就是,第三题限制为2次,而这道题限制为k次

  • 而2次只不过是k次中的其中一种情况罢了,而他们的解法,一模一样!

第三题的dp表是n × 3,填表时因为空间的限制,无法达到3次及以上

那么这道题,dp表设为n × (k + 1),填表由于空间限制,也无法达到k次以上
在这里插入图片描述

  • 由于影响值的只有左上或者上侧,所以右侧的列的存在并不会影响左侧的值
  • 也就是说,如果这个很大的表是通用的,使用其的一部分,就能解决个别的问题

4.2 编写代码

class Solution {
    public int maxProfit(int k, int[] prices) {
        int n = prices.length;
        int[][] f = new int[n][k + 1];
        int[][] g = new int[n][k + 1];

        f[0][0] = -prices[0];
        for(int i = 1; i < k + 1; i++) {
            f[0][i] = -0x3f3f3f3f;
            g[0][i] = -0x3f3f3f3f;
        }
        for(int i = 1; i < n; i++) {
            for(int j = 0; j < k + 1; j++) {
                f[i][j] = Math.max(f[i - 1][j], g[i - 1][j] - prices[i]);
                g[i][j] = g[i - 1][j];
                if(j >= 1) {
                    g[i][j] = Math.max(g[i][j], f[i - 1][j - 1] + prices[i]);
                }
            }
        }
        int min = -0x3f3f3f3f;
        for(int i = 0; i < k + 1; i++) {
            min = Math.max(min, f[n - 1][i]);
            min = Math.max(min, g[n - 1][i]);
        }
        return min;
    }
}

在这里插入图片描述

时空复杂度都为:O(N * k)

在这里插入图片描述


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

本文代码链接:动态规划04/src/Main.java · 游离态/马拉圈2023年6月 - 码云 - 开源中国 (gitee.com)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/664927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

26.利用概率神经网络分类 预测基于PNN的变压器故障诊断(附matlab程序)

1.简述 学习目标&#xff1a; 概率神经网络分类预测 基于PNN的变压器故障诊断 概率神经网络是由Specht博士在1989年首先提出&#xff0c; 是一种与统计信号处理的许多概念有着紧密联系的并行算法。它实质上是一个分类器&#xff0c;根据概率密度函数的无参估计进行贝叶斯决策…

VanillaNet实战:使用VanillaNet实现图像分类(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整算法设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试热力图可视化展示…

【掌握Spring事务管理】深入理解事务传播机制的秘密

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 1.Spring 中事务的实现方式 1.1 Spring 编程式…

第八十天学习记录:计算机硬件技术基础:80486微处理器的指令系统

80486微处理器的寻址方式 要使微处理器能够完成指令规定的操作&#xff0c;则指令中须包含2种信息&#xff0c;一是执行什么操作&#xff1b;二是该操作所涉及的数据在哪里&#xff1b;三是结果存于何处&#xff0c;故指令通常操作由操作码字段和操作数字组成&#xff0c;其书…

chatgpt赋能python:Python的抹零功能介绍及使用方法

Python的抹零功能介绍及使用方法 Python是一种广泛使用的编程语言&#xff0c;而其抹零功能是在进行浮点数操作时非常有用的。在本文中&#xff0c;我们将介绍python中抹零的概念、使用方法以及注意事项&#xff0c;以帮助大家更好地使用python中的抹零功能。 什么是抹零&…

【MarkDown】CSDN Markdown之时间轴图timeline详解

文章目录 时间轴图一个关于时间轴图的例子语法分组长时间段或事件文本换行时间段和事件文本样式自定义颜色方案主题基础主题森林主题黑色主题默认主题中性主题 与库或网站集成 时间轴图 时间轴图&#xff1a;现在这是一个实验性的图表。语法和属性可能会在未来版本中更改。除了…

渣土车未苫盖识别系统 yolov8

渣土车未苫盖识别系统通过yolov8python&#xff0c;渣土车未苫盖识别系统对经过的渣土车进行实时监测&#xff0c;当检测到有渣土车未能及时苫盖时&#xff0c;将自动发出警报提示现场管理人员及时采取措施。Yolo模型采用预定义预测区域的方法来完成目标检测&#xff0c;具体而…

chatgpt赋能python:Python抽人代码:如何优化你的抽奖过程?

Python抽人代码&#xff1a;如何优化你的抽奖过程&#xff1f; 简介 抽奖是在网站上进行的一项非常常见的活动。随着技术的发展&#xff0c;抽奖活动的方式也越来越多样化。在这些活动中&#xff0c;人们喜欢使用抽人软件或代码来提高效率并确保随机性。这在Python中是相当简…

chatgpt赋能python:Python查找第二大的数——从入门到实战

Python查找第二大的数——从入门到实战 Python是一门非常强大的编程语言&#xff0c;不仅支持基本的编程技巧&#xff0c;也支持各种复杂的算法和数据结构。本篇文章将介绍如何通过Python编写一个程序&#xff0c;来实现查找数组中第二大的数。 环境准备 想要运行这个程序&a…

SQL 函数:concat函数、concat_ws()函数、group_concat()

SQL 函数&#xff1a;concat函数、concat_ws()函数、group_concat()函数(转载) concat()函数 功能&#xff1a;将多个字符串连接成一个字符串。 语法&#xff1a;concat(str1, str2,…) 返回结果为连接参数产生的字符串&#xff0c;如果有任何一个参数为null&#xff0c;则返…

java - 报错解决集合

ssm-java学习笔记 java.lang.NoSuchMethodException: org.cjh.bean.Dept.<init>()Invalid bound statement (not found)错误解决方法动态sql if java.lang.IndexOutOfBoundsException: Index: 5, Size: 5Failed to determine a suitable driver classjava.sql.SQLExcepti…

第十二章 sys模块

1. sys模块介绍 什么是Python 解释器 当编写Python 代码时&#xff0c;通常都会得到一个包含Python 代码的以.py 为扩展名的文件。要运行编写的代码&#xff0c;就需要使用Python 解释器去执行.py 文件。因此&#xff0c;Python 解释器就是用来执行Python 代码的一种工具。常…

Windows下Nacos的配置与使用

一、什么是 Nacos 以下引用来自 nacos.io Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用…

19使用MATLAB中的BP神经网络来做字母识别

1.简述 学习目标&#xff1a; 学习BP神经网络字母识别 字符识别应用非常广泛&#xff0c;比如车辆牌照自动识别和手写识别等。我们采用BP网络对26个英文字母进行识别&#xff0c;首先将26个字母中每一个字母都通过75的方格进行数字化处理&#xff0c;并用一个向量表示&#x…

中间件 -zookeeper

三连支持 一起鼓励 一起进步 zookeeper 文章目录 一、概述1.Leader 角色2.Follower 角色3.数据同步4. 2PC提交5. Observer 角色6. leader 选举7. 集群组成6. 惊群效应 二、Curator三、应用场景总结 一、概述 首先&#xff0c;在分布式架构中&#xff0c;任何的节点都不能以单点…

支持记录和审计上传/下载的文件内容,支持控制用户连接资产的方式,JumpServer堡垒机v3.4.0发布

2023年6月19日&#xff0c;JumpServer开源堡垒机正式发布v3.4.0版本。在这一版本中&#xff0c;JumpServer新增支持多种资源选择策略&#xff0c;包括用户登录、命令过滤、资产登录和连接方式&#xff1b;支持记录和审计上传/下载的文件内容&#xff0c;进一步提升系统的安全性…

linux(线程同步和互斥)

目录&#xff1a; 1.为什么需要同步和互斥 2.明确一些概念 3.实现一个抢票程序 4.理解加锁和解锁是原子的呢&#xff1f;&#xff1f; ------------------------------------------------------------------------------------------------------------------------- 1.为什么…

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之&#xff1a;流水线机制与滑动窗口协议 在上一节中我们逐步分析了可靠传输协议的设计过程&#xff0c;最后讲到rdt3.0的设计和实现机制。但是rdt3.0为了实现可靠性&#xff0c;牺牲了很大一部分性能&#xff0c;其中最主要的原因就在于停止等待协…

23.ELman神经网络预测数据

1.简述 学习目标&#xff1a;ELman神经网络预测数据 Elman网络介绍 神经网络是一个庞大的体系和概念&#xff0c;根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向&#xff0c;分前馈型与反馈型。前馈型网络会根据输出数值来调整网络的参数&#xf…

LangChain 中文入门教程

为了便于阅读&#xff0c;已生成gitbook&#xff1a;LangChain 中文入门教程 - LangChain 的中文入门教程 github地址&#xff1a;https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide 加了个 CHANGELOG,更新了新的内容我会写在这里&#xff0c;方便之前看…