13 种高维向量检索算法全解析!数据库顶会 VLDB 2021 论文作者干货分享

article/2025/10/29 10:48:32

编者按: 

以图搜图、商品推荐、社交推荐等社会场景中潜藏了大量非结构化数据,这些数据被工程师们表达为具有隐式语义的高维向量。为了更好应对高维向量检索这一关键问题,杭州电子科技大学计算机专业硕士王梦召等人探索并实现了「效率和精度最优权衡的近邻图索引」,并在数据库顶会 VLDB 2021 上发表成果。

作为连接生产和科研的桥梁,Zilliz 研究团队一直与学界保持交流、洞察领域前沿。此次,王梦召来到 Z 星,从研究动机、算法分析、实验观测和优化讨论等维度展开讲讲最新的科研成果。

以下是他的干货分享,点击这里可获得论文全文 。

高维数据检索:基于近邻图的近似最近邻搜索算法实验综述

导言

向量检索是很多 AI 应用必不可少的基础模块。近年来,学术界和工业界提出了很多优秀的基于近邻图的ANNS 算法以及相关优化,以应对高维向量的检索问题。但是针对这些算法,目前缺乏统一的实验评估和比较分析。

为了优化算法设计、进一步落地工业应用,我们完成了论文《A Comprehensive Survey and Experimental Comparison of Graph-Based Approximate Nearest Neighbor Search》。该论文聚焦实现了效率和精度最优权衡的近邻图索引,综述了 13 种具有代表性相关算法,实验在丰富的真实世界数据集上执行。我们的贡献可总结如下:

  1. 根据图索引的特征,我们将基于近邻图的 ANNS 算法划分为四类,这给理解现存算法提供了一个新的视角。在此基础上,我们阐述了算法间的继承和发展关系,从而梳理出算法的发展脉络;

  2. 我们分解所有算法为 7 个统一的细粒度组件,它们构成一个完整的算法执行流程,从而实现了算法的原子级分析。我们可以公平评估当前工作在某一组件的优化通过控制其它组件一致;

  3. 我们采用多样的数据集(包括 8 个真实世界数据集,它们包括视频、语音、文本和图像生成的高维向量)和指标评估当前算法的全面性能;

  4. 我们提供了不同场景下最优算法推荐、算法优化指导、算法改进示例、研究趋势和挑战的分析讨论。

研究动机

根据以下观测,我们对 13 种基于近邻图的 ANNS 算法进行了比较分析和实验综述:

  • 目前,学术界和工业界提出 10 余种常见的近邻图算法,但对于这些算法的合理分类和比较分析较为缺乏。根据我们的研究,这些算法的索引结构可归结为 4 种基础的图结构,但这些图存在着非常多的问题,如复杂度太高等。所以,在这 4 种图结构基础上有多种优化,如对相对邻域图(RNG)优化就包含 HNSW、DPG、NGT、NSG、SPTAG 等算法。

  • 很多现有的论文从“分子”角度评估基于近邻图的 ANNS 算法(宏观角度)。然而,我们发现,这些算法有一个统一的“化学表达式”,它们还可再向下细分为“原子”(微观角度),从“原子”角度分析可以产生一些新发现,比如很多算法都会用到某一“原子”(HNSW,NSG,KGraph,DPG的路由是相同的)。

  • 除了搜索效率和精度的权衡之外,基于近邻图的 ANNS 算法的其它特征(包含在索引构建和搜索中)也间接影响了最终的搜索性能。在搜索性能逐渐达到瓶颈的情况下,我们对于索引构建效率、内存消耗等指标给予了重视。

  • 一个算法的优越性并不是一成不变的,数据集的特征在其中起着至关重要的作用。比如,在 Msong(语音生成的向量数据集)上NSG 的加速是 HNSW 的 125 倍;然而,在 Crawl(文本生成的向量数据集)上 HNSW 的加速是 NSG 的 80 倍。我们在多样的数据集上执行实验评估,从而对算法形成更全面的认识。

近邻图算法“分子”级分析

在分析基于近邻图的 ANNS 算法之前,首先给大家介绍下 4 个经典的图结构,即:德劳内图(DG)、相对领域图(RNG)、K 近邻图(KNNG)、最小生成树(MST)。如图1所示,这四种图结构的差异主要体现在选边过程,简单总结如下:DG 确保任意 3 个顶点 x, y, z 形成的三角形 xyz 的外接圆内部及圆上不能有除了 x, y, z 之外的其它顶点;RNG 要确保(b)中月牙形区域内不能有其它点,这里的月牙形区域是分别以x和y为圆心,x 与 y 之间的距离为半径的两个圆的交集区域;KNNG 每个顶点连接 K 个最近的邻居;MST 在保证联通性的情况下所有边的长度(对应两个顶点的距离)之和最小。

