HNSW 图索引Hierarchical navigable small-world index

用多层近邻图保存向量的导航关系:底层覆盖全部元素,高层保留更稀疏的子集。

核心约束
高层节点也存在于低层;层级、入口和各层邻接列表必须与存储的元素一致。
适用问题
需要在大批向量中执行近似近邻查询的内存索引。
边界与取舍
索引布局与检索算法是两部分;连接数、层数和向量编码共同影响空间,更新和删除支持依实现而定。

常见操作#

n 为向量数,d 为向量维度,M 为每节点邻接上限的量级;q 为一次搜索计算距离的节点数;V、E 为各层顶点和边的总数。

操作时间复杂度条件与说明
新增向量搜索插入位置 + 邻居筛选 / 反向连接efConstruction、M、图形状与距离计算成本共同决定,不能统一保证 O(log⁡n)O(\log n)。
近邻查询距离计算约 O(qd)O(qd),另计候选队列维护稠密向量距离逐维计算;q 随 efSearch、数据分布和召回要求变化。
标记删除 / 物理移除由实现的删除策略决定标记删除不等于修复连通性;并非所有实现支持在线物理删除。
遍历图结构O(V+E)O(V+E)逐层访问邻接表,另计读取向量数据。

时间与空间#

时间复杂度
构建 / 查询依赖访问节点和邻居维护
存储空间
固定 M 时图期望 O(nM)O(nM),向量 O(nd)O(nd)

随机层高控制上层规模;M 若随数据增长,不能把图存储写成无条件 O(n)O(n)。

工程中的应用#

1 个案例 · 附源码
基础原理参考资料

Malkov & Yashunin · HNSW分层构图、近邻选择、参数与实验复杂度讨论。

hnswlib · Algorithm parametersM、efConstruction、ef 对内存和搜索质量的作用。

4 个概念