【发布时间】:2011-05-19 15:31:18
【问题描述】:
假设我有很多包含非平凡长度字符串的对象(大约 3-4kb)。这些字符串彼此不同,但同时包含许多共同的部分/子序列。平均而言,任何单个字符串的 80-90% 也包含在其他字符串中。有没有一种简单的方法可以自动利用这种巨大的冗余来压缩数据?
理想情况下,解决方案是 C++ 并且对用户透明(即,我可以像访问常规只读 const std::string 而是从压缩存储中读取一样使用它)。
【问题讨论】:
-
字符串如何有共同的子序列。这是因为重复编辑还是数据重合?
-
想象一下不支持 CSS 的静态 HTML。您有很多多余的 html,只有很少的更改部分包含实际信息。
-
1GB 的内存可以容纳大约 100,000 个大小为 3-4KB 的未压缩 blob。你真的需要它来适应更少吗?
-
是的。我正在处理 >= 500.000,这只是数据的一部分(在 32 位应用程序中......)。
标签: c++ algorithm string data-structures compression