【算法笔记】资源限制类题目的解题套路

1、布隆过滤器用于集合的建立与查询,并可以节省大量空间

布隆过滤器使用bit来表示每一个值有没有用到,一个int有4个Byte,转成二进制就有32bit,就能有32个坑,每一个坑就可以表示有没有使用过。这样用int数组,就能表示n*32个坑,就可以表示大空间,因为布隆过滤器的空间特别大,不可能给所有数字一个坑,这样将原来的数据hash后,还是会有多个值到一个坑的问题,所以布隆过滤器有一定的失误率,这个根据公式可以算出来,具体记不住,就不写了。

2、一致性哈希解决数据服务器的负载管理问题

一致性哈希就是将所有的hash结果弄成一个环,让几个节点去收集顺时针离他最近的hash的值,这样在新增或者删除节点的过程中,就不需要将所有的值重新hash处理一遍,只需要将影响到的值过一遍即可。因为有可能出现几个节点不均衡的问题,所以通常会增加虚拟节点,比如有三个节点a、b、c,我们可以让每个节点虚拟出1000个节点,这样就有3000个节点,将换上要分配到虚拟节点的数据再映射一次到具体的节点,就能达到平衡的效果。

3、利用并查集结构做岛问题的并行计算

《【算法笔记】并查集》

4、哈希函数可以把数据按照种类均匀分流

用hash函数的性质,将同一个种类的数据分到一个坑里面,然后单独处理每一个坑里面的数据,可以将每个坑单独生成一个文件,然后单独处理,也可以发给不同的机器,并行处理。

5、位图解决某一范围上数字的出现情况,并可以节省大量空间

用一个int有4个Byte,32个bit的性质,用一个int数组来实现多个坑,就可以代替有没有出现过的情况,来替换hashmap来实现节省空间的效果。

6、利用分段统计思想、并进一步节省大量空间

和哈希函数可以把数据按照种类均匀分流一样,分流,然后单独处理

7、利用堆、外排序来做多个处理单元的结果合并

类似于好多数据的排序问题,可以用大根堆一次排好一段范围内的数据,然后下次循环再排号另一段,比如用大根堆,堆里面放的是两个数值组成的一组数据,一个是具体的数值(类似于key),用来大根堆排序的,另一个是key具体出现的次数,规定堆中有10种数,用一个变量记录最大值,循环时小于最大值的直接丢了(已经排过了),大于最大值的,如果堆里面不够10个数直接进入,到了10个数,如果小于最大值则替换堆顶元素。这样一次循环下来,就能结合上出现的次数,在大根堆中将这10中数据排好序,然后进行下一轮循环,直到把所有数据排好序。

相关推荐
DanyHope2 小时前
LeetCode 128. 最长连续序列:O (n) 时间的哈希集合 + 剪枝解法全解析
前端·leetcode·哈希算法·剪枝
元亓亓亓2 小时前
LeetCode热题100--763. 划分字母区间--中等
算法·leetcode·职场和发展
鹿角片ljp2 小时前
力扣206.反转链表-双指针法(推荐)
算法·leetcode·链表
走在路上的菜鸟2 小时前
Android学Dart学习笔记第二十一节 类-点的简写
android·笔记·学习·flutter
智航GIS2 小时前
ArcGIS大师之路500技---037普通克里金VS泛克里金
人工智能·算法·arcgis
深蓝海拓2 小时前
PySide6从0开始学习的笔记(十一) QSS 属性选择器
笔记·python·qt·学习·pyqt
中屹指纹浏览器2 小时前
2025技术解析:分布式指纹协同管理技术底层实现与规模化运营逻辑
经验分享·笔记
晨晖22 小时前
循环队列:出队
算法
LYFlied2 小时前
【每日算法】LeetCode 70. 爬楼梯:从递归到动态规划的思维演进
算法·leetcode·面试·职场和发展·动态规划