
算法
沙发斯蒂芬大大
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap
LRU 实现LRU的原理 使用双链表 + HashMap 来实现 LRU 访问结点 get(key), 首先根据key 在map 中获取 结点的 引用, 然后把该结点由当前位置调整到链表尾部。 插入结点 put(key,val) 首先尝试获取 key结点,若存在则修改节点值,且类似于访问,把结点调整到链表尾部。 若不存在该key, 则若LRU还有容量,则将该结点直接插在尾部,且插入到map中。 ...原创 2020-10-26 19:19:42 · 284 阅读 · 0 评论 -
NFA实现正则表达式
正则表达式匹配算法 总的来说,分为两种边 匹配边 和 episo边 。 状态转移是, 从 一个状态集合, 转移到 另一个 状态集合。 一个状态集合中的 存在 匹配边的所有 状态, 可以通向另状态集合, 该集合可以通过 episo边进行扩展,到此实现了状态的转移。 例如下边的例子 起始状态集合为{0,1,2,3,4,6} 12346是通过episo扩展得到的。 该集合中的 {2,4,6}存在匹配边, 若当前输入为A, 则{2,6}可以实现匹配,{2,6}转移到{3,7} ,而{3,7}再扩展...原创 2020-09-04 16:29:04 · 2134 阅读 · 0 评论 -
KMP的DFA 实现
目录 前言 朴素子字符串查找算法 KMP 算法的基本思想 基于 DFA 的 KMP 实现 朴素子字符串查找算法 KMP 算法是用来解决子字符串查找问题的算法,这个问题有一个很朴素(暴力)的解决方式,通常的写法是: def bf_search(txt: str, pat: str) -> int: i, j, txt_len, pat_len = 0, 0, len(txt), len(pat) while i < txt_len ...原创 2020-09-04 09:23:07 · 598 阅读 · 1 评论 -
KMP
KMP算法计算next值和nextVal值 给定一个主串S及一个模式串P,判断模式串是否为主串的子串;若是,返回匹配的第一个元素的位置(序号从1开始),否则返回0; 这里先不写算法,仅仅计算next和nextVal值 那么计算时只用到子串,也就是模式串 这里模式串为:abaabcac 第一步将模式串写上序号,我们这里从1开始(有的从0开始,建议充1开始) maxL 列出从第一个开始的子串,找出相等的前缀和后缀的个数 next 接下来将maxL复制一行,去掉最后一个数,在原创 2020-08-29 15:01:34 · 346 阅读 · 0 评论