数据结构与算法
文章平均质量分 93
数据结构与算法
徐同学呀
致力于java底层、源码、中间件、后端领域学习和探索。热爱源码,热爱生活,持续改进,坦诚合作!
展开
-
雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论
雪花算法的原理很简单,主要由时间戳+机器id+序列号生成64bit的ID,整体趋势递增,且全局唯一,性能也不错。每种组成标识的bit都可以自定义,灵活性很高。因为雪花算法强依赖机器时钟,就难以避免时钟回拨问题,解决的方式很多,无非从避免和缓解两个角度出发。原创 2021-06-18 10:42:09 · 6863 阅读 · 13 评论 -
如何实现一个高效的关键词过滤功能?——DFA算法
DFA即Deterministic Finite Automaton,翻译过来就是确定性有限自动机。简单原理就是:在一个有限的集合,其中的元素都有两种状态,结束和继续(可以用0代表继续,1代表结束),可以从一个元素检索到下一个元素,直到元素的状态为结束为止。1. DFA实现的关键词过滤,性能不再受限于关键词的数量,只与被检索的文本长度有关。时间复杂度为小于等于O(n),n是被检索文本的长度。2. DFA关键词过滤,是精准过滤,无法实现模糊过滤,如我是*人,*匹配单个字符,%匹配多个字符。原创 2021-01-31 18:34:29 · 2817 阅读 · 0 评论 -
哈希表(哈希函数的设计与哈希冲突的解决)
1. 哈希表就是数组+哈希函数,其核心思想是利用数组可以按照下标索引随机访问数据的特性。2. 哈希冲突的原因:数组的有界,哈希函数的计算,哈希值的映射。3. 解决哈希冲突的方法:数组扩容,设计优秀的哈希函数,开放寻址法和链表法为哈希值找到合适的映射。4. 开放寻址法,插入、查找、删除都需要相同的寻址逻辑,所以时间复杂度一样。数组中元素越多,空闲位置越少,哈希冲突越剧烈。5. 链表法需要注意,当哈希冲突非常严重时,数组会退化成链表,查找和删除的时间复杂度趋近于O(n),可以采用红黑树进行优化。原创 2021-02-10 00:04:08 · 1797 阅读 · 0 评论