ST 表是处理静态区间最值查询的利器,预处理 O(n log n),查询 O(1)。通过倍增思想预处理所有 2^k 长度区间的答案,适用于 RMQ、GCD 等满足幂等律的运算。
侯瑞哲的博客
把工程问题写清楚,也把生活里值得记的事留下。
这里主要写 AI、数据系统、数据库和工程实践。文章按时间更新,但更适合按主题慢慢读。
最近更新
按时间写下的文章
ACM 学习篇 11:线段树(Segment Tree)
线段树是树状数组的"全能升级版",支持任意区间修改、区间最值等多种操作。本篇讲解区间划分、递归构建、单点/区间更新与查询,以及核心的懒标记(Lazy Propagation)技术。
ACM 学习篇 10:树状数组(Fenwick Tree)
树状数组是专门解决区间求和与单点修改的轻量级数据结构,核心原理 lowbit(x) = x & (-x),所有操作 O(log n),代码短、常数小,是 ACM 中最常用的数据结构之一。
ACM 学习篇 09:二叉搜索树(BST)
二叉搜索树(BST)能在 O(log n) 期望时间内同时支持搜索、插入、删除和有序遍历,是真正全能的动态有序数据结构。
ACM 学习篇 08:堆与优先队列
ACM 学习篇第八课:理解堆的原理与二叉堆的实现,掌握优先队列的常用操作,学会用堆高效解决 Top-K、合并有序链表、数据流中位数等经典问题。
ACM 学习篇 07:并查集
ACM 学习篇第七课:理解并查集的原理与实现,掌握路径压缩和按秩合并的优化技巧,学会用并查集高效解决连通性、分组和集合合并问题。
ACM 学习篇 06:哈希表与计数
上一篇讲了单调栈和单调队列,它们擅长处理有顺序关系的元素。但很多时候我们需要的是"快速查找"和"统计次数",这就该哈希表出场了。
存储系统选型地图:性能、成本和场景怎么取舍
存储系统选型不是在 Redis、MySQL、HBase、ClickHouse、Doris、Hudi、Iceberg、Elasticsearch、Kafka、Milvus 之间排一个绝对名次,而是先判断访问模式、延迟 SLA、更新方式、查询形态、数据规模和成本约束。本文给出一棵细致决策树,并用性能、吞吐、成本、运维复杂度和模型平台场景做横向对比。
Transformer:大模型为什么能读懂上下文
Transformer 可以理解成一套让 token 在允许范围内互相参考的架构。它先把文字变成向量,再加入位置信息,经过多层 Self-Attention、前馈网络、残差连接和 LayerNorm,不断重写每个 token 的表示。本文用图解释 Transformer Block、Q/K/V、Mask、Multi-Head Attention、FFN,以及 Encoder、Decoder、Decoder-only 的区别。
KV Cache:大模型推理为什么不用每个字都从头算
KV Cache 可以理解成大模型推理时做的“读书笔记”:历史 token 在每一层算出的 Key 和 Value 会被记下来,生成下一个 token 时直接翻笔记,不用把前文从头再算一遍。本文用图解释它缓存什么、Prefill 和 Decode 怎么配合、为什么长上下文会吃显存,以及 MQA/GQA、FlashAttention、PagedAttention 和它的关系。
ACM 学习篇 05:栈、队列与单调结构入门
ACM 学习篇第五课:从栈和队列开始,理解单调栈、单调队列为什么能在线性时间维护“最近更大值”和“窗口最值”。
ACM 学习篇 04:双指针与滑动窗口
ACM 学习篇第四课:学习双指针与滑动窗口,理解为什么左右边界只往前走,就能把很多枚举区间的问题从 O(n^2) 降到 O(n)。
ACM 学习篇 03:前缀和与差分
ACM 学习篇第三课:理解前缀和与差分,一个用来快速查询区间,一个用来快速处理区间修改。
ACM 学习篇 02:排序与二分
ACM 学习篇第二课:从排序、比较器、lower_bound 到二分答案,理解“有序”和“单调性”为什么是算法竞赛里最常用的入口。
量化到底在量化什么
量化投资入门:量化不是预测未来的水晶球,而是把投资假设写成可验证的规则,用数据、模型、回测、交易执行和风控形成一套可复盘的系统。
ACM 学习篇 01:复杂度、输入输出和代码模板
ACM 学习篇第一课:从复杂度、数据范围、输入输出和 C++17 代码模板开始,建立算法竞赛学习的基本装备。
ACM 学习篇 00:学习路线与目录
ACM 学习篇章的学习路线与目录:从复杂度、基础数据结构、搜索、动态规划、图论、数学、字符串,到网络流、匈牙利算法、树链剖分、莫队、后缀自动机、FFT 和计算几何,按阶段建立算法竞赛知识体系。