随笔分类 -  算法

介绍一些比较有趣的算法
摘要:KMP 字符串搜索算法是 Knuth、Morris、Pratt 三位在类似的时间段内一起发明的一种字符串搜索算法,该算法的主要原理是利用待查找子串中的某些信息,在匹配失败时能够减少回退的步数 算法原理 假设现在有一个待搜索的字符串 ABABAC,如何利用现有的字符串实现在字符不匹配时尽可能向后调整搜 阅读全文
posted @ 2024-02-24 08:29 FatalFlower 阅读(153) 评论(0) 推荐(0)
摘要:快速幂 如果希望求得一个数 $a$ 的 $b$ 次幂,一般情况下,暴力的做法就是从 $1$ 遍历到 $b$,每次遍历时都将结果乘上 $a$,得到最终结果。这种做法的时间复杂度为 $O(n)$,在实际应用中如果对性能要求不是特别高的话,这样也是可行的。一种更为高效的计算方式是根据计算机存储数据的方式, 阅读全文
posted @ 2022-12-14 17:12 FatalFlower 阅读(51) 评论(0) 推荐(0)
摘要:和一般的比较字符串的方式不同,Rabin-Karp 查找算法通过对子字符串进行 hash,如果在原有字符串中找到了 hash 值相同的字符串,那么继续比较是否是需要查找的字串,一般来讲,如果 hash 操作做的很好的话,那么一般一次匹配就是待查找的子串 基本思想 长度为 \(M\) 的字符串对应着一 阅读全文
posted @ 2022-04-04 14:55 FatalFlower 阅读(87) 评论(0) 推荐(0)
摘要:在分布式场景中,如何生成一个全局的唯一 ID ?由于是通过多台机器并行运算,因此一般的时间戳、UUID 都不是很可靠。为此,Twitter 提出了一种名为 “雪花算法” 的算法来生成分布式全局唯一 ID 的算法 算法介绍 “雪花算法” 生成的 ID 为 \(64\) 位整数,其中,前 \(41\) 阅读全文
posted @ 2022-04-03 09:34 FatalFlower 阅读(193) 评论(0) 推荐(0)
摘要:假设现在输入一个整数,希望通过某种方式来求得该整数的平方根,要求得到尽可能大的精度。 和 LeetCode 上的原题 LeetCode 69 不同,这里要求得到尽可能大的精度,因此一般的二分法无法处理这个问题 处理思路 考虑定义一个函数 $f(x) = x ^ 2 - a$,那么当 $f(x)$ 为 阅读全文
posted @ 2022-03-19 16:41 FatalFlower 阅读(999) 评论(0) 推荐(0)
摘要:RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的 [1] RSA 加密算法的可靠性源自于对于极大的整数做因数分解很 阅读全文
posted @ 2022-01-11 08:51 FatalFlower 阅读(316) 评论(0) 推荐(0)
摘要:算法介绍 博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algorithm),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。 这一算法应用的问题原型是在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现 阅读全文
posted @ 2021-10-22 14:39 FatalFlower 阅读(192) 评论(0) 推荐(0)
摘要:PageRank 算法 ​ 作为 Google 最早的一个网页排名算法,该算法在早期的搜索引擎中是搜索结果最为准确的,同时也是 Google 发家的一个重要算法。尽管这些年来该算法不再是 Google 对于网页排名的唯一算法,但是它的核心思想还是值得我们去研究一下的。 ​ 算法简单描述:首先假定每个 阅读全文
posted @ 2021-08-11 15:42 FatalFlower 阅读(195) 评论(0) 推荐(0)