e8eef6416fe143ff937f5958f0730e6b.png

图1 四种图结构在相同的数据集上的构建结果

接下来,我将基于图1 中的 4 个图结构来梳理 13 个基于近邻图的ANNS算法。为了避免翻译造成了理解偏差,算法名使用英文简称,算法的原论文链接、部分高质量的中文介绍、部分代码请见参考资料。各算法之间更宏观的联系可参考论文中的表2 和图3。

算法1:NSW

NSW 是对 DG 的近似,而 DG 能确保从任意一个顶点出发通过贪婪路由获取精确的结果(即召回率为 1 )。NSW 是一个类似于“交通枢纽”的无向图,这会导致某些顶点的出度激增,从论文的表11 可知,NSW 在某些数据集上的最大出度可达几十万。NSW 通过增量插入式的构建,这确保了全局连通性,论文表4 中可知,NSW的连通分量数均为1。NSW 具有小世界导航性质:在构建早期,形成的边距离较远,像是一条“高速公路”,这将提升搜索的效率;在构建后期,形成的边距离较近,这将确保搜索的精度。

原文:https://www.sciencedirect.com/science/article/abs/pii/S0306437913001300

中文介绍:https://blog.csdn.net/u011233351/article/details/85116719

代码:https://github.com/kakao/n2

算法2:HNSW

HNSW 在 NSW 的基础上有两个优化:“层次化”和“选边策略”。层次化的实现较为直观:不同距离范围的边通过层次呈现,这样可以在搜索时形成类似于跳表结构,效率更高。选边策略的优化原理是:如果要给某个顶点连接 K 个邻居的话,NSW 选择 K 个距离最近的,而 HNSW 从大于 K 个最近的顶点里面选出更离散分布的邻居(见参考资料1)。因此,从选边策略考虑,HNSW 是对 DG 和 RNG 的近似。

原文:https://ieeexplore.ieee.org/abstract/document/8594636

中文介绍:https://blog.csdn.net/u011233351/article/details/85116719

代码:https://github.com/kakao/n2

算法3:FANNG

FANNG 的选边策略与 HNSW 是一样的,都是对RNG近似。FANNG 比 HNSW 更早提出,不过当前 HNSW 得到更普遍的应用,可能的原因是:

(1)FANNG 的选边策略是在暴力构建的近邻图的基础上实现的,构建效率很低;

(2)HNSW 通过增量式构建且引入分层策略,构建和搜索效率都很高;

(3)HNSW 开源了代码,FANNG 则没有。

原文:https://www.cv-foundation.org/openaccess/content_cvpr_2016/html/Harwood_FANNG_Fast_Approximate_CVPR_2016_paper.html

算法4:NGT

NGT 是雅虎日本开源的向量检索库,核心算法基于近邻图索引。NGT 在构建近邻图时类似于 NSW,也是对 DG 的近似,后续有一些度调整优化,其中最有效的路径优化也是对 RNG 的近似(论文的附件B 也给出了证明)。

原文1:https://link.springer.com/chapter/10.1007/978-3-319-46759-7_2

原文2:https://arxiv.org/abs/1810.07355

代码:https://github.com/yahoojapan/NGT

算法5:SPTAG

SPTAG 是微软发布的向量检索库,它的构建过程基于分治策略,即迭代地划分数据集,然后在每个子集上构建近邻图,接着归并子图,最后通过邻域传播策略进一步优化近邻图。上述过程旨在构建一个尽可能精确的 KNNG。在搜索时,SPTAG 采用树索引和图索引交替执行的方案,即先从树上获取距查询较近的点作为在图上搜索的起始点执行路由,当陷入局部最优时继续从树索引上获取入口点,重复上述操作直至满足终止条件。

原文1:https://dl.acm.org/doi/abs/10.1145/2393347.2393378

原文2:https://ieeexplore.ieee.org/abstract/document/6247790

原文3:https://ieeexplore.ieee.org/abstract/document/6549106

中文介绍1:https://blog.csdn.net/whenever5225/article/details/108013045

中文介绍2:https://cloud.tencent.com/developer/article/1429751

代码:https://github.com/microsoft/SPTAG

代码使用:https://blog.csdn.net/qq_40250862/article/details/95000703

