浅谈:树形动态规划中的换根技巧

什么是换根DP

如大家所熟悉的,‌换根DP(Re-rooting DP)是树形动态规划的一种优化技巧,用于在一次预处理后,高效计算以树中每个节点为根时的某种全局答案,避免对每个根单独做一次 O(n) 树形 DP(否则总复杂度 O(n²))

‌核心思想‌:

先任选一节点(如 1)为根,‌第一次 DFS(自底向上)‌ 计算其子树相关状态(如子树大小、子树内距离和等);再‌第二次 DFS(自顶向下)‌ 利用"换根公式"从父节点状态推导出子节点作为新根时的答案。

树形 DP

树形 DP 分为两部分。分别为树形操作和DP(Dynamic Programming,动态规划)操作。

一般来说,对树形操作都会伴随广度或者深度优先搜索的操作。

而在这搜索中还伴随动态规划的状态转移,这就是树形 DP。

换根 DP

换根 DP 是树形 DP 中的一个再度细分类型。

通常的场景是要求算出所有点作为根时,树的状态。如果是用普通的树形 DP 操作 n 次,则时间复杂度通常会高达 。这个效率非常低。

而换根 DP 可以通过单次 dfs 的过程中,以 复杂度的消耗,算出孩子节点的状态。

因此换根 DP 也会被称为二次扫描的树形 DP。综合时间复杂度可以维护在 的数量级。

相关推荐
yi0111 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
灯澜忆梦4 小时前
【面向对象编程C++】| 基础语法
java·c++·算法
小蒋观天下4 小时前
专项方案:大场景港口AI安防、多干扰环境下的算法调优与落地实操
人工智能·深度学习·算法·安全·机器学习·计算机视觉·ai大模型
Evand J4 小时前
【电机滤波例程5】渐消因子自适应扩展卡尔曼滤波(EKF),MATLAB。PMSM负载突变下的状态估计。附下载链接
算法·matlab
H.莓飛4 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
好想像大佬一样能够ak所有5 小时前
Leetcode35.搜索插入位置
数据结构·算法·leetcode
aqiu1111115 小时前
【C++算法打怪专栏】LeetCode 165. 比较版本号(双指针与字符串流法)
c++·算法·leetcode
黄金龙PLUS5 小时前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
不会就选b5 小时前
算法日常・每日刷题--<动态规划>14
算法
赛博守夜人5 小时前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全