实现了一个压缩算法,在数据高度压缩的前提下,还可以快速查找 key

来源:互联网 发布:局域网远程协助软件 编辑:程序博客网 时间:2024/04/30 17:48


最近写了一个算法,可用于 (key,value) 存储,key 当然是 string 类型。

用一个 2.3G 的 url 集合做测试,如果不计 value 占用的空间,key 集合的存储空间可以被压缩70倍!压缩后整个数据结构仅占31M内存!压缩率比 bzip2 还要高。

本质性的不同于: gzip, bzip2 等压缩算法仅仅是压缩而已,无法快速地从压缩数据中查找。

我实现的这个算法能高效地支持对 key 的查找,并且查找的时间复杂度仅与 key 的长度有关,不管数据集合有多大,时间复杂度总是 O(strlen(key))。实际数据:当 key 长度均值为 76 字节时(该 url 集合中所有 url 的平均长度),平均查找时间大约 900 纳秒(笔记本 i7-720M)。

可能有人以为是 bloom filter, MD5 之类投机取巧的实现方式,我付责任的地说:不是,该算法是确定性的。bloom filter/MD5 ... 是概率的,并且它们的内存占用还要更多。

如果要让 key 再对应一个 value,并且仍然要以 O(strlen(key)) 的时间复杂度访问 value,需要再多用一点点空间用于索引结构,仍以前面 url 压缩为例,需要在 31M 的基础上多大约 4M 的空间。当然,value 本身占的空间是另外一回事。

有需要该算法的公司或个人,请联系本人