离线分治算法 - 更加广义的分治

I.综述

显然,离线分治就是要先预知初始序列和所有操作才能完成。

离线分治将所有操作放置在时间轴上,并分治地计算所有操作对查询操作造成的影响。

所以就是这样,将一个动态操作问题化为静态问题。

这是CDQ分治

还有一种整体分治,在处理一些与值域有关的问题时,我们试着利用好每一次计算的信息来回答所有询问。

其实,它是把处理的序列、值域和询问都一起分治了,到最后,我们可以简单地处理出这些问题的答案。

就是说,值域和操作序列都被分成两段,可以分别处理,这就是整体分治。

这种算法,还可以看作是对CDQ的一种扩展,只是变换了一种对操作序列分治的方式。

II.起源

处理一些对序列的离线操作与询问。

CDQ与整体分治,或者说所有的分治,都是在减少需要考虑的问题规模与复杂度。

CDQ相当于就是在给问题“降维”,通过预先满足时间限制,来使得我们不需要在之后的处理中满足操作顺序限制。

整体分治就像是给问题“降规模”,把值域(答案域)和问题进行划分,那么这些被划分的问题就只需要在这些值域里求解。

如果这个还带修改,无非就是必须把对应值域的修改操作也加进去罢了,就是说,与这段值域相关的,无论是修改,还是我们已经确定答案在里面的询问,都加进去进行分治。

或许使用例题能够更加方便理解。

III.基操

这不是数据结构,也不是算法,而是一种处理问题的思想。根据以上描述,你应该已经知道该算法的大致流程,故不赘述。

posted @ 2023-07-09 14:51  haozexu  阅读(20)  评论(0)    收藏  举报  来源