単調データの圧縮ファイル比較

単調データを各圧縮コマンドで圧縮した時のファイルサイズを比べてみます。
オール0のデータとランダムなデータを元データとします。
gzip bzip2 xz zip rar 7z
の各コマンドを比較します。

rar zip 7zのインストールは、aptでいけます。

takk@deb8:~$ sudo apt-get install rar zip 7z

元ファイルを削除しないようにするオプションを使います。それぞれ以下のコマンドです。

bzip2 -k infile
gzip -c infile > outfile.gz
xz -k infile
zip -1 outfile.zip infile
rar a outfile.rar infile
7z a outfile.7z 1b

使用するデータは、ゼロデータです。生成する関数を用意しておきます。

takk@deb8:~$ function z(){
> seq $1 | perl -ne "print chr 0" > $1
> }
takk@deb8:~$ 

1バイトデータから、1024バイトデータまで作成して、それぞれの圧縮後のファイルサイズを表にしてresultファイルに保存します。

takk@deb8:~$ for i in {1..1024};do create0 $i;
> gzip -c $i > $i.gz;
> bzip2 -k $i;
> xz -k $i;
> zip -1 $i.zip $i >/dev/null;
> rar a $i.rar $i >/dev/null;
> 7z a $i.7z $i >/dev/null;
> stat -c'%s' $i $i.gz $i.bz2 $i.xz $i.zip $i.rar $i.7z|xargs;
> done > result

このようなデータができました。
左から、0データファイルのサイズ gz bz2 xz zip rar 7zです。

takk@deb8:~$ cat result
1 23 37 60 153 68 104
2 24 37 60 154 68 105
3 25 37 60 155 71 105
4 26 37 60 156 71 105

(省略)

1021 34 41 76 171 81 117
1022 34 42 76 171 81 117
1023 34 42 76 171 81 117
1024 34 42 76 171 81 117

gzの圧勝です。

ランダムなデータでも試してみます。

takk@deb8:~$ function createrand(){
> seq $1 | perl -ne 'print chr int rand 256' > $1
> }
takk@deb8:~$ 

結果です。

takk@deb8:~$ cat result
1 23 37 60 153 69 104
2 24 39 60 154 71 105
3 25 42 60 155 72 106
4 26 46 60 156 75 107

(省略)

1021 1049 1329 1084 1179 1143 1153
1022 1050 1311 1084 1180 1145 1153
1023 1051 1285 1084 1181 1149 1152
1024 1052 1335 1084 1182 1146 1154

極端ですが、このように単調過ぎるデータや、複雑過ぎるデータは、gzipが断然効率が良さそうです。

コメント

タイトルとURLをコピーしました