Algorithm
文章平均质量分 64
d3y1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法006:广度优先搜索(Breadth-First Search, BFS)
广度优先搜索是图论中最基础和最重要的算法之一。它通过逐层扩展的方式遍历图,保证在无权图中找到最短路径。BFS的简单性和可预测性使其成为许多图算法的基础。从社交网络分析到网页爬虫,从迷宫寻路到人工智能的状态空间搜索,BFS的身影无处不在。虽然BFS在某些场景下可能不如其他算法高效,但其保证最优性和简单实现使其成为计算机科学教育中的经典算法。BFS的思想不仅限于图遍历,还广泛应用于各种需要逐层处理的算法设计中。其队列数据结构的使用也为许多其他算法提供了灵感。原创 2026-09-14 12:15:46 · 288 阅读 · 0 评论 -
算法005:A*搜索
A*算法是路径搜索领域中最重要和最广泛使用的算法之一。它通过结合Dijkstra算法的保证最优性和贪心算法的效率,在保证找到最短路径的同时,显著提高了搜索效率。A算法的核心优势在于其灵活的启发式函数设计,可以根据不同的应用场景选择合适的启发式方法。从游戏AI到机器人导航,从GPS系统到网络路由,A算法的身影无处不在。随着技术的发展,A算法也衍生出了许多变体和优化版本,如Theta算法、分层A算法等,这些算法在特定场景下能够提供更好的性能。A算法的成功不仅在于其解决问题的能力,更在于它所体现的启发式搜索思原创 2026-08-31 22:08:15 · 605 阅读 · 0 评论 -
算法004:Dijkstra
Dijkstra算法是图论中最基础和最重要的算法之一,它在解决最短路径问题上具有里程碑式的意义。虽然算法本身不能处理负权重边,但其高效性和准确性使其成为无数实际应用的核心组件。从GPS导航到网络路由,从游戏AI到社交网络分析,Dijkstra算法的身影无处不在。随着技术的发展,Dijkstra算法也衍生出了许多变体和优化版本,如A*算法、双向Dijkstra算法等,这些算法在特定场景下能够提供更好的性能。Dijkstra算法的成功不仅在于其解决问题的能力,更在于它所体现的贪心策略和最优子结构思想,这些思原创 2026-08-31 21:56:28 · 676 阅读 · 0 评论 -
算法003:二分查找
二分查找是计算机科学中最基础和最重要的算法之一,以其高效的查找能力和简单的实现而闻名。虽然它要求数据必须有序,但在许多实际应用中,数据可以预先排序或通过其他数据结构(如哈希表)来支持快速查找。二分查找的思想不仅限于查找操作,还广泛应用于各种算法设计中,如二叉搜索树、快速排序等。其分治的思想和高效的性能使其成为计算机科学教育中的经典算法。原创 2026-08-30 16:19:52 · 393 阅读 · 0 评论 -
算法002:归并排序
归并排序是一种采用分治策略的高效排序算法,由John von Neumann于1945年提出。其核心思想是将数组递归分成两半,分别排序后再合并。该算法具有稳定的O(n log n)时间复杂度,适用于各种数据情况,但需要O(n)额外空间。文章详细介绍了算法步骤、数学分析(包括主定理证明时间复杂度)、Python和C++实现代码,以及自底向上和三路归并等优化变体。归并排序因其稳定性和可靠性能成为经典排序算法之一,特别适合链表排序和大规模数据场景。原创 2026-08-24 20:49:27 · 331 阅读 · 0 评论 -
算法001:快速排序
快速排序是一种高效的基于分治策略的排序算法,由Tony Hoare于1959年提出。其核心思想是通过选择基准元素将数组分为小于和大于基准的两个子数组,并递归排序。算法平均时间复杂度为O(n log n),最坏情况为O(n²)。文章详细介绍了快速排序的数学基础、Python和C++实现,以及多种优化变体(随机化、三路分区、三数取中等),分析了其优缺点和应用场景。快速排序在通用排序、数据库系统等领域有广泛应用,具有平均性能快、可原地排序等优点,但存在最坏情况性能差和不稳定的缺点。原创 2026-08-23 23:33:19 · 225 阅读 · 0 评论 -
最优路径-A*算法(A-Star)
A* 算法(A-Star Algorithm)是由Peter Hart、Nils Nilsson和Bertram Raphael于1968年提出的一种启发式搜索算法,用于在状态空间中寻找从起始状态到目标状态的最优路径。A* 算法结合了广度优先搜索的完备性和启发式搜索的效率,在路径规划、游戏AI等领域有广泛应用。原创 2026-05-12 22:54:49 · 887 阅读 · 0 评论 -
最短路径-Floyd-Warshall算法(弗洛伊德算法)
Floyd-Warshall算法是由Robert Floyd和Stephen Warshall于1962年提出的一种用于计算图中所有顶点对之间最短路径的经典动态规划算法。该算法能够处理带权有向图或无向图,可以包含负权边但不能包含负权环。原创 2026-05-11 16:31:50 · 930 阅读 · 0 评论 -
二值统计-Cuckoo Filter布谷鸟过滤器
布谷鸟过滤器(Cuckoo Filter)是布隆过滤器的增强版本,由Fan等人于2014年提出。它解决了布隆过滤器不能删除数据的缺陷,同时保持了较高的空间效率和查询速度。布谷鸟过滤器得名于布谷鸟的巢穴寄生行为,通过"驱逐"机制来处理哈希冲突。原创 2026-05-11 16:16:33 · 737 阅读 · 0 评论 -
二值统计-Bloom Filter布隆过滤器
布隆过滤器作为一种高效的概率型数据结构,具有以下优势:空间效率高:比传统数据结构节省大量空间查询速度快:时间复杂度为O(k)实现简单:易于理解和实现适用性广:适用于各种大规模存在性检查场景布隆过滤器特别适合以下场景:需要快速判断元素是否存在可以接受一定误判率不需要删除操作内存空间有限通过合理选择位数组大小和hash函数数量,可以在空间效率和时间效率之间取得良好的平衡,是处理大规模数据存在性查询的理想选择。原创 2026-05-10 11:48:27 · 568 阅读 · 0 评论 -
二值统计-BitMap位图
位图作为一种高效的二值统计数据结构,具有以下优势:内存效率高:每个元素只需要1位存储空间操作速度快:通过位操作实现,时间复杂度低实现简单:易于理解和实现适用性广:适用于各种大规模二值状态统计场景位图特别适合以下场景:需要大量二值状态存储内存受限环境需要快速状态查询用户行为分析设备状态监控签到系统等通过合理使用位图,可以在保证性能的同时大幅节省内存空间,是处理大规模二值数据的理想选择。原创 2026-05-10 11:46:10 · 486 阅读 · 0 评论 -
聚合统计-原理和应用场景
聚合统计是数据分析中的核心技术,通过合理选择数据结构和聚合方法,可以实现高效的统计功能:唯一值统计:使用Set数据结构排行榜和范围统计:使用Sorted Set数据结构对象属性统计:使用Hash数据结构简单计数:使用String数据结构不同的应用场景需要选择不同的数据结构和聚合方法,根据具体的需求和数据特点来选择最合适的实现方案。Redis提供了丰富的数据结构和命令,为各种聚合统计需求提供了高效的解决方案。原创 2026-05-09 19:31:35 · 608 阅读 · 0 评论 -
排序统计-原理和应用场景
排序统计是数据处理中的基础且重要的技术,根据不同的需求选择合适的实现方式:静态数据排序:使用快速排序、归并排序等传统排序算法动态数据排序:使用有序集合数据结构实时排序需求:选择支持动态更新的数据结构范围查询需求:选择支持高效范围查询的数据结构内存受限环境:选择空间复杂度较低的算法不同的排序统计方法各有优劣,需要根据具体的应用场景、数据规模和性能要求来选择最合适的实现方案。原创 2026-05-09 19:21:45 · 501 阅读 · 0 评论 -
二值统计-原理和应用场景
二值统计通常涉及到将数据分为两个类别或状态,比如成功与失败、是与非等,并对这些类别进行计数和分析。这种统计方法在处理二分类问题时非常常见,比如在质量控制、用户行为分析等领域。原创 2026-05-08 18:50:39 · 617 阅读 · 0 评论 -
基数统计-原理和应用场景
基数(Cardinality)是指一个集合中不同元素的数量,或者说统计一个集合中不重复元素的个数。简单来说:基数(Cardinality)就是去除重复后的数的个数例如,对于一个包含重复元素的集合{1, 2, 2, 3, 4, 4, 4},其基数为4,即不同元素的个数。在Redis中,HashSet / HyperLogLog数据结构都能提供高效的基数统计,而HyperLogLog算法可以在不保存原始数据的情况下快速计算出一个集合的基数。原创 2026-05-08 18:44:09 · 599 阅读 · 0 评论 -
最短路径-Dial算法(桶优化Dijkstra)
Dial算法是Robert B. Dial于1969年提出的一种用于优化Dijkstra算法的桶排序方法。该算法特别适用于边权值范围有限的图,通过使用桶排序的思想来避免优先队列的复杂操作,从而提高算法效率。原创 2026-05-02 10:50:02 · 657 阅读 · 0 评论 -
最短路径-Dijkstra算法(迪杰斯特拉算法)
Dijkstra算法是由荷兰计算机科学家Edsger W. Dijkstra于1956年提出的一种用于寻找图中单源最短路径的经典算法。该算法适用于所有边权值为非负数的图,能够高效地计算出从指定源点到图中所有其他点的最短路径。原创 2026-05-02 10:48:20 · 957 阅读 · 0 评论 -
加法量化(Additive Quantization, AQ)压缩算法
加法量化(Additive Quantization, AQ)是一种先进的向量量化技术,它将高维向量表示为多个码本中码字的加权和。与残差向量量化(RVQ)不同,AQ 允许从每个码本中选择一个码字,然后将所有选中的码字相加来近似原始向量。这种分解方式提供了更大的灵活性,能够在相同的码率下实现更高的近似精度。AQ 在大规模相似性搜索、推荐系统和深度学习模型压缩等领域有着重要应用。原创 2026-05-01 13:54:37 · 672 阅读 · 0 评论 -
残差向量量化(Residual Vector Quantization, RVQ)压缩算法
残差向量量化(Residual Vector Quantization, RVQ)是一种多级量化技术,通过迭代地量化向量的残差部分来逐步逼近原始向量。与传统的单级量化不同,RVQ 使用多个码本(codebook)来表示向量,每个码本负责量化当前阶段的残差向量。这种方法能够在保持较高精度的同时实现较高的压缩率,特别适用于高维向量量化和深度学习模型压缩。原创 2026-05-01 13:46:39 · 860 阅读 · 0 评论 -
标量量化(Scalar Quantization, SQ)压缩算法
标量量化(Scalar Quantization, SQ)是一种基础的量化技术,它将连续的浮点数值映射到离散的有限集合中。与二进制量化不同,标量量化保留了更多的数值信息,通过调整量化位数可以在精度和压缩率之间取得平衡。这种方法广泛应用于深度学习模型压缩、信号处理和数据分析等领域。原创 2026-04-30 11:34:14 · 775 阅读 · 0 评论 -
二进制量化(Binary Quantization, BQ)压缩算法
二进制量化(Binary Quantization, BQ)是一种高效的向量量化技术,它将高维浮点向量转换为二进制表示,从而大幅减少存储空间和计算复杂度。这种量化方法特别适用于大规模向量相似性搜索和近似最近邻(ANN)应用场景。原创 2026-04-30 11:15:46 · 477 阅读 · 0 评论 -
乘积量化 (Product Quantization) 压缩算法
乘积量化(Product Quantization, PQ)是一种高效的向量压缩技术,最初由Jegou等人于2011年提出。该算法将高维向量空间分解为多个低维子空间,每个子空间独立进行量化,从而在保持较高精度的同时大幅减少存储空间和计算开销。PQ广泛应用于向量压缩、近似最近邻搜索等领域。原创 2026-04-29 23:23:12 · 700 阅读 · 0 评论 -
IVFFlat(Inverted File with Flat Storage)索引算法
IVFFlat(Inverted File with Flat Storage)是IVF算法的一个变种,它在IVF的基础上保持了原始向量的精确存储。与IVFADC(使用量化压缩)不同,IVFFlat在每个聚类中完整存储原始向量,因此在查询时能够提供与FLAT算法相同的精确距离计算。这使得IVFFlat在需要高精度的场景下特别有价值。基本原理IVFFlat结合了IVF的空间划分优势和FLAT的精确计算能力:IVF聚类:使用K-means等算法将向量空间划分为多个聚类精确存储:在每个聚类中完整存储原始向原创 2026-04-27 10:33:10 · 631 阅读 · 0 评论 -
SCANN (Sparse Clustered Approximate Nearest Neighbor) 索引算法
SCANN(Sparse Clustered Approximate Nearest Neighbor)是由Google Research于2021年提出的一种高性能向量索引算法。该算法通过结合聚类和稀疏表示技术,实现了在保持较高搜索精度的同时,大幅降低计算和存储开销。SCANN特别适合大规模高维向量数据的近似最近邻搜索,在Google的相似图片搜索等场景中得到了广泛应用。基本原理SCANN的核心思想是两阶段稀疏搜索:聚类阶段:使用K-means将向量空间划分为多个聚类稀疏编码阶段:为每个向量生成稀原创 2026-04-27 10:31:04 · 652 阅读 · 0 评论 -
DiskANN(Disk-based Approximate Nearest Neighbor)索引算法
DiskANN(Disk-based Approximate Nearest Neighbor)是一种专门为磁盘存储环境设计的向量索引算法,由Microsoft Research于2020年提出。该算法通过结合内存中的图结构和磁盘上的量化技术,实现了在大规模向量数据集上的高效检索,特别适合内存受限但磁盘空间充足的应用场景。DiskANN在保持较高搜索精度的同时,显著降低了对内存的需求。基本原理DiskANN的核心思想是分层存储和量化压缩:分层架构:将索引分为内存中的图结构和磁盘上的量化数据量化压缩:原创 2026-04-26 10:35:57 · 975 阅读 · 0 评论 -
ANNOY (Approximate Nearest Neighbors Oh Yeah) 索引算法
ANNOY (Approximate Nearest Neighbors Oh Yeah) 是由Spotify开发的一种基于随机投影的近似最近邻搜索算法。该算法通过构建二叉树结构,将高维向量空间递归划分为子空间,从而实现高效的近似搜索。ANNOY以其简洁的实现和良好的性能特点,在音乐推荐和相似性搜索等领域得到了广泛应用。基本原理ANNOY的核心思想是随机投影和二叉树划分:随机投影:使用随机超平面将向量空间划分为两部分二叉树构建:递归地将向量空间划分为子空间,构建二叉树索引多森林构建:构建多个树森林原创 2026-04-26 10:33:24 · 678 阅读 · 0 评论 -
FLAT 索引算法
FLAT(Brute Force)是最简单直接的向量相似性搜索算法。它不使用任何索引结构,而是通过线性扫描整个向量数据库来查找与查询向量最相似的向量。尽管其时间复杂度较高,但FLAT算法提供了100%的准确性,因此常作为其他近似算法的基准。基本原理FLAT算法的核心思想非常简单:存储所有原始向量对于每个查询向量,计算其与数据库中所有向量的距离返回距离最小的前k个向量原创 2026-04-25 14:02:31 · 670 阅读 · 0 评论 -
IVF (Inverted File) 索引算法
IVF(Inverted File)是一种基于聚类思想的向量索引算法,也称为倒排索引。该算法将向量空间划分为多个聚类(或称为"倒排文件"),每个聚类包含在特征空间中相近的向量。查询时,算法首先将查询向量分配到最相关的几个聚类中,然后只在这些聚类内部进行搜索,从而大幅减少搜索空间。基本原理IVF算法的核心思想是"分而治之":空间划分:将向量空间划分为多个不相交的子空间(聚类)聚类分配:将每个向量分配到距离最近的聚类中心查询优化:查询时只搜索最相关的几个聚类这种策略通过牺牲一定的准确性来换取查询性能原创 2026-04-24 20:39:03 · 617 阅读 · 0 评论 -
LSH(Local Sensitive Hashing)索引算法
局部敏感哈希(Local Sensitive Hashing, LSH)是一种基于概率的近似最近邻搜索算法,由Piotr Indyk和Rajeev Motwani于1998年提出。该算法的核心思想是:相似的向量在哈希后落入同一个桶的概率高于不相似的向量。LSH以其常数时间的查询复杂度成为处理超大规模向量数据的重要技术之一。基本原理LSH基于一个关键性质:相似向量在哈希函数作用下碰撞的概率高于不相似向量。具体来说:哈希函数族:定义一组哈希函数,使得相似向量更容易哈希到相同值桶结构:使用哈希桶存储向量,原创 2026-04-24 20:36:44 · 701 阅读 · 0 评论 -
HNSW (Hierarchical Navigable Small World Graphs) 索引算法
HNSW(Hierarchical Navigable Small World Graphs)是一种高效的近似最近邻搜索算法,由Yury Malkov等人于2018年提出。该算法结合了分层结构和导航小世界图的特性,在保持较高搜索精度的同时,实现了亚线性的查询时间复杂度。HNSW已成为向量数据库领域最流行的高性能索引算法之一。基本原理HNSW算法基于两个核心思想:分层结构:构建多个层次的图结构,高层图连接稀疏,低层图连接密集导航小世界特性:利用"六度分离"理论,通过少量跳跃即可到达目标节点原创 2026-04-23 16:54:34 · 1182 阅读 · 0 评论 -
六度分离理论及其在HNSW索引算法中的应用
六度分离理论(Six Degrees of Separation)是一个著名的社会学理论,指出在社交网络中,任何两个人之间的平均连接距离不会超过六个中间人。换句话说,通过最多六步连接,你可以到达世界上几乎任何其他人。核心概念连接度:网络中节点之间的连接关系路径长度:从一个节点到另一个节点所需的最少连接数平均路径长度:网络中所有节点对之间路径长度的平均值聚类系数:衡量网络中节点聚集程度的指标原创 2026-04-23 16:47:29 · 607 阅读 · 0 评论 -
Milvus 索引类型详细介绍
Milvus 是一个高性能的向量数据库,支持多种索引类型来优化向量检索性能。不同的索引类型适用于不同的应用场景,在查询速度、精度和资源消耗之间提供不同的权衡。本文档详细介绍 Milvus 中的主要索引类型及其适用场景。在实际应用中,建议先使用小规模数据进行测试,比较不同索引类型的性能表现,然后根据实际需求选择最适合的索引类型。同时,合理的参数调优可以显著提升索引性能,达到最佳的使用效果。原创 2026-04-04 11:02:52 · 639 阅读 · 0 评论 -
Elasticsearch-05-四种搜索方案
Elasticsearch提供了四种核心搜索方案,每种方案都有其独特的优势和适用场景:纯BM25:适用于精确关键词搜索,简单高效纯KNN:适用于语义相似搜索,理解能力强混合搜索:适用于综合搜索需求,鲁棒性强优化KNN:适用于大规模实时搜索,性能优秀理解各种方案的特性和限制,根据具体业务需求选择合适的搜索方案,能够显著提升搜索质量和用户体验。在实际应用中,往往需要结合多种方案,通过RRF融合等技术,构建智能、高效的搜索系统。原创 2026-03-26 13:43:01 · 475 阅读 · 0 评论 -
Elasticsearch-04-RRF融合算法
RRF算法通过排名融合的方式,有效地结合了多个独立搜索结果,提供了更全面和鲁棒的搜索体验。其核心优势在于:排名导向:关注文档在各个列表中的位置平滑处理:避免单个搜索结果的过度影响灵活性:支持加权融合和多种配置在Elasticsearch中,RRF是实现混合搜索和多模态搜索的关键技术,能够显著提升搜索质量和用户体验。理解RRF的原理和实现,有助于构建更智能的搜索系统。原创 2026-03-26 13:34:46 · 768 阅读 · 0 评论 -
Elasticsearch-03-kNN算法
Elasticsearch的kNN实现提供了灵活的选择:暴力搜索:适用于小规模数据集和高精度需求近似搜索:适用于大规模数据集和实时搜索需求理解两种算法的特性和限制,可以帮助根据具体应用场景选择合适的kNN实现,平衡搜索精度和性能。HNSW索引的引入使得Elasticsearch能够处理大规模向量搜索,为现代AI应用提供了强大的支持。原创 2026-03-26 13:28:35 · 425 阅读 · 0 评论 -
Elasticsearch-02-向量相似度算法
Elasticsearch支持多种向量相似度算法,用于处理稠密向量搜索。本文档将详细介绍三种核心算法:余弦相似度(cosine)、欧氏距离(l2_norm)和点积(dot_product),以及它们的选择策略。原创 2026-03-26 13:22:10 · 428 阅读 · 0 评论 -
Elasticsearch-01-文本检索算法
Elasticsearch作为强大的搜索和分析引擎,提供了多种文本检索算法来满足不同的搜索需求。本文档将详细介绍两种核心的文本检索算法:TF-IDF和BM25。BM25算法通过改进TF-IDF,提供了更好的文本检索性能,特别是在处理不同长度文档和抑制高频词方面。Elasticsearch默认使用BM25,使其成为现代搜索应用的理想选择。理解这两种算法的原理和差异,有助于根据具体需求选择合适的检索策略。原创 2026-03-26 13:16:36 · 713 阅读 · 0 评论 -
各中间件使用的索引算法一览
索引是数据库和存储系统的核心技术,用于加速数据检索操作。不同的中间件系统根据其特定的使用场景和性能要求,采用不同的索引算法来优化查询性能。### 索引算法分类#### 基于树的索引- **B-Tree系列**:B-Tree、B+ Tree、B* Tree- **变种树**:R-Tree、KD-Tree、M-Tree- **专用树**:Trie、Radix Tree、Merkle Tree#### 基于哈希的索引- **静态哈希**:传统哈希表- **动态哈希**:可扩展哈希、线性哈希原创 2025-11-30 15:36:30 · 1134 阅读 · 0 评论 -
Multiple Threads: Word Frequency
Directory and File:data3(dir) file1.txt(file) file2.txt(file) file3.txt(file)filter(dir) filter.txt(file)File contents:file1.txtFree Shipping Mini Car Auto12v Fresh Air Purifier Oxy原创 2015-05-18 07:49:49 · 737 阅读 · 0 评论 -
Multiple Files: Word Frequency
Directory and File:data2(dir) 111(dir) file1.txt(file) file2.txt(file) 222(dir) file3.txt(file)filter(dir) filter.txt(file)result(dir) result.txt(file)File conten原创 2015-05-18 08:19:08 · 589 阅读 · 0 评论
分享