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

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中数据排好序,然后进行下一轮循环,直到把所有数据排好序。

相关推荐
孞㐑¥34 分钟前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风38 分钟前
代码随想录第十五天
数据结构·算法·leetcode
XX風1 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT061 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
代码游侠2 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
mango_mangojuice2 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
想进个大厂2 小时前
代码随想录day37动态规划part05
算法
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章22-Harris角点
图像处理·人工智能·opencv·算法·计算机视觉
工程师老罗2 小时前
YOLOv1 核心知识点笔记
笔记·yolo
子春一2 小时前
Flutter for OpenHarmony:构建一个 Flutter 四色猜谜游戏,深入解析密码逻辑、反馈算法与经典益智游戏重构
算法·flutter·游戏