算法6:KGraph

KGraph 是对 KNNG 的近似,是一种面向一般度量空间的近邻图构建方案。基于邻居的邻居更可能是邻居的思想,KGraph 能够快速构建一个高精度的 KNNG。后续的很多算法(比如 EFANNA、DPG、NSG、NSSG)都是在该算法的基础上的进一步优化。

原文:https://dl.acm.org/doi/abs/10.1145/1963405.1963487

中文介绍:https://blog.csdn.net/whenever5225/article/details/105598694

代码:https://github.com/aaalgo/kgraph

算法7:EFANNA

EFANNA 是基于 KGraph 的优化。两者的差别主要体现在近邻图的初始化:KGraph 是随机初始化一个近邻图,而 EFANNA 是通过 KD 树初始化一个更精确的近邻图。此外,在搜索时,EFANNA 通过 KD 树获取入口点,而 KGraph 随机获取入口点。

原文:https://arxiv.org/abs/1609.07228

中文介绍:https://blog.csdn.net/whenever5225/article/details/104527500

代码:https://github.com/ZJULearning/ssg

算法8:IEH

类比 EFANNA,IEH 暴力构建了一个精确的近邻图。在搜索时,它通过哈希表获取入口点。

原文:https://ieeexplore.ieee.org/abstract/document/6734715/

算法9:DPG

在 KGraph 的基础上,DPG 考虑顶点的邻居分布多样性,避免彼此之间非常接近的邻居重复与目标顶点连边,最大化邻居之间的夹角,论文的附件4 证明了 DPG 的选边策略也是对 RNG 的近似。此外,DPG 最终添加了反向边,是无向图,因此它的最大出度也是非常高的(见论文附件表11)。

原文:https://ieeexplore.ieee.org/abstract/document/8681160

中文介绍:https://blog.csdn.net/whenever5225/article/details/106176175

代码:https://github.com/DBW

算法10:NSG

NSG 的设计思路与 DPG 几乎是一样的。在 KGraph 的基础上,NSG 通过 MRNG 的选边策略考虑邻居分布的均匀性。NSG 的论文中将 MRNG 的选边策略与 HNSW 的选边策略做了对比,例证了 MRNG 的优越性。论文中的附件1 证明了NSG的这种选边策略与 HNSW 选边策略的等价性。NSG 的入口点是固定的,是与全局质心最近的顶点。此外,NSG 通过 DFS 的方式强制从入口点至其它所有点都是可达的。

原文:http://www.vldb.org/pvldb/vol12/p461-fu.pdf

中文介绍:https://zhuanlan.zhihu.com/p/50143204

代码:https://github.com/ZJULearning/nsg

算法11:NSSG

NSSG 的设计思路与 NSG、DPG 几乎是一样的。在 KGraph 的基础上,NSSG 通过 SSG 选边策略考虑邻居分布的多样性。NSSG 认为,NSG 过度裁边了(见论文表4),相比之下 SSG 的裁边要松弛一些。NSG 与 NSSG 另一个重要的差异是,NSG 通过贪婪路由获取候选邻居,而 NSSG 通过邻居的一阶扩展获取候选邻居,因此,NSSG 的构建效率更高。

原文:https://ieeexplore.ieee.org/abstract/document/9383170

中文介绍:https://zhuanlan.zhihu.com/p/100716181

代码:https://github.com/ZJULearning/ssg

算法12:Vamana

简单来说,Vamana 是 KGraph、HNSW 和 NSG 三者的结合优化。在选边策略上,Vamana 在 HNSW (或 NSG)的基础上增加了一个调节参数,选边策略为 HNSW 的启发式选边,取不同的值执行了两遍选边。

原文:http://harsha-simhadri.org/pubs/DiskANN19.pdf

中文介绍:https://blog.csdn.net/whenever5225/article/details/106863674

算法13:HCNNG

HCNNG 是目前为止唯一一个以 MST 为基本构图策略的向量检索算法。类似SPTAG,HCNNG 的构建过程基于分治策略,在搜索时通过 KD 树获取入口点。

原文:https://www.sciencedirect.com/science/article/abs/pii/S0031320319302730

中文介绍:https://whenever5225.github.io/2019/08/17/HCNNG/

近邻图算法“原子”级分析

