
算法
文章平均质量分 66
基础算法
Orange#
这个作者很懒,什么都没留下…
展开
-
hashtable 一种根据key值直接进行访问的数据结构
hash是什么哈希用来将很大范围的数(比如[10^-9, 109]),映射到一块较小的区间内。比如对于109,我们想让它映射到[0, 105]这块区间(也可以理解为数组)内,可以直接对109进行取余(10^9 % 10^5),然后根据余数确定该数在区间内的落点。这里的取余操作就叫做hash,取余也是常见的一种hash算法。我们使用hash就是为了节约空间,如果内存大小无限,我们直接选择开一块2 * 10^9的数据存放数据即可,但是这块内存可能有很多空闲区域。实际中内存是有限的,我们需要尽可能的将大范原创 2021-12-16 15:47:34 · 1048 阅读 · 0 评论 -
一致性哈希算法
普通哈希在分布式场景下,往往涉及到负载均衡,比如分布式缓存这种应用,我们希望如果获取相同的key,尽量映射到同一台机器上,这样可以在内存中最快速的获取,如果相同的key总是打到不同的机器上,可能由于缓存淘汰导致该缓存值被替换掉,进而需要读取磁盘,这样性能就会大打折扣。基于此,我们可以获取key值的哈希值,该哈希值对应的就是机器节点,比如key和节点个数做取余运算(key%n),这样每次相同的key必然会打到同一台机器上。但是问题又出现了,分布式环境中最常见的问题就是节点宕机,如果一台节点下线了,原创 2021-12-04 00:09:15 · 1011 阅读 · 0 评论 -
CRC 循环冗余校验
参考:循环冗余校验(CRC)算法入门引导_Ivan 的专栏-优快云博客_crc校验CRC校验原理及步骤_D_leo的博客-优快云博客_crc校验crc冗余校验是为了保证接收方收到数据后,能确认数据是完好无损的。crc的思想假象实际中,a向b传小纸条,b怎么知道小纸条上的数据有没有被路上的其他同学修改过呢?聪明的a和b约定好,接受的数据必须按照x进行一次运算,如果运算的结果没有余数,就可以相信纸条内容是正确的。如果a真实传输的数据,运算之后就有余数,那这种约定不久失效了吗?这时聪明.原创 2021-12-03 20:07:40 · 176 阅读 · 0 评论 -
SkipList 一种使用概率替代平衡树的数据结构
SkipList 一种使用概率替代平衡树的数据结构 - 月一orange - 博客园我的博客搬家啦~,来这两个地方看看吧~月一orange - 博客园今天没吃橘子原创 2021-11-19 18:45:21 · 681 阅读 · 0 评论 -
静态链表 一种用数组模拟链表的数据结构
区别链表分静态链表和动态链表,工程里一般用动态链表,去new一个node,动态创建节点。静态链表一般用在刷算法题的时候,由于使用数组模拟,没有动态创建过程,并且使用数组下标代替next指针,所以静态链表的速度非常快,缺点就是非常消耗内存。两个数组静态链表中使用两个数组,分别存储节点的值和next“指针”。例如val数组存储节点的值,nex数组存放这个节点指向的下一个节点的下标,例如链表3->5->6->1->7,使用数组存储就是这样的:val: 3 5 6 1原创 2021-11-20 15:18:37 · 435 阅读 · 0 评论 -
Tiree Tree
字典树的结构是多叉树,每个节点有n个出度,每个出度表示一个字符。字典树的节点分为普通节点和终止节点,如图,红色的节点即为终止节点,往字典树中插入一个单词,这个单词的最后一个字符就是终止节点。如图,字典树中包含的单词有:"abcd","abd","b","bcd","efg","hi "。在输入框自动联想、单词出现频率统计的场景上都应用到了字典树。在有巨量相同前缀的单词中,字典树的效率高于哈希表,时间复杂度固定为O(len(str)),但是字典树的构建会消耗大量空间。字典树的特点就是尽量避免相同前缀的单词原创 2021-04-03 12:27:54 · 194 阅读 · 0 评论 -
LRU 一种缓存淘汰算法
LRU是什么我们知道内存中的读写速度很快,基于此很多缓存技术都喜欢将数据存在内存中,但是内存空间是有限的,到达一定量后必然需要将一些不常用的缓存数据删除或者落盘。于是顺应而生了很多缓存淘汰算法。其中比较常见的有FIFO、LFU、LRU、LRU-k、2Q算法等等...其目的都是为了高效的维护缓存数据。缓存淘汰算法当内存占用快满时,要删除哪些缓存数据呢?假如刚删除的缓存数据,下一秒就被访问到,这时只能重新去磁盘读到缓存,大大浪费了时间。所以根据合适的场景选择合适缓存算法很关键。先来看FIFO,先原创 2021-11-29 21:05:34 · 936 阅读 · 0 评论 -
KMP 算法步骤详解
参考:mooc浙大数据结构数据结构_浙江大学_中国大学MOOC(慕课)kmp算法的本质是:1、当指针 i 指向的 字符s[i] 和指针 j 指向的 字符p[j] 不相同时,指针 i 不回退,指针 j 回退。(对比暴力算法是,指针 i 回退到之前位置的下一个位置,指针 j 直接回退到0)2、然后根据p的相同前后缀处理出来一个数组,记录着每次不匹配时,j 指针应该回退的位置。记录指针回退位置的数组称为match数组,match[i]表示的是:字符串p中,下标从0到i这段区间内,找到最长的且相同.原创 2021-11-26 12:28:04 · 583 阅读 · 0 评论 -
单调栈和单调队列
单调栈和单调队列都有共同的特性,单调性。所谓单调性就是在一段区间上,这段区间的数是线性递增的,或者线性递减的。栈和队列中一直维护一串单调的数字,那么这个栈和队列就叫做单调栈和单调队列,他们可以解决什么问题呢?一般单调栈解决的是,在一串数字中,求第i个数的左边第一个比它小的数。(当然问题不是绝对的,左边或者右边都可以,第一个比它大或第一个比它小也都可以)例题:活动 - AcWing一般单调队列解决的是,求在某个滑动窗口内的最小值。例题:活动 - AcWing对于求某个区间内的最大值最小值,可原创 2021-11-25 13:39:58 · 152 阅读 · 0 评论