离线分治算法 - 更加广义的分治
I.综述
显然,离线分治就是要先预知初始序列和所有操作才能完成。
离线分治将所有操作放置在时间轴上,并分治地计算所有操作对查询操作造成的影响。
所以就是这样,将一个动态操作问题化为静态问题。
这是CDQ分治
还有一种整体分治,在处理一些与值域有关的问题时,我们试着利用好每一次计算的信息来回答所有询问。
其实,它是把处理的序列、值域和询问都一起分治了,到最后,我们可以简单地处理出这些问题的答案。
就是说,值域和操作序列都被分成两段,可以分别处理,这就是整体分治。
这种算法,还可以看作是对CDQ的一种扩展,只是变换了一种对操作序列分治的方式。
II.起源
处理一些对序列的离线操作与询问。
CDQ与整体分治,或者说所有的分治,都是在减少需要考虑的问题规模与复杂度。
CDQ相当于就是在给问题“降维”,通过预先满足时间限制,来使得我们不需要在之后的处理中满足操作顺序限制。
整体分治就像是给问题“降规模”,把值域(答案域)和问题进行划分,那么这些被划分的问题就只需要在这些值域里求解。
如果这个还带修改,无非就是必须把对应值域的修改操作也加进去罢了,就是说,与这段值域相关的,无论是修改,还是我们已经确定答案在里面的询问,都加进去进行分治。
或许使用例题能够更加方便理解。
III.基操
这不是数据结构,也不是算法,而是一种处理问题的思想。根据以上描述,你应该已经知道该算法的大致流程,故不赘述。
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18281775

浙公网安备 33010602011771号