【算法小课堂】深入理解前缀和算法

这篇具有很好参考价值的文章主要介绍了【算法小课堂】深入理解前缀和算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

  • 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。

我们通过一个例子来理解前缀和算法的优势:

一维前缀和:

www.nowcoder.com

我们可以通过暴力的解法去解决这个问题,但是这样时间复杂度会比较高,达到O(n*q)

我们可以对暴力解法进行优化:

我们以【1,4,7,2,5,8,3,6,9】这个数组来讲解前缀和(快速求出数组中某个连续区间的元素和)这个算法

index为数组下标,至于为什么下标从一开始后面会讲!!!

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

我们提前弄一个前缀和数组dp,这个数组的元素dp【i】代表【1,i】区间内所有元素之和

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

我们在求dp的时候肯定不可以用暴力解法,不然的话时间复杂度又上去了,

dp【i】代表 【1,i】区间内所有元素之和,那dp【i-1】代表 【1,i-1】区间内所有元素之和

  • dp【i】就可以等于dp【i-1】+arr【i】

那我们再来看看题目,题目要求我们输出从l到r区间内所有元素之和

那我们可以直接输出dp【r】-dp【l-1】

#include <iostream>
#include<vector>
using namespace std;
int main() {
    int n,q;
    cin>>n>>q;
    vector<int> arr(n+1);
    for(int i=1;i<=n;i++) cin>>arr[i];
    vector<long long> dp(n+1);
    for(int i=1;i<=n;i++) dp[i]=dp[i-1]+arr[i];
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        cout<<dp[r]-dp[l-1]<<endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

二位前缀和:

首先如果我们使用暴力解法时间复杂度,直接就是O(nmq),我们可以对其使用前缀和算法优化

我们可以创建一个(n+1)(m+1)的的数组arr和(n+1)(m+1)的的前缀和数组dp

  • 这里数组坐标加一也是为了防止越界的情况

dp【i】【j】代表从(1,1)~(i,j)这个区间内所有元素之和

我们如何快速求出dp【i】【j】的值呢?以下面这个数组为例,假设我们要求的是dp【3】【3】

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

我们先来观察一个通用图:我们要求多少A+B+C+D之和

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

A+B+C+D=(A+B)+(A+C)+D-A,括号内的是一个整体

我们可以结合下标的关系推导进一步的关系

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划

A+B+C+D=(A+B)+(A+C)+D-A

​ =dp【i-1】【j】+dp【i】【j-1】+arr【i】【j】-dp【i-1】【j-1】

这样我们就求出来了dp的每一个数了,回到题目上,题目要求我们输出(x1,y1)~(x2,y2)这个区间内的所有元素之和,假设让我们输出是是这个区间

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划编辑

  • D=(A+B+C+D)-(A+B)-(A+C)+A

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划编辑

D=(A+B+C+D)-(A+B)-(A+C)+A

= dp【x2】【y2】-dp【x1-1】【y2】-dp【x2】【y1-1】+dp【x1-1】【y1-1】

为了防止越界,我们开辟数组也要多开一行一列

【算法小课堂】深入理解前缀和算法,算法小课堂,算法,动态规划文章来源地址https://www.toymoban.com/news/detail-719852.html

到了这里,关于【算法小课堂】深入理解前缀和算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解强化学习——马尔可夫决策过程:动态规划方法

    分类目录:《深入理解强化学习》总目录 动态规划(Dynamic Programming,DP)适合解决满足最优子结构(Optimal Substructure)和重叠子问题(Overlapping Subproblem)两个性质的问题。最优子结构意味着,问题可以拆分成一个个的小问题,通过解决这些小问题,我们能够组合小问题的答案

    2024年02月03日
    浏览(45)
  • 动态规划:理解并掌握算法的艺术

    动态规划(Dynamic Programming,DP)是一种算法设计技术,它将一个复杂问题分解成更小的子问题,并将这些子问题的解存储起来,以避免重复计算。这种方法能够有效地解决各种优化问题,特别是在计算机科学、运筹学、经济学和工程学等领域。 在深入探讨动态规划之前,我们

    2024年02月03日
    浏览(36)
  • 简短通俗理解动态规划算法--最短路径问题

    问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径——最短路径。在博客动态规划算法中介绍了动态规划的基本思想已经建立动态规划模型的步骤,下面将其中的方法分析最短路径问题。 最短路径有一个重要特性: 如果由起点A经

    2024年02月08日
    浏览(48)
  • 深入理解强化学习——马尔可夫决策过程:马尔可夫奖励过程-[计算马尔可夫奖励过程价值的动态规划方法]

    分类目录:《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程:马尔可夫奖励过程-[计算马尔可夫奖励过程价值的蒙特卡洛方法]》介绍了计算马尔可夫奖励过程价值的蒙特卡洛方法,同时我们也可以用动态规划的方法,一直迭代贝尔曼方程,直到价

    2024年02月05日
    浏览(48)
  • 算法通关第十九关-青铜挑战理解动态规划

    大家好我是苏麟 , 今天聊聊动态规划 . 动态规划是最热门、最重要的算法思想之一,在面试中大量出现,而且题目整体都偏难一些对于大部人来说,最大的问题是不知道动态规划到底是怎么回事。很多人看教程等,都被里面的状态子问题、状态转移方程等等劝退了。 其实,所

    2024年02月03日
    浏览(40)
  • 动态规划课堂5-----子序列问题(动态规划 + 哈希表)

    目录 引言: 例题1:最长递增子序列 例题2:最长定差子序列 例题3:最长的斐波那契子序列的长度 例题4:最长等差数列 例题5:等差数列划分II-子序列 结语: 要想解决子序列问题那么就要理解子序列和子数组的区别,二者的定义如下。 子序列: 是由数组派生而来的序列,

    2024年03月13日
    浏览(74)
  • 【算法】一文带你从浅至深入门dp动态规划

    本文要为大家带来的是dp动态规划,相信这是令很多同学头疼的一个东西,也是在大厂面试中很喜欢考的一个经典算法 🔰 本文总共会通过四道题来逐步从浅至深地带读者逐步认识dp动态规划 首先在讲解题目之前,我们要先来说说动态规划理论基础,让大家知道到底什么是【

    2024年02月07日
    浏览(43)
  • 动态规划课堂4-----子数组系列

    目录 引入: 例题1:最大子数组和 例题2:环形子数组的最大和 例题3:乘积最大子数组 例题4:乘积为正数的最长子数组 总结: 结语: 在动态规划(DP)子数组系列中,我们还是用前面几节所用的 解题思路1. 状态表示,2.状态转移方程,3.初始化,4.填表顺序,5.返回值 。在

    2024年03月11日
    浏览(37)
  • 动态规划课堂6-----回文串问题

    目录 引言: 例题1:回文子串 例题2:回文串分割IV 例题3:分割回文串II 例题4:最长回文子序列 例题5:让字符串成为回文串的最小插入次数 回文字符串  是正着读和倒过来读一样的字符串。 动态规划的回文串问题一般是把 子串 是否是回文串的信息保持在dp表里面,所以更

    2024年03月18日
    浏览(47)
  • 【leetcode】动态规划::前缀和

    标题:【leetcode】前缀和 @水墨不写bug 正文开始: 给定一个长度为n的数组a1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出al​+al+1​+....+ar​ 输入描述: 第一行包含两个整数n和q. 第二行包含n个整数, 表示a1​,a2​,....an​. 接下来q行,每行包含

    2024年04月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包