我们发现所有的基于近邻图的 ANNS 算法都遵循统一的处理流程框架,该流程里面有多个公共模块(如图2 的 C1->C7)。当一个近邻图算法按照该流程被解构后,我们可以很容易了解该算法是如何设计组装的,这将给后续近邻图向量检索算法的设计带来很大的便利性。此外,我们也可固定其它模块,保持其他模块完全相同,从而更公平地评估不同算法在某一模块实现上的性能差异。

d8d032f227b437b484a934312868cd52.png

图2 近邻图向量检索算法遵循的统一流程框架图

接下来,我们以 HNSW 和 NSG 为例,说明如何实现图2 的流程框架分析算法。在此之前,我们要先熟悉这两个算法的索引构建和搜索过程。

首先是 HNSW 分解,HNSW 的构建策略是增量式的。因此,每插入一个数据点都要执行一遍 C1->C3 过程。

HNSW 分解流程:

模块

HNSW 具体实现

C1

生成新插入点所处的最大层;获取搜索入口点

C2

新插入点作为查询点,从入口点开始,贪婪搜索,返回新插入点一定量最近邻作为邻居候选

C3

启发式选边策略

C4

无额外步骤,最高层中的顶点作为入口

C5

无额外步骤,增量式构建已隐式确保连通性(启发式选边有一定程度破坏连通性)

C6

最高层的顶点作为入口

C7

最佳优先搜索

NSG 分解流程:

模块

NSG 具体实现

C1

NN-Descent 初始化近邻图

C2

顶点作为查询,贪婪搜索获取邻居候选

C3

MRNG 选边策略

C4

全局质心作为查询,贪婪搜索获取最近顶点作为入口

C5

从入口开始,DFS 确保连通性

C6

C4 获取的入口

C7

最佳优先搜索

由于 HNSW 的 C3 与 NSG 的 C3 是等价的,因此,从上面两个表格可知,HNSW 与 NSG 这两个算法差别并不大。其实,论文涉及到的 13 种算法中很多算法之间都是很相似的,详见论文第 4 章。

实验观测和讨论

具体的实验评估请参考论文第 5 章,接下来将概括介绍一下实验的观测结果和讨论:

不同场景下的算法推荐

NSG 和 NSSG 普遍有最小的索引构建时间和索引尺寸,因此,它们适用于有大量数据频繁更新的场景;如果我们想要快速构建一个精确的 KNNG(不仅用于向量检索),KGraph、EFANNA 和 DPG 更适合;DPG 和 HCNNG 有最小的平均搜索路径长度,因此,它们适合需要 I/O 的场景;对于 LID 值高的较难数据集,HNSW、NSG、HCNNG 比较适合;对于 LID 值低的简单数据集,DPG、NSG、HCNNG 和 NSSG 较为适合;NGT 有更小的候选集尺寸,因此适用于 GPU 加速(考虑到 GPU 的内存限制);当对内存消耗要求较高时,NSG 和 NSSG 适合,因为它们内存占用更小。

算法设计向导

一个实用的近邻图向量检索算法一般满足以下四个方面:

  1. 高构建效率

  2. 高路由效率

  3. 高搜索精度

  4. 低内存负载

针对第一方面,我们不要在提升近邻图索引质量(即一个顶点的邻居中真实的最近邻居所占的比例)上花费太多的时间。因为最好的图质量(可通过图中与距它最近的顶点有边相连的顶点所占比例度量)不一定实现最佳搜索性能(结合论文中表4 和图7、8)。

针对第二方面,我们应当控制适当的平均出度,多样化邻居的分布,减少获取入口点的花费,优化路由策略,从而减少收敛到查询点的邻域所需的距离计算次数。

针对第三方面,我们应当合理设计邻居的分布,确保连通性,从而提升对陷入局部最优的"抵抗力"。

针对第四方面,我们应当优化邻居选择策略和路由策略,从而减小出度和候选集尺寸。

优化算法示例

基于上面的向导,我们组装了一个新的近邻图算法(图3 中的 OA),该算法在图2 中的 7 个组件中每个组件选中现存算法的一个具体实现,即 C1 采用 KGraph 算法的实现;C2 采用 NSSG 算法的实现;C3 采用 NSG 算法的实现;C4 采用 DPG 算法的实现;C5 采用 NSSG 算法的实现;C6 采用 DPG 算法的实现;C7 采用 HCNNG 和 NSW 算法的实现。

OA 算法实现了当前最优的综合性能,详见论文原文。因此,我们甚至不用优化当前算法,仅仅把现存算法的不同部分组装起来就可以形成一个新算法。

d76165220a7acf6ef6f100e69d78eb43.png

图3  OA 算法与当前最优的近邻图算法的搜索性能对比

