【问题标题】:Compressing a string of 1's and 0s containing the same number of 1's as 0's压缩包含与 0 相同数量的 1 和 0 的字符串
【发布时间】:2017-06-22 01:38:08
【问题描述】:

我有一串 1 和 0,其中 1 和 0 的数量相同。我想将其压缩成一个在存储它所需的位数方面更小的数字。此外,压缩形式和非压缩形式之间的转换不需要做很多工作。

例如,对所有可能的字符串进行排序并对其进行编号并将此数字作为压缩数据将是太多的工作。

一个简单的解决方案是允许压缩数据只是字符串长度为 n 的字符串的前 n-1 个字符。在压缩数据和解压缩数据之间进行转换很容易,但这提供的压缩很少,每个字符串只有一位。

我想要一种算法,它可以压缩具有此属性(相同数量的 1 和 0)的字符串,该算法可以推广到任何偶数长度的字符串。我也希望它比上述方法压缩更多。

感谢您的帮助。

【问题讨论】:

  • “例如,对所有可能的字符串进行排序并对其进行编号并将此编号作为压缩数据将是太多的工作。”将二进制字符串转换为整数工作量太大?
  • 不,但是对所有可能的字符串进行排序是太多的工作。例如,假设字符串的长度为 10,您可以将 0000011111 作为第一个字符串,以便将其压缩为 0,第二个可能是 0000101111,依此类推。在这些之间进行转换将是很多工作。按照您的建议将二进制字符串转换为整数不会压缩数据,它仍然会占用相同数量的位。
  • 哦,我假设你的意思是你有一个实际的字符串,每个字符一个字节,并希望从那时起进行压缩。
  • 你能根据时间复杂度/内存使用来量化“工作量太大”吗?

标签: data-compression


【解决方案1】:

这是一个组合问题,N项,一次取k个。

在您的评论中,以长度 10 为例,一次取 5 个,这意味着只有 252 个独特的模式。它可以适合 8 位值,而不是 10 位值。见:WIKI: Combinations

从 0-251 展开索引值,这里有例子:

查看:Algorithm to return all combinations of k elements from n

在提取时,您可以使用提取的值来设置重构值中的位位置,即每次扩展的 O(1) 时间。如果列表不是数百万+,您可以预先计算一个查找表,将索引值转换为解码值要快得多。 IE:建立所有可能的列表,并查找翻译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-22
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2019-01-06
    • 1970-01-01
    • 2011-03-10
    相关资源
    最近更新 更多