HNSW 图索引Hierarchical navigable small-world index
用多层近邻图保存向量的导航关系:底层覆盖全部元素,高层保留更稀疏的子集。
- 核心约束
- 高层节点也存在于低层;层级、入口和各层邻接列表必须与存储的元素一致。
- 适用问题
- 需要在大批向量中执行近似近邻查询的内存索引。
- 边界与取舍
- 索引布局与检索算法是两部分;连接数、层数和向量编码共同影响空间,更新和删除支持依实现而定。
常见操作#
n 为向量数,d 为向量维度,M 为每节点邻接上限的量级;q 为一次搜索计算距离的节点数;V、E 为各层顶点和边的总数。
| 操作 | 时间复杂度 | 条件与说明 |
|---|---|---|
| 新增向量 | 搜索插入位置 + 邻居筛选 / 反向连接 | efConstruction、M、图形状与距离计算成本共同决定,不能统一保证 。 |
| 近邻查询 | 距离计算约 ,另计候选队列维护 | 稠密向量距离逐维计算;q 随 efSearch、数据分布和召回要求变化。 |
| 标记删除 / 物理移除 | 由实现的删除策略决定 | 标记删除不等于修复连通性;并非所有实现支持在线物理删除。 |
| 遍历图结构 | 逐层访问邻接表,另计读取向量数据。 |
时间与空间#
- 时间复杂度
- 构建 / 查询依赖访问节点和邻居维护
- 存储空间
- 固定 M 时图期望 ,向量
随机层高控制上层规模;M 若随数据增长,不能把图存储写成无条件 。
工程中的应用#
1 个案例 · 附源码HNSW 从稀疏上层快速定位区域,再在底层扩大候选搜索。
附源码片段 · 检索与计算
基础原理参考资料
Malkov & Yashunin · HNSW分层构图、近邻选择、参数与实验复杂度讨论。
hnswlib · Algorithm parametersM、efConstruction、ef 对内存和搜索质量的作用。