r语言 数列前m项求和_【分块】数列分块入门 By Hoedx

本文介绍了r语言中利用分块算法处理数列前m项求和的问题,强调了分块算法在内存和实现难度上的优势。通过将数列分块并用暴力方法维护每个块的和,可以达到降低时间复杂度的效果,尤其是当块大小为√n时,算法效率最优。相较于线段树等高级数据结构,分块算法在某些情况下更具优势,如空间限制或代码简洁性。
摘要由CSDN通过智能技术生成

数列的操作,我们有很多算法,例如线段树、树状数组、st表等等。它们的时间复杂度都是log级别的。这种高级数据结构是很优美也很实用的。但是我们避不开一个问题,就是内存空间。但是我认为最大的问题还是可实现度,也可以说好不好写。线段树的代码相对而言是比较难写的,占用空间相对较大。在一般数列操作上 ,我们可以尝试引入分块算法。


分块算法

分块,顾名思义就是将数列分成一块一块的来处理来维护。我们可以利用一个例题来讲解分块的原理。

例题:给定一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值。

假设你有学过树状数组或者线段树,可以知道这是一个最最基础的模板题。那么用分块应该怎么解决这个问题呢?

如果你学过上面两种高级数据结构,请抛开它们。假设你并不知道,你会用什么办法来解决呢?很显然,我们会用暴力的算法。也就是在区间加法的时候一遍遍扫过去更新每一个的值就好了。这种算法肯定是不能AC的,但是我们可以联想一下分块的性质。我们可以把数列分成一个又一个的块,在每一个块来用暴力的方法处理和维护。就可以降低很多的时间复杂度,你可能会觉得疑惑:就这? 是的,所以分块算法又称为“优雅的暴力”。用hzwer学长的话来讲:“数列分块就是把数列中每m个元素打包起来,以达到优化算法的目的。

我们现在来介绍几个关键名词:

块:我们将数列划分成若干个不相交的区间,每个区间称为一个块 整块:在一个区间操作时,完整包含于区间的块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值