快速排序是 C.R.A.Hoare 于1962 年提出的一种排序算法,该算法如其名一样确实很快。快速排序采用了一种 “汾治策略” 来对序列进行排序。 算法基本思想是:通过一次遍历将序列分成两部分,...
Product Quantization 是一种有效的近似最近邻搜索方法,具有较高的搜索效率和较低的内存消耗。该方法已被广泛应用于图像检索、文本检索和机器学习等领域。 PQ 将高维数据点分成多个子空间,并对每个子空间使用...
局部敏感哈希索引(Locality-Sensitive Hashing,LSH)是一种用于高维数据检索的技术,特别适用于近似最近邻搜索(Approximate Nearest Neighbor Search)的问题。在高...
ANNOY(Approximate Nearest Neighbors Oh Yeah)算法能够帮助我们高效的查找近邻的 N 个向量。其基本原理:就是将所有向量按照空间进行划分,直到子空间小于等于 K 个向量位置。如下图...
最长公共子序列是一个非常实用的问题,它可以描述两段文本之间的 “相似程度”。所谓的子序列就是从原来的序列中取出一部分做成新的序列,新的序列并不要求是连续的。这和子串有些区别,子串也是原始序列中的一...
20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。 在现实生活中,有类问题可将过程划分成多个互相联系的子阶段,我们需要对每一个子阶...
霍夫曼编码(英语:Huffman Coding),又译为哈夫曼编码、赫夫曼编码,是一种用于无损数据压缩的熵编码(权编码)算法。由大卫·霍夫曼在1952年发明。熵用于信息量度量,其本质是信息的平均编码长度,所以也叫熵编码。...
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL...
克鲁斯卡尔算法和普利姆算法一样,用于构建最小生成树。普利姆算法基本思想就是寻找每个顶点权值最小的边,而克鲁斯卡尔算法则是依据边来寻找权值最小的边。 1. 算法过程 上图的邻接矩阵表示如下: 由于克鲁斯卡尔算法是基于边来构...
生成树:如果对于图 G 中任意两个顶点 vi,vj 都是连通的,则称G是连通图。生成树是对连通图而言的,是连同图的极小连通子图,包含图中的所有顶点,有且仅有n-1条边。 最小生成树:在图论中,常常将树定义为一个无回路连通...
Floyd 算法(Floyd-Warshall algorithm)又称为弗洛伊德算法、插点法,用于在给定的加权图中计算两个顶点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题。该算法名称以创始人之一、19...
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,它用于解决的是有向图中最短路径问题。Dijkstra 算法能够计算出给定起【起始顶点】到【其他所有顶点】的最短路径。 1. 算法过程 我们通过一个例子来分...
图的遍历和树的遍历类似,从图中某一顶点出发访问遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程叫做图的遍历。 由于图中的任何顶点都可能和其余所有的顶点相邻接,极有可能沿着某条路径搜索后,又回到原顶点,而有些顶点可能还...
图的定义:图是由顶点的有穷非空集合和顶点之间的边的集合组成,通常表示为:G = (V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 无向边:若顶点Vi 到Vj 的边没有方向,则称这条边为无向边,用...