初识 BitArray

Posted on Apr 23, 2020

纸上谈兵

有两个 1GB 的文本文件,文件内容是无序数组(一行一个整数,一个文件中大概有一亿个非负整数,同一个文件中不重复),请在内存使用尽可能少的情况下将只在其中一个文件出现过的数字找出来。

应用 BitArray。逐行读取 2 个文件的整数并分别映射到 2 个 BitArray,其中每个 BitArray 的长度为 1 亿,即 100000000 bit = 11.92093 MB,求这两个 BitArray 的对称差。

映射。将文件中的非负整数映射为下标(索引),比如给定 {1, 5} 和 {1, 2} 这两个整数集,则相应的 BitArray 分别形如:

00…100010

00…000110

Bit array 每位初始值位 0,设置为 1 则表示该位的下标(index)为相应的整数,右边第一位下标为 0,从右到左单调递增,增量为 1。

对称差。两个集合的对称差是属于一个集合而不属于另一个集合的元素组成的集合。比如 {1, 5} 与 {1, 2} 的对称差为 {2, 5},相应的 BitArray 运算形如:

00…100010 ^ 00…000110 -> 00…100100

本文首发于 https://h2cone.github.io/

参考资料