算法有关点分治的一些理解与看法

Posted twilight-sx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法有关点分治的一些理解与看法相关的知识,希望对你有一定的参考价值。

  说实话在很长一段时间内都对于点分治算法感觉到比较的害怕。主要是感觉它的复杂度非常的高,而且莫名给我留下了一种点分治是有板子的印象。实际上是没有的。而点分治由于将一棵树每次都尽量地划分为了相对平均的几块,所以就算代码写起来复杂度非常的高,效率往往而言也还是比较可观的。如果在考试的时候遇到点分治的题目,个人认为就算不能写出正确复杂度的解法,暴力点分一样值得拥有啊~(主要是可能比一些其他的奇怪的暴力更为好写)。

  点分治主要用于处理与树上路径相关的问题。主要的思想在于:对于一个点 (u) 而言,所有的路径都只有两种可能:经过该点的和不经过该点的。这样我们在遍历到一个点的时候,统计出所有经过它的路径的答案,在此后我们就可以认为这个点不会再有用处,丢掉就好了。如何统计答案,则会与很多其他的算法相结合,鉴于本人做过的题目数量与难度均有限,目前来说一般而言是与dp或容斥相结合处理。(这里就充分的体现出点分治的优越性:暴力的统计方法用点分治带可以飞)。

  实际上,除了分治的部分,剩下的完全可以看做是一个新的题目,例如树形dp之类(还是很常见的)。例如 IOI2011 race 和 FJOI2014 最短路径树都是一样的,这里有一个技巧:为了防止同一棵子树内的点对当前分治点产生贡献,我们可以先统计答案,再更新记录的数组。(类似01背包优化,用于统计与当前子树内的路径构成的路径的答案时,这个子树的路径尚未被包括进来。)而WC2010 重建计划中,我也是运用了一个非常暴力的方法。很奇怪的WA了一个点,不过对于暴力算法来说也还是心满意足了~

以上是关于算法有关点分治的一些理解与看法的主要内容,如果未能解决你的问题,请参考以下文章

浅谈对点分治的一些理解

算法设计与分析 实验二 分治法求解最近点对问题

动态点分治入门随讲

点分治模板理解

话谈——点分治

点分治详解