String 为什么liblzma无法压缩任何随机字符串?
我正在使用ruby绑定,String 为什么liblzma无法压缩任何随机字符串?,string,random,compression,complexity-theory,String,Random,Compression,Complexity Theory,我正在使用ruby绑定,RubyXZ random_string = SecureRandom.random_bytes(100) compressed_string = XZ.compress(random_string, compression_level = 9, check = :none, extreme = true) compressed_string.size # => always 148 我已经在不同长度的弦上测试了一万次了 我知道至少有一半的字符串是1-不可压缩的(
RubyXZ
random_string = SecureRandom.random_bytes(100)
compressed_string = XZ.compress(random_string, compression_level = 9, check = :none, extreme = true)
compressed_string.size # => always 148
我已经在不同长度的弦上测试了一万次了
我知道至少有一半的字符串是1-不可压缩的(不能压缩超过1位),3/4的字符串是2-不可压缩的,等等(这是从一个计数参数得出的)。显然,这并没有说明可压缩字符串数的下限,但一定会有一些,不是吗?解释
有几个原因:
$ dd if=/dev/urandom bs=1k count=0 2>/dev/null | xz -9 -e --format=raw -c 2>/dev/null | wc -c
1
$ dd if=/dev/zero bs=1k count=1 2>/dev/null | xz -9 -e --format=raw -c 2>/dev/null | wc -c
19
$ dd if=/dev/zero bs=1k count=1 2>/dev/null | sed 's/\x00/\xFF/g'| xz -9 -e --format=raw -c 2>/dev/null | wc -c
21
$ dd if=/dev/urandom bs=1k count=1 2>/dev/null | xz -9 -e --format=raw -c 2>/dev/null | wc -c
1028
$ for i in {1..1000}; do dd if=/dev/urandom bs=1k count=1 2>/dev/null | xz -9 -e --format=raw -c 2>/dev/null | wc -c; done | sort | uniq -c
1000 1028