【问题标题】:compress long list of short strings压缩长的短字符串列表
【发布时间】:2016-08-22 23:10:41
【问题描述】:

我有一长串要压缩的短字符串,但我希望能够随时解压列表中的任意字符串,而无需解压整个列表。

我提前知道列表,涉及多少预处理并不重要。如果有一些显着的 O(1) 内存开销也很好。

我意识到我可以使用一些无损压缩算法独立地压缩每个字符串,但这不会很好地工作,因为字符串很短并且每个字符串都不包含太多冗余。然而,在整个列表中存在很多冗余。

【问题讨论】:

  • 列表有多长?琴弦有多短?使用普通压缩器可以压缩多少?
  • @MarkAdler 200 万个字符串,平均大小 2k,我使用 gzip 获得约 35% 的压缩率

标签: compression


【解决方案1】:

我建议一次压缩大约 64K 的字符串(大约 32 个字符串),要求您平均只需解压缩 16 个字符串即可获得所需的字符串。而不是 1,000,000。使用 deflate(gzip 使用的压缩方法)您将获得几乎相同的压缩。

同样使用 deflate 的另一种方法是构建一个 32K 的“字典”,其中包含 2,000,000 个字符串中最常见的子字符串。然后可以使用 32K 单独压缩每个字符串,从中提取匹配项。如果您的字符串具有这种共性,那么您可以接近相同的压缩。 (见zlib'sdeflateSetDictionary()和inflateSetDictionary()函数。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多