获得徽章 0
用1MB内存判断10亿数据是否存在,这个数据结构太狠了!
场景:判断用户名是否已注册
- 哈希表:1亿用户 = 1.6GB内存
- 布隆过滤器:1亿用户 = 1MB内存
- 空间节省:99.9%!
核心原理:
用3-7个哈希函数,把数据映射到位数组的几个位置。
查询时,只要有一个位置是0,就一定不存在!
所有位置是1,则"可能存在"(有1%误判率)
为什么接受误判?
- 拦截100万个恶意IP,误拦1万个好用户
- 这个代价,完全值得!
实际应用:
Chrome密码泄露检测
Redis缓存穿透防护
垃圾邮件黑名单
爬虫URL去重
比特币SPV节点
文章详情:
juejin.cn
#算法 #前端 #JavaScript #Redis #数据结构
场景:判断用户名是否已注册
- 哈希表:1亿用户 = 1.6GB内存
- 布隆过滤器:1亿用户 = 1MB内存
- 空间节省:99.9%!
核心原理:
用3-7个哈希函数,把数据映射到位数组的几个位置。
查询时,只要有一个位置是0,就一定不存在!
所有位置是1,则"可能存在"(有1%误判率)
为什么接受误判?
- 拦截100万个恶意IP,误拦1万个好用户
- 这个代价,完全值得!
实际应用:
文章详情:
#算法 #前端 #JavaScript #Redis #数据结构
展开
2
点赞
线段树这个数据结构,我之前一直觉得是"竞赛专用",直到我在做一个实时数据统计功能时,才发现它有多香!
场景:股票软件需要实时显示任意时间段的最高价/最低价/平均价
❌ 朴素做法:每次遍历区间 O(n)
线段树:查询和更新都是 O(log n)
最牛的是"懒标记"技术,区间更新不用逐个修改,延迟到查询时才下传,性能直接起飞!
花了3天写的深度解析,1100多行,从原理到实战全都有:
juejin.cn
完整代码已开源:
github.com
#算法 #数据结构 #前端
场景:股票软件需要实时显示任意时间段的最高价/最低价/平均价
❌ 朴素做法:每次遍历区间 O(n)
最牛的是"懒标记"技术,区间更新不用逐个修改,延迟到查询时才下传,性能直接起飞!
花了3天写的深度解析,1100多行,从原理到实战全都有:
完整代码已开源:
#算法 #数据结构 #前端
展开
评论
1
标题:手写A*算法后,我终于理解了魔兽争霸的寻路原理
正文:
花了3天实现A*寻路算法,才发现游戏单位的智能移动这么有意思。
核心就一个公式:f(n) = g(n) + h(n)
- g(n):已经走过的路
- h(n):估计还剩多少路
- f(n):总代价,越小越优先
比Dijkstra快20倍,因为有"方向感"!
完整实现已开源:
github.com
#算法 #前端 #JavaScript
正文:
花了3天实现A*寻路算法,才发现游戏单位的智能移动这么有意思。
核心就一个公式:f(n) = g(n) + h(n)
- g(n):已经走过的路
- h(n):估计还剩多少路
- f(n):总代价,越小越优先
比Dijkstra快20倍,因为有"方向感"!
完整实现已开源:
#算法 #前端 #JavaScript
展开
4
点赞
"最近在用 Rust 写 Wasm 优化前端算法,发现一个奇怪的现象:同样的快速排序,在 Chrome 和 Firefox 上性能差了 30%。有人遇到过吗?详细分析和源码我整理成了一篇文章,求大佬指点迷津
"
3
点赞