话谈——点分治
Posted 。✧* ꧁王者꧂✧*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了话谈——点分治相关的知识,希望对你有一定的参考价值。
话不多说,因为也没有太多时间闲聊,就简单说一下吧。
点分治,既然是“分治”,那么其一定运用了分治思想。
分治思想:简单来说就是将一个复杂问题拆分成几个小问题再依次解决。
点分治,就是在分治思想的基础上,以点作为划分依据,来解决树上问题。
点分治多用来处理与树上路径有关的问题,其实现方法便是每一次找树的重心(一棵树上某一点的最大连通块最小的点即为此树的重心)。找到树的中心后,我们便将树上路径问题转化成了两个子问题:
1.经过重心的路径;
2.不经过重心的路径(即去掉重心后每一个连通区域内的路径)。
对于问题1,我们就依托重心,来记录并处理相关信息。
那么,对于问题2,我们可以再重复上述步骤,即找重心,处理路径信息。最后,递归到只剩下单个点时,便退出递归。
其时间复杂度是
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn),因为其总共递归的层数不会超过
l
o
g
n
logn
logn,而其每一层的递归基本上都会将
n
n
n个点遍历,所以总复杂度为
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn)。
点分树:又称动态点分治。其实就是讲点分治所划分的每个问题都存下来,方便后续的调用。因为其会多次找到之前存下来的子问题,所以称“动态”,但因为其存在了类似树的结构中,所以,又叫做点分树。
总结:高级的暴力。所以,同学们要勇于写暴力啊(滑稽~)。
以上是关于话谈——点分治的主要内容,如果未能解决你的问题,请参考以下文章