趋势与挑战

基于 RNG 的选边策略设计在当前近邻图向量检索算法的效率提升中起到了关键作用。在论文的评估中,唯一一个基于 MST 的算法 HCNNG 也表现出来很好的综合性能。

在上述纯近邻图算法基础上,后续发展有三个主要方向:

  1. 硬件优化;

  2. 机器学习优化;

  3. 更高级的查询需求,比如结构化和非结构化混合查询。

我们未来面对这三个挑战:

  1. 数据编码技术与图索引如何有机结合以解决近邻图向量检索算法高内存消耗问题;

  2. 硬件加速近邻图索引构建减少近邻图索引构建时间;

  3. 根据不同场景的特征自适应选择最优的近邻图算法。

参考资料

https://blog.csdn.net/whenever5225/article/details/106061653?spm=1001.2014.3001.5501

✏️ 关于作者:

王梦召,杭州电子科技大学计算机专业硕士。主要关注基于近邻图的向量相似性检索、多模态检索等研究内容,并在相关方向申请发明专利三项,在数据库顶会 VLDB 和 SCI 一区 top 期刊 KBS 等发表论文两篇。

日常爱好弹吉他、打乒乓球、跑步、看书,他的个人网站是 http://mzwang.top,Github主页是 http://github.com/whenever5225

●  ●  ●  

Arch Meetup 深圳站开始报名啦,点击查看活动议程! 

4ef7a6db744b49b65927f8a92f988c6f.png

ed829a6abdeeb103cabf40d65e32a679.png

GitHub @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet

Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。

Zilliz 构建了 Milvus 向量数据库,以加快下一代数据平台的发展。Milvus 数据库是 LF AI & Data 基金会的毕业项目,能够管理大量非结构化数据集,在新药发现、推荐系统、聊天机器人等方面具有广泛的应用。


http://chatgpt.dhexx.cn/article/mMA7R80y.shtml

相关文章

Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)

Deep Upsupervised Cardinality Estimation 解读(2019 VLDB) Deep Upsupervised Cardinality Estimation选择度(基数)估计问题定义选择度和数据联合分布的关系深度自回归模型如何计算joint distribution编码解码策略具体执行属性的…

VLDB 2021 COCO 论文阅读

Epoch-based Commit and Replication in Distributed OLTP Databases 记录一篇之前读过的论文。。。 整篇论文的核心在于Epoch,将传统数据库以事务为粒度提交和恢复变成了以Epoch为粒度来提交和恢复,这样做的好处就是可以减少2PC和同步复制的时间开销。…

【区块链论文整理】VLDB篇

VLDB (Very Large Data Base)是数据库三大顶会之一,近几年也发表了不少水平很高的文章。本文主要针对VLDB 会议中区块链相关的论文进行简单整理。 2021 SlimChain: Scaling Blockchain Transactions through Off-Chain Storage and Parallel Processing…

入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?

