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

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

相关推荐
We་ct2 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
William Dawson5 小时前
2026软考中级系统集成项目管理工程师备考笔记
笔记·系统集成项目管理工程师
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮6 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说6 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove7 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung8 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了8 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL8 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰8 小时前
C++ 排列组合完整指南
开发语言·c++·算法