结构体 faiss::HeapArray

template<typename C>
struct HeapArray

用于一组 [最小|最大] 堆的模板结构体。它经过专门设计,使堆的实际数据可以直接存储在紧凑的数组中。

公共类型

typedef C::TI TI
typedef C::T T

公共函数

inline T *get_val(size_t key)

返回堆的值的列表。

inline TI *get_ids(size_t key)

相应的标识符。

void heapify()

在添加之前准备所有的堆

void addn(size_t nj, const T *vin, TI j0 = 0, size_t i0 = 0, int64_t ni = -1)

将 nj 个元素添加到堆 i0:i0+ni,使用顺序 ID

参数:
  • nj – 要添加到每个堆的元素数量

  • vin – 要添加的元素,大小为 ni * nj

  • j0 – 将此添加到要添加的 ID

  • i0 – 要更新的第一个堆

  • ni – 要更新的元素数量 (-1 = 使用 nh)

void addn_with_ids(size_t nj, const T *vin, const TI *id_in = nullptr, int64_t id_stride = 0, size_t i0 = 0, int64_t ni = -1)

与 addn 相同

参数:
  • id_in – 要添加的元素的 ID,大小为 ni * nj

  • id_stride – id_in 的步幅

void addn_query_subset_with_ids(size_t nsubset, const TI *subset, size_t nj, const T *vin, const TI *id_in = nullptr, int64_t id_stride = 0)

与 addn_with_ids 相同,但仅适用于查询的子集

参数:
  • nsubset – 要更新的查询条目的数量

  • subset – 要更新的查询的索引,范围为 0..nh-1,大小为 nsubset

void reorder()

重新排序所有堆

void per_line_extrema(T *vals_out, TI *idx_out) const

这实际上不是一个堆函数。它只是找到数组 D 每行中的每行极值

参数:
  • vals_out – 每行的极值(大小为 nh,或 NULL)

  • idx_out – 极值的索引(大小为 nh 或 NULL)

公共成员

size_t nh

堆的数量

size_t k

每个堆的已分配大小

TI *ids

标识符(大小为 nh * k)

T *val

值(距离或相似度),大小为 nh * k