一些算法或者天马行空的思想和经验
TODO
Be An Author
这个作者很懒,什么都没留下…
展开
-
简单讲讲AC自动机理念
敏感词有{"hers", "his", "she"} ,然后对于字符串s="ahishers" , 经过敏感词过滤后,变成字符串t=”a“。如何以O(len(s))的时间复杂度,来实现这个功能呢?如下图所示:每个节点都有一个fail指针,i->fail=j, 那么代表着:word[j]是word[i]的最长后缀。下图红色线是fail指针,黑色线是前缀树指针,从中就可以知道,游走的算法是可以达到O(n)的。...原创 2020-12-22 19:40:12 · 170 阅读 · 0 评论 -
理解漏桶和令牌桶算法区别
1.漏桶算法(假设qps=10)1.首先初始化capacity=qps,代表桶的容量。且这个容量每秒会流失capacity的水,空了就不流。一旦水满出去,溢出的就是拒绝的请求。2.当一个请求进来的时候,计算(now-lastTime)/1000*capacity,知道间隔时间流出了多少水,然后获取remainCapacity,如果remainCapacity还是小于桶容量的,那么加水,否则就溢出。3.自己加的水成功流出,才能执行下一步,所以会阻塞等待个(remainCapacity/capaci原创 2020-10-29 16:32:00 · 782 阅读 · 0 评论 -
记录遇到的几个场景题
(1) 如何实现亿级数据的全排序其实考察的就是merge思想,内存不够时候的解决方案。现在的成熟解决框架,就是hadoop,storm这些。以hadoop为例,记录下什么阶段会排序。1.map最后阶段进行partition分区,一般使用job.setPartitionerClass设置的类,如果没有自定义Key的hashCode()方法进行分区。在map阶段写出到环形缓冲区,在环形缓冲区溢写时会进行一次排序,每个分区内部调用job.setSortComparatorClass设置的key的比较函数类原创 2020-11-03 14:37:29 · 216 阅读 · 0 评论 -
蓄水池算法(简单代码)
1.一个不知道文本行数的文件,如何随机获得其中一行?要求还不能随机读,必须一行一行读。这时蓄水池算法就出现了。伪代码如下:此时,所有的行被选取的概率都是1/Ni = 0 #行号s = null #随机选取的行for line in 文本文件: i = i+1 r = 生成[0,1)之间的随机数 if r < 1/i : s = line #替换2.如果随机选取k行?(前提当然是行数>k)i ...原创 2020-11-16 20:06:13 · 478 阅读 · 0 评论