查找的本质不是“比较”,而是:
在给定约束条件下,用尽可能低的成本,缩小目标的不确定性空间。
所有查找结构,本质上都在回答三个问题:
因此,查找问题的核心权衡只有四个维度:
查找(Search)问题体系
├── 一、确定性查找(精确定位)
│ ├── 顺序查找(无结构)
│ ├── 二分查找(有序 + 随机访问)
│
├── 二、空间换时间的直接映射
│ ├── Bitmap
│ ├── Hash 映射
│
├── 三、概率型存在性查找
│ ├── 布隆过滤器
│ ├── 布谷鸟过滤器
│
├── 四、时间维度上的查找(调度索引)
│ ├── 单层时间轮
│ ├── 分层时间轮
│
└── 五、工程级抽象:索引
├── 索引的本质
├── 选型约束与权衡
本质原理
不确定性收敛速度
int seq_search(int array[], int n, int key)
{
for(int i = 0; i < n; i++)
{
if(key == array[i])
return i;
}
return -1;
}
工程哲学
顺序查找并不“低级”,它是:
本质原理
二分查找不是“技巧”,而是利用全序关系进行信息熵减半。
每一次比较,都会排除 一半的可能性空间。

int l = 0, r = a.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (a[mid].equals(target)) {
return mid;
}
if (less(target, a[mid])) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return -1;
隐含约束(本质代价)
工程迁移能力
二分查找是一种问题拆解思维: 不仅用于数据查找,也用于:
本质原理
用空间换取 O(1) 的存在性判断。
1存在 => 010000
2存在 => 001000
1,2都存在 => 011000
本质代价
空间与值域强相关
适用于:

本质原理
用多重哈希 + 位图判断“是否可能存在”。
查询结果只有两种:
关键权衡
不支持精确删除
存在误判(假阳性)
但:
工程哲学
布隆过滤器的真正价值在于: 提前否定不可能发生的请求。

本质原理
相比布隆过滤器的演进
支持删除
减少假阳性
引入:
时间轮本质不是“定时器”,而是 在时间轴上建立索引结构。

本质思想
round 的意义
用“圈数”表示未来的距离, 将无限时间映射为有限结构。

本质演进
单层时间轮无法覆盖大时间跨度
通过 时间分层(小时 → 分钟 → 秒):
本质类比
分层时间轮 ≈ 时间维度上的 B+ 树
索引不是数据结构, 而是 “查找约束下的组织方式”。
| 思想 | 结构 |
|---|---|
| 映射 | Hash |
| 有序 | 红黑树 / B+ 树 |
| 跳跃 | 跳表 |
| 否定 | 布隆过滤器 |
线性扫描
→ 有序结构(二分 / 树)
→ 映射定位(Hash / Bitmap)
→ 概率容错(Bloom / Cuckoo)
→ 维度扩展(时间轮)
→ 系统级索引
所有查找结构,都是对"不确定性"的不同妥协方式。