IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Bitmap

共 2 篇相关文章

IT 累计浏览 2,305

大数据过滤及判断算法 -- Bitmap / Bloomfilter

这篇讲的是如何用极低的空间成本,高效判断一个元素是否存在于海量数据集合中。作者从一道常见的面试题出发,引出了两个核心数据结构:Bitmap与Bloomfilter。 文章首先剖析了Bitmap,它本质上就是一块连续的内存位图,每个bit(0/1)直接对应一个元素的“无/有”。作者展示了如何通过简单的位运算(`/8`和`%8`)定位到具体的bit位,并给出了一个完整的C++代码示例,用于在一个10万规模的集合中精确查找缺失的数字。Bitmap的优点是100%准确,但缺点是所需内存与元素值的范围直接相关。 接着,文章重点介绍了Bloomfilter。它通过多个哈希函数对同一个值进行多次哈希,将结果映射到不同的bit位上。这种设计能用远小于Bitmap的内存处理更海量的数据,但代价是存在理论上的误判——可能将不在集合的元素误判为“存在”。作者解释了误判率与哈希函数数量、内存大小的关系,并提供了包含三种经典哈希函数(BKDR、FNV、DEK)的实现代码。 文末,作者还留下了一个思考题:对于“从1到100万无序数中找出被随机取走的N个数”这个问题,除了这两种方法,还可以如何利用数学性质(如求和、求积)来间接求解?这展示了不同场景下算法选择的灵活性。

IT 累计浏览 3,018

Hopscotch Hashing

这篇讲的是Hopscotch Hashing,一种旨在显著提升查询速度的开放地址哈希方法。作者直接点明,传统思路(如链地址法或其它开放寻址方式)在哈希表负载较高时,性能会急剧下降,查询复杂度难以维持。 文章的核心方案围绕一个巧妙的插入时调整策略展开:通过在插入数据时主动将其“路由”到目标桶的邻近区域,让每个桶的“邻居”形成一个高效的数据簇。这个过程有点像精心规划交通,确保前往某个目的地(桶)时,所有相关的车辆(数据)都停在旁边的几个固定停车位里,而不是散落在整个停车场的各个角落。 这种设计带来的关键差异和结论是,它能在最坏情况下也保证查询操作的时间复杂度为一个常数,这是很多传统哈希方法难以做到的。无论哈希表装得多满,你查找任何一个键的耗时基本都是确定的,这对于需要稳定低延迟的应用场景非常有价值。 文章没有停留在理论层面,而是清晰地阐述了这种算法如何通过“预见性布局”来克服开放寻址哈希的经典痛点,真正承诺了性能的稳定可预测。