边分治
边分治与点分治相似,每次选择断开后得到的两棵子树大小的最大值最小,可以与点分治寻找重心类比。
但是对于一般树来说,它并不一定有一条边具有使断边后最大子树大小呈指数级下降的特质(比如\(n-1\)个点连向\(1\)个点)。
我们可以利用虚点,将一棵树变为二叉树,具体来说,有两种方式。
对于以下的树:
方案一:
方案2:
可以证明,对于一个\(d\)叉树,最大子树大小\(maxsize \le \frac{nd}{d+1}\)。
我们可以利用反证法,假设有一条边,使得这条边断掉后,子树\(x\)的\(size\)大于\(\frac{nd}{d+1}\),同时切断\(x\)的任意一颗子树都不成立。
根据切断\(x\)的任意一颗子树都不成立,那么每棵子树大小必须$< \lfloor \frac{n}{d+1} \rfloor \(,由于\)d\(叉树每个节点度数最多为\)d+1\(,切断一条边后度数为\)d$,因此:
\[size_x <\lfloor \frac{n}{d+1} \rfloor \times d+1 \\ size_x \le \frac{nd}{d+1} \]那么二叉树选择最优边后\(maxsize \le \frac{2n}{3}\),分治时间复杂度为\(O(n \log n)\)级别(准确为\(O(n \log_{1.5} n)\),比点分治多一个常数)。