news 2026/10/1 18:53:48

树上倍增|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/9/30 9:00:30

ISO 13485深度解析:医疗设备软件开发的实践指南

1 ISO 13485&#xff1a;医疗设备质量的“操作系统”从医疗设备软件开发的角度看&#xff0c;ISO 13485可以被理解为整个医疗器械生命周期的“操作系统”。它不是一个具体的技术标准&#xff0c;而是一个框架性的质量管理体系&#xff08;QMS&#xff09;标准&#xff0c;专门为…

作者头像 李华
网站建设 2026/9/30 17:04:17

Agentic Coding一些实践总结

最近一年AI编码飞速发展&#xff0c;现在我的90%以上的代码都是出自AI。想想在2024年调用OpneAI官方接口&#xff08;3.5模型&#xff09;,超过10K的Token就让LLM的上下文完全混乱&#xff0c;导致LLM无法记住太多东西&#xff0c;更不用说调用工具&#xff0c;生成代码了。到目…

作者头像 李华
网站建设 2026/9/30 17:03:36

String池原理详解:Java字符串创建与内存优化

理解String池是掌握Java内存管理和性能优化的关键一步。它本质上是一个位于堆内存中的字符串常量池&#xff0c;用于存储字符串字面量&#xff0c;其核心目的是通过重用不可变的字符串对象来节省内存、提升程序效率。对于开发者而言&#xff0c;深入理解其工作机制能有效避免一…

作者头像 李华
网站建设 2026/9/29 21:36:20

VS2026对比VSS2005:版本控制工具新老差异与迁移指南

从VSS2005到VS2026&#xff0c;版本控制工具经历了革命性的变化。作为一名长期使用微软技术栈的开发者&#xff0c;我见证了从集中式、文件锁定的旧模式&#xff0c;到如今分布式、高效协作的现代开发流程。这种演进不仅仅是工具的升级&#xff0c;更是开发理念的深刻变革。 V…

作者头像 李华
网站建设 2026/9/30 9:47:47

AI写专著必备!优质工具推荐,为你的学术创作添助力

学术专著的写作不仅仅是“能否完成”&#xff0c;更重要的是“能否顺利出版和被认可”。在现如今的出版市场中&#xff0c;学术专著的受众群体比较有限&#xff0c;这使得出版社对选题的学术价值和作者的学术声誉要求相当高。很多即便完成了初稿的书稿&#xff0c;也常常因为“…

作者头像 李华
网站建设 2026/9/30 17:47:33

AI教材生成超厉害!一键搞定创作,低查重通过审核没问题!

教材初稿终于完成&#xff0c;但接下来的修改和优化过程简直就是一种“煎熬”&#xff01;要通读整本书寻找逻辑上的漏洞和知识点的错误&#xff0c;这可真需要花费不少时间&#xff1b;而调整一个章节的结构&#xff0c;往往会影响到后面好几个部分&#xff0c;修改的工作量几…

作者头像 李华