我有1和1的字符串,其中1&0和0的数量是相同的。我想将它压缩成一个数字,该数字在存储它所需的位数方面较小。此外,在压缩形式和非压缩形式之间进行转换不需要大量工作。
例如,对所有可能的字符串进行排序并将它们编号并将该数字作为压缩数据将会起到太多作用。
一个简单的解决方案是允许压缩数据只是字符串长度为n的字符串的前n-1个字符。在压缩和解压缩数据之间进行转换很容易,但这几乎不会产生压缩,每串只有一位。
我想要一种能够使用此属性(相同数量的1和0)压缩字符串的算法,该算法可以推广为具有任意偶数长度的字符串。我还希望它压缩比上述方法更多。
感谢您的帮助。
答案 0 :(得分:0)
这是一个组合问题,N个项目一次取k。
在你的评论中,作为长度10的一个例子,一次取5,意味着只有252个独特的模式。哪个可以适合8位值,而不是10位值。见:WIKI: Combinations
从0-251扩展索引值,这里有一些例子:
参见:Algorithm to return all combinations of k elements from n
在提取时,您可以使用提取的值来设置重建值中的位位置,即每次扩展的O(1)时间。如果列表不是数百万+,则可以预先计算查找表,将索引值转换为解码值要快得多。 IE:构建所有可能的列表,并查找翻译。