news 2026/4/3 6:05:54

树上倍增|st表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树上倍增|st表

lc1483

ST表的本质就是二进制拆分,只要满足传递性,可加性即可,和线段树,树状数组,二分查找的底层数学模型是一致的

不得不说,这种记录2^j父节点的想法太巧妙了,第一次见,觉得惊艳。 blow my mind 的感觉,极具美感的算法让人如受洗礼一样,佩服第一次想出这种算法的大佬。

5. 类似的思想在很多算法里都有体现.

6. 树的高度如果是N怎么办,比如退化成链表

7. 代码没变化,复杂度分析没变化。文字确实有个小错误:树的最大的高度是 n 级别的,所以人一个节点到距离为 1, 2, 4, 8, 16, 32 ... 的祖先,最多存储到 logn 这么多祖先的距离,所以状态总数是 nlogn 的。

8. 我一直以为叫ST表

9. st 也用到了 binary lifting 的思想,但 st 不是 binary lifting,st 是指创建一个表快速求查询一个数组的最大值,最小值,和或者其他统计数据。可以参考这里:https://cp-algorithms.com/data_structures/sparse-table.html

class TreeAncestor {

private:

vector<vector<int>> dp;

public:

TreeAncestor(int n, vector<int>& parent) : dp(n) {

for(int i = 0; i < n; i ++)

dp[i].push_back(parent[i]);

for(int j = 1; ; j ++){

bool allneg = true;

for(int i = 0; i < n; i ++){

int t = dp[i][j - 1] != -1 ? dp[dp[i][j - 1]][j - 1] : -1;

dp[i].push_back(t);

if(t != -1) allneg = false;

}

if(allneg) break; // 所有的节点的 2^j 的祖先都是 -1 了,就不用再计算了

}

}

int getKthAncestor(int node, int k) {

if(k == 0 || node== -1) return node;

int pos = ffs(k) - 1; // C++ 语言中 ffs(k) 求解出 k 的最右侧第一个 1 的位置(1-based)

return pos < dp[node].size() ? getKthAncestor(dp[node][pos], k - (1 << pos)) : -1;

}

};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 3:47:18

Wi-Fi PEAP

1. 它是什么 Wi-Fi PEAP 是一种用于无线网络接入的安全认证协议。可以把它想象成进入一栋需要双重检查的大楼。第一重&#xff0c;无线网络&#xff08;Wi-Fi&#xff09;就像大楼的大门&#xff0c;你得先找到它。第二重&#xff0c;PEAP 是门内的一个特殊前台&#xff0c;它…

作者头像 李华
网站建设 2026/3/12 18:52:01

NTP(网络时间协议)

1. NTP是什么NTP&#xff08;网络时间协议&#xff09;可以理解为互联网上的“原子钟广播”。它是一套用于将计算机、服务器或嵌入式设备&#xff08;如医疗设备&#xff09;的系统时间与高精度时间源进行同步的协议与服务体系。其核心原理类似于日常生活中对表&#xff1a;设备…

作者头像 李华
网站建设 2026/3/31 22:17:34

Wi-Fi PSK

1. Wi-Fi PSK 是什么&#xff1f; Wi-Fi PSK&#xff0c;全称“预共享密钥”&#xff0c;本质上就是连接Wi-Fi时输入的密码。它像一把事先配好的钥匙&#xff0c;只有当设备输入的密码与路由器上设置的完全一致时&#xff0c;才能打开网络连接的大门。 可以把它理解为一次秘密…

作者头像 李华
网站建设 2026/3/13 15:40:16

在 CentOS 7 系统中通过定时任务自动执行 Shell 脚本

在 CentOS 7 系统中通过定时任务自动执行 Shell 脚本&#xff0c;CentOS 7 默认使用 crontab 工具实现定时任务&#xff0c;这是系统自带、稳定可靠的方案&#xff0c;接下来完整讲解从脚本准备、权限配置到 crontab 编写、管理的全流程。 一、前置准备&#xff1a;编写可执行的…

作者头像 李华
网站建设 2026/3/29 2:27:17

AI写论文不愁没帮手!4款AI论文写作工具,搞定各类学术论文!

在2025年&#xff0c;随着学术写作逐渐智能化&#xff0c;越来越多的人开始使用AI写论文的工具。很多AI论文生成软件在撰写硕士或博士论文等长篇学术作品时&#xff0c;总会出现理论深度不足或逻辑结构不够严谨的问题。普通的AI写论文工具根本无法满足专业论文写作的高标准需求…

作者头像 李华