阿里云操作系统团队、阿里云数据库团队以及上海交通大学新兴并行计算研究中心一起合作的论文 “Async-fork: Mitigating Query Latency Spikes Incurred by the Fork-based Snapshot Mechanism from the OS Level” 被数据库系统领域顶会 Very Large Data Bases Conferences (V…

VLDB 2023 | 基于擦除的浮点无损压缩(附论文和源码)

大量浮点时间序列数据正以前所未有的高速率生成。一种高效、紧凑、无损的时间序列数据压缩方法对海量数据的应用场景至关重要。现有的大多数浮点无损压缩方法是基于异或操作,但它们没有充分利用尾随零,这通常会导致压缩率不尽如人意。本次为大家带来重庆…

运算符—逻辑运算符

目录 5.逻辑运算符 5.1逻辑运算符概述 5.2短路逻辑运算符 5.逻辑运算符 (学完之后要求能够使用逻辑运算符完成逻辑运算) 5.1逻辑运算符概述 在数学中,一个数据x,大于3,小于6,我们可以写为这样来表示&am…

C语言关系运算和逻辑运算

一、关系运算 1.关系运算符 每个关系运算符对它左侧值和右侧值进行比较大小的运算 2.关系表达式 用关系运算符连接起来的式子。 若关系为真,关系表达式的值为1; 若关系为假,关系表达式的值为0; 3.优先级 关系运算符优先级低于算术…

C语言复习--逻辑运算符|| 和,!

&& 只有两个条件都为真时,才为真。||只要一个为真,就为真。 逻辑运算符很重要的法则是短路法则。 逻辑运算符的运算顺序都是从左到右计算。 && 当左侧条件为假时,就不计算右侧。 || 都左侧条件为真时,就不计…

C语言:关系运算符逻辑运算符

本节的所讲解的符号,大家在生活中应该都有用过,像我们去商场买东西,都会比较一下价格,是不是相等啊,哪家的贵,哪家的便宜啊。 在C语言中程序中也存在这样的比较,这个时候就需要用到关系运算符了…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C 语言 逻辑运算符

文章目录 介绍逻辑运算符一览案例演示 介绍 用于连接多个条件&#xff08;一般来讲就是关系表达式&#xff09;&#xff0c;最终的结果要么是真(非 0 表示)&#xff0c;要么是 假(0 表示) 。 逻辑运算符一览 下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 的值为 1&am…

☀️光天化日学C语言☀️(11)- 逻辑运算符 | 我是一个有逻辑的人

&#x1f649;饭不食&#xff0c;水不饮&#xff0c;题必须刷&#x1f649; C语言免费动漫教程&#xff0c;和我一起打卡&#xff01; &#x1f31e;《光天化日学C语言》&#x1f31e; LeetCode 太难&#xff1f;先看简单题&#xff01; &#x1f9e1;《C语言入门100例》&#…

C语言逻辑运算符介绍和示例

文章目录 1、逻辑运算符介绍2、逻辑表达式的书写3、不得不说的逻辑非4、获取视频教程5、版权声明 1、逻辑运算符介绍 在日常生活中&#xff0c;要做出某个决定&#xff0c;需要判断的条件往往不止一个&#xff0c;需要判断多个条件&#xff0c;例如超女选秀&#xff0c;参与选…

C语言按位逻辑运算符总结-与、或、非、异或

点击上方蓝字关注我&#xff0c;了解更多咨询 C中有按位逻辑运算符&#xff1a;按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型&#xff0c;包括char类型。按位操作针对每一个位进行操作&#xff0c;不影响左右两边的位。4个运算符的作用总结如下&#xff1a; 一…

C语言逻辑运算符和||,一篇文章带你读懂逻辑表达式!

目录 逻辑运算符有哪些&#xff1f; 逻辑运算符的短路特性 逻辑运算符在表达式求值中的问题 逻辑运算符&&、||混合的不同情况 逻辑运算符有哪些&#xff1f; C 语言提供了以下三种逻辑运算符。 一元&#xff1a;&#xff01;&#xff08;逻辑非&#xff09;。 二…

勒让德符号判断二次剩余-C语言

近日备考学习二次剩余理论&#xff0c;其中了解到勒让德符号这个相比欧拉定理更加方便判断一个正整数在一个模数下是否为二次剩余&#xff1b; 基于勒让德符号理论的学习&#xff0c;本文旨在通过程序来实现基于勒让德符号的二次剩余判断方法&#xff1b; 本文着重点在于运算…

二次剩余入门

昨天训练的时候遇到一道题怎么也不会做&#xff0c;在网上搜了题解之后第一次听说了二次剩余&#xff0c;看了一天各种dalao的博客&#xff0c;在这里总结一下自己所理解的二次剩余及其用法。 1&#xff0c;什么是二次剩余&#xff1f; 2&#xff0c;二次剩余有什么用&#xff…

平方剩余(二次剩余)

平方剩余&#xff1a; 设p是奇素数(即大于2的素数)&#xff0c;如果二次同余式 有解&#xff0c;则a称为模p的平方剩余&#xff0c;否则a称为模p的平方非剩余(二次非剩余)(之所以规定p是大于2的素数&#xff0c;是因为p 2时解上面的二次同余式非常容易。 求出p 5&#xff…

二次剩余--欧拉准则

在 数论中&#xff0c; 二次剩余的 欧拉判别法&#xff08;又称 欧拉准则&#xff09;是用来判定给定的 整数是否是一个 质数的 二次剩余。 目录 1 叙述2 举例 2.1 例子一&#xff1a;对于给定数&#xff0c;寻找其为二次剩余的模数2.2 例子二&#xff1a;对指定的质数p…

二次剩余问题x的求解及代码实现(python)

一、问题引入 二次剩余是数论基本概念之一。它是初等数论中非常重要的结果&#xff0c;不仅可用来判断二次同余式是否有解&#xff0c;还有很多用途。C.F.高斯称它为算术中的宝石&#xff0c;他一人先后给出多个证明。 [1] 研究二次剩余的理论称为二次剩余理论。二次剩余理论…