算法
文章平均质量分 56
如魔
这个作者很懒,什么都没留下…
展开
-
KMP模式匹配算法
KMP模式匹配算法 KMP算法 第一个例子,S=“abcdefgab”,T=“abcdex”。 朴素的模式匹配过程,再第一步中,主串S与模式串T比较了前6位都相等,第七位不相等,然后模式串指针 i 需要回溯到1重新开始。 这样做显然是非常浪费时间的,因为我们已经知道S的1-5与T的1-5位置的字符是匹配的,并且T的第一个字符’a’与其自身的2-5位"bcde"都不相等,那么’a’也就没有必要与S的2-5位比较(上面划线),也就是说,朴素算法中的②③④⑤步骤都是多余的,可以跳过。第⑥布是必要的,因为我们不知原创 2021-07-15 18:48:17 · 1682 阅读 · 0 评论 -
A* 算法
A* 算法 A* 算法是一种在图中求解最短路径的算法,是从Dijkstra算法发展而来的。 A* 算法不仅会考虑从起点到后补顶点的距离,还会考虑从当前顶点到终点的估算距离。 #mermaid-svg-l1WwKgsMc9Jtw7UN .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-l1WwKgsMc9Jtw7UN原创 2021-03-02 17:23:24 · 314 阅读 · 0 评论 -
素性测试 费马测试
素性测试 费马测试 素数被广泛应用于加密技术中,例如RSA算法等都会用到素数或利用素数的一些性质。 素性测试:用于判断一个数是否是素数。 我们在学习编程语言时一般都会练习判断一个数x是否是素数,当时我常用的方法是遍历从2到√x+1之间的数i,判断x mod i是否不为0。 然而这种办法在数字x很大时会非常耗费时间。 费马测试是一种概率性的素性测试,它是根据“某个数是素数的概率”来判断一个数是否是素数。 在此之前,我们先介绍一个素数的重要性质。 素数5 4^5 = 1024 1024 mod 5 =原创 2021-03-01 17:34:22 · 1244 阅读 · 0 评论 -
堆和堆排序
堆和堆排序 堆 堆是一种特殊的树形结构,它总是满足树的根节点是所有结点中最大(或最小)的一个,也由此分为大根堆和小根堆。 接下来以小根堆为例进行讲解。 图片来源:《我的第一本算法书》 小根堆需要遵循的规则是: 堆中的每个结点最多只有两个子结点。 子结点必须大于父结点。 最小的数据存储在根结点。 查询 这样在查询最小值时时间复杂度是O(n)。 当然数据并不是一开始就是这样排好的,我们页需要进行插入删除等操作。 插入数据 插入数据,一般会把新数据放在最下面一行靠左的位置。当最下面一行里没有多余空间时,原创 2021-03-01 17:32:12 · 107 阅读 · 0 评论 -
k- means 算法
k- means 算法 k- means 算法是聚类算法的一种。 聚类指的是在一个对象的集合中,将相似的对象分为一个簇。 k- means算法需要给定划分的簇的数量,例如选定划分为3个簇。 在所有的对象中任意选择三个对象作为簇的中心点。 计算其余各个元素距离那个中心点最近,形成一个原始的簇。 在各个簇内计算重心,将簇的中心点移动到重心。 重新计算各个对象距离三个中心点的距离,形成新的簇。 重复步骤3,4的操作,知道中心点不再发生变化。 ...原创 2021-02-28 17:10:09 · 455 阅读 · 0 评论 -
迪菲 - 赫尔曼密钥交换
迪菲 - 赫尔曼密钥交换 迪菲 - 赫尔曼密钥交换是一种可以再通信双方之间安全地交换密钥的方法。 按步骤进行 通信方A | 通信方B 生成[密钥p] [密钥p]---> 生成[密钥SA] | 生成[密钥SB] [密钥P]+[密钥SA]合成[密钥P-SA] | [原创 2021-02-28 14:46:07 · 525 阅读 · 1 评论