首页 > 编程语言 >近似最近邻搜索 (五) PQ 算法

近似最近邻搜索 (五) PQ 算法

时间:2022-12-03 11:12:30浏览次数:41  
标签:检索 PQ 压缩 近似 算法 聚类 id 向量

PQ算法全称ProductQuantization,中文名为乘积量化。该算法来源于图像检索,本质上是对向量做压缩。

假如总共有N个数据点,数据的维度是D维。给定一个Query做近邻检索,如果采用暴力检索方式,那么计算复杂度就是N*D(遍历N个点计算距离,每个点计算的复杂度是D)。如果可以对向量进行压缩,比如压缩后的向量维度只有原来的一半,那么复杂度就可以降低一半。

如下图所示,假如原始的向量长度为128(D=128),将向量分为8段(M=8),每段的长度是16维。

采用聚类算法,对于每段训练一个256个(k=256)中心的聚类模型,用聚类中心id表示每一段。由于聚类id有256个,所以只需要8-bits就可以表示一个id。注意每一段都是独立的聚类模型和聚类中心点。

SDC全称symmetric distancecomputation,是将query向量做压缩,转化为用每段用聚类中心id的向量表示。然后计算距离(此时所有待检索的数据点都已经预先转化完成向量压缩)。而ADC算法,则是不对Query向量做压缩,直接计算Query向量到各个聚类中心的距离。一般认为ADC的误差更小一些。


(引自知乎:工牌厂程序猿)

标签:检索,PQ,压缩,近似,算法,聚类,id,向量
From: https://www.cnblogs.com/vpegasus/p/pq.html

相关文章

  • 每日算法之树的子结构
    JZ26树的子结构描述输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看......
  • AI入门之搜索算法
    启发式搜索(有信息式搜索)以寻找最短路径问题为例设一个评估函数f(n),从当前节点出发,根据评价函数来选择后续节点设置一个启发性函数h(n),计算从节点n到目标节点之间所......
  • 蓝桥杯 ALGO-50算法训练 数组查找及替换
    问题描述给定某整数数组和某一整数b。要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序。如果数组元素数值在A到Z的ASCII之间,替换为对应字母。......
  • 蓝桥杯算法学习整理
    报名了蓝桥杯,但是对于算法的基础却不是很好,收集了一些学习的链接,以下链接都是转载自别人名下的博客文章,如果博主介意的话,请通知我立即删除。供日后复习时使用:前部分是摘......
  • 蓝桥杯 ALGO-47算法训练 蜜蜂飞舞
    时间限制:1.0s内存限制:512.0MB问题描述“两只小蜜蜂呀,飞在花丛中呀……”话说这天天上飞舞着两只蜜蜂,它们在跳一种奇怪的舞蹈。用一个空间直角坐标系来描述这个......
  • 蓝桥杯 ALGO-54算法训练 简单加法(基本型)
    时间限制:1.0s内存限制:512.0MB问题描述首先给出简单加法算式的定义:如果有一个算式(i)+(i+1)+(i+2),(i>=0),在计算的过程中,没有任何一个数位出现了进位,则称其为......
  • 蓝桥杯 ALGO-57算法训练 删除多余括号
    时间限制:1.0s内存限制:512.0MB问题描述从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与......
  • golang的插入排序算法
    1、什么是插入排序?先看一个例子:{7,6,1,9,3}无序数列中,我们约定好无序数列的第一个元素7作为有序数列{7},然后分别对{6,1,9,3}的数与7进行比较移位得到新的有序数列。第一次迭......
  • 【算法】用面向对象的方法求出数组中重复 value的个数,按如下个数输出:
    1出现:1次3出现:2次8出现:3次2出现:4次int[]arr={1,4,1,4,2,5,4,5,8,7,8,77,88,5,4,9,6,2,4,1,5};今天看一个关于基础资料的文档,里面有这么一道算法题。刚开始看了一下,只......
  • 算法记录--好多内容也是借鉴大神的
    1、链表翻转/*publicclassListNode{intval;ListNodenext=null;ListNode(intval){this.val=val;}}*/publicclassSolutio......