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

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

相关推荐
Liu628886 小时前
C++中的工厂模式高级应用
开发语言·c++·算法
AI科技星7 小时前
全尺度角速度统一:基于 v ≡ c 的纯推导与验证
c语言·开发语言·人工智能·opencv·算法·机器学习·数据挖掘
hjxu20167 小时前
【OpenClaw 龙虾养成笔记一】在远程服务器,使用Docker安装OpenClaw
服务器·笔记·docker
sinat_255487817 小时前
读者、作家 Java集合学习笔记
java·笔记·学习
条tiao条8 小时前
KMP 算法详解:告别暴力匹配,让字符串匹配 “永不回头”
开发语言·算法
干啥啥不行,秃头第一名8 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
zzh940778 小时前
Gemini 3.1 Pro 硬核推理优化剖析:思维织锦、动态计算与国内实测
算法
2301_807367198 小时前
C++中的解释器模式变体
开发语言·c++·算法
愣头不青8 小时前
617.合并二叉树
java·算法
observe1019 小时前
输入输出1
笔记