2023年2月5日(日)
うららかな春の陽気でした。今日は、8日のプレゼン用のパワポスライドを作りました。突貫工事にしては、まずまずのものができました(…と思っておきたい…)。
昨日は、単一のアスキー文字で埋め尽くしたテキストファイルの圧縮について調べた結果を書きました。
今回は、0から9までの乱数を生成してテキストファイルを作り、圧縮の様子を調べてみました。乱数は、メルセンヌ・ツイスターに基づく疑似乱数で、再現性を確保するために乱数シードを適当に指定(今回は"20230205")しておきました。コードは下の通り単純なものです。
% cat myrand.rb
def myrand(i)
prng = Random.new(20230205)
i.times {
print prng.rand(10)
}
end
そして、前回と同様に、10倍ずつサイズを変えたテキストファイルを、10バイトから1ギガバイトまで9種類作成しました。
% ruby -r ./myrand.rb -e 'myrand(10**1)' > 10_1
% ruby -r ./myrand.rb -e 'myrand(10**2)' > 10_2
...
% ruby -r ./myrand.rb -e 'myrand(10**9)' > 10_9
下図が結果です。
bzip2の圧縮率は43%、xzの圧縮率は44%で、ほぼ拮抗しました。乱数なのに半分以下までサイズを圧縮できました(シードが8桁の疑似乱数ですが)。スケーラビリティは、10の5乗バイト(=100キロバイト)を越えたあたりでなくなりました。
次は、80桁程度の乱数10個くらいをランダムに配置したファイルで、テストをやってみたい(ログファイルの圧縮をイメージしています)。
今日覚えたこと
Ctrl+Dでパワポのスライドを複製
明日やること
旅行に出かける