知其然,知其所以然
算法与数据结构 2026-01-23

用日志写入时间代替事件时间,峰值统计会差多少

真实验证并发写日志时,物理写入顺序和事件真正发生的顺序对不上(200 个并发写入,3503 对逆序);真实量化对称随机抖动几乎不影响峰值统计,但登录登出两条写入路径存在系统性延迟差(比如登出走异步清理)时,峰值会被稳定地系统性算高,真实登录潮场景下延迟 30 秒能把峰值算高 5.39%;真实构造一个从未发生过的“幽灵峰值”,证明这不是理论担忧。

扫描线 并发 动画演示
算法与数据结构 2026-01-22

高峰持续时长怎么算:创新高才清零,人数下降只是暂停

真实验证高峰在线人数的“持续时长”该怎么算:排序事件版按分段起止时间累加、差分数组版逐秒累加,两种算法结果完全一致;真实构造用例证明人数下降只是暂停累加,回到(不超过)当前峰值会接着累加,不会清零;真实构造用例证明已经累计的 9 秒峰值时长,会在后来出现更高峰值时被完全作废;30 万条真实数据交叉验证两种算法。

扫描线 在线人数 动画演示
算法与数据结构 2026-01-21

外部排序:数据大到内存放不下,怎么把它排好序

真实实现外部排序(分块落盘+堆多路归并),结果与 sorted() 完全一致;真实踩坑并修复了一个“归并阶段整块读进内存”的隐藏 bug,200 万条数据峰值内存从 310MB 降到 33.3MB;真实测出数据能装进内存时外部排序反而慢 5 倍;真实把排序结果接上高峰在线人数的扫描线算法,验证整条流水线结果一致。

外部排序 归并 动画演示
算法与数据结构 2026-01-18

高峰在线人数:登录登出日志一遍扫描线,算出峰值和持续时长

真实实现扫描线算法求一天内登录登出日志的高峰在线人数和持续时长,和暴力按秒计数交叉验证结果一致;真实构造同一秒退出又登录的用例,证明退出事件必须排在登录事件前面,否则峰值会被多算;30 万条模拟记录真实测出算法耗时。

扫描线 区间 动画演示
算法与数据结构 2025-12-15

最长公共子序列:填表与回溯

按行填 dp 表求出 LCS 长度,再从右下角回溯重建出真正的子序列,三种独立方式交叉验证结果。

动态规划 字符串 动画演示
算法与数据结构 2025-12-15

Kruskal:排完序的边,靠并查集判断能不能要

把边按权重排序后依次用并查集判断成环,含提前终止与从未被检查过的边,和 Prim 算法交叉验证总权重。

图论 最小生成树 动画演示
算法与数据结构 2025-12-15

编辑距离:三选一的 dp 表和真正的操作序列

SUNDAY 变成 SATURDAY 的经典例子,dp 表三选一填法与回溯还原真实编辑操作,三种独立方式交叉验证。

动态规划 字符串 动画演示
算法与数据结构 2025-12-15

二分查找的边界:lower_bound 与 upper_bound

在有重复值的数组上分步演示 lower_bound/upper_bound,lo/hi 是插入点而非下标,与 bisect 模块交叉验证。

二分查找 边界 动画演示
算法与数据结构 2025-12-15

LRU Cache:哈希表 + 双向链表怎么配合

容量 3 的 LRU 缓存跑 10 次 get/put,手写双向链表演示命中、未命中、淘汰时哈希表与链表如何同步更新。

数据结构 链表 动画演示
算法与数据结构 2025-12-15

拓扑排序:入度归零才能入队

课程先修关系的拓扑排序,Kahn 算法用入度计数+队列逐批处理,和 DFS 版本交叉验证并展示拓扑序的非唯一性。

图论 拓扑排序 动画演示
算法与数据结构 2025-12-15

环形链表检测:快慢指针为什么一定会相遇

Floyd 判圈算法两阶段分步演示,快慢指针判环、重置后同速定位环起点,和暴力哈希集合法交叉验证。

链表 双指针 动画演示
算法与数据结构 2025-12-15

0/1 背包:装还是不装,dp 表说了算

4 件物品容量 8 的 0/1 背包,dp 表填法与物品回溯,和 2^n 暴力枚举全部子集交叉验证最优解。

动态规划 背包问题 动画演示
京ICP备2026067502号-1京公网安备11010502063487号