【笔记】树的分治

来源:互联网 发布:在线网络信托基金公司 编辑:程序博客网 时间:2024/05/16 15:40

暑假的时候WTH大神就讲过思想了QAQ(顺带Orz Fuckstrom 自悟)

树的分治,简单地说,就是把树分为好几个,对于每个递归处理后,再计算整棵树的答案,也就是序列上的分治思想放到了树上。树的分治分为点分治和边分治。

点分治,即为把某个点删除后,树分为好多棵,对那些树处理然后计算答案。

边分治即割掉边,把树分为两棵,然后进行处理。

点分治中被删除的点应该选重心,这样树最多被分logn次,若每次处理当前树都是O(n)的,总复杂度为O(nlogn),边分治同理。

但点分治会把树分为好多棵,极限情况下(菊花图)可以被卡成O(n^2)。而边分治可以保证分成两棵,比点分治更优,但碰到菊花图依然是O(n^2)。

可以通过加【无用点】来改变树的形态但不影响答案,来改善时间复杂度,强行转为二叉树,这样就能保证O(nlogn)。

2 0
原创粉丝点击