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

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

相关推荐
心.c几秒前
Vue3+Node.js实现文件上传分片上传和断点续传【详细教程】
前端·javascript·vue.js·算法·node.js·哈希算法
散峰而望1 分钟前
【基础算法】算法的“预谋”:前缀和如何改变游戏规则
开发语言·数据结构·c++·算法·github·动态规划·推荐算法
We་ct1 分钟前
LeetCode 48. 旋转图像:原地旋转最优解法
前端·算法·leetcode·typescript
爱尔兰极光1 分钟前
LeetCode--长度最小的子数组
算法·leetcode·职场和发展
仰泳的熊猫3 分钟前
题目1432:蓝桥杯2013年第四届真题-剪格子
数据结构·c++·算法·蓝桥杯·深度优先·图论
舟舟亢亢4 分钟前
JVM复习笔记(上)
jvm·笔记
有一个好名字10 分钟前
力扣-电话号码组合
算法·leetcode·职场和发展
鱼跃鹰飞14 分钟前
Leetcode会员尊享面试100题:1086:前五科的均分
算法·leetcode·职场和发展
༾冬瓜大侠༿15 分钟前
C++string
c语言·开发语言·c++·算法
Lethehong16 分钟前
探索高效工作流的秘密:GLM-4.7 与 Dify 平台深度集成实践
大数据·人工智能·算法