相変わらず圧縮プログラムと格闘してるカモです。こんにちは。
カモって名乗るの凄く久しぶりな気がする。それはさておき
食べ物のせいか、会社で生じたストレスのせいか、腹がメチャクチャ痛い。
ストレスと言えば、いつまでたっても出来上がらないし原理も理解できない圧縮プログラムもストレスになりそうだが、それは多分関係無いと思う。
会社で生じたストレスは……自業自得という感じ。
上司から厳重注意を受けた。
その衝撃があまりにもデカ過ぎるせいか、今はまだその衝撃で生じたダメージをうまく認識できない。防衛機能が働いて「厳重注意された事も、その原因も、記憶の上で”無かった事”にする」って言う処理を実行しようとしている気がする。
結局それは問題を放置して悪化させるって事で、全然解決になってないんだけど、とりあえず自分がペシャンコに潰れるのは避けられる。
てか、そういう行為をする事について注意を受けた。
それだけじゃないが、その問題も「改善できなきゃお前は俺の職場には残さない」と言う風な事を言われた。
左遷の危機。
どうなる俺。
そんな状況で、俺は、数時間前まで、やっぱり圧縮プログラムを書いていた。
ある意味現実逃避のための行為なのかもしれないと思い始めてる。
RangeCoderを実装するのはとりあえず先延ばしにする事にした。
結局翻訳も出来なかった。やっぱ原理を考えるとナゾな部分が多すぎてうまくプログラム書けない。
別のエントロピー符号化方法のハフマン符号化プログラムを書いた。
ハフマンも……単純な基礎レベルの処理は出来ても実用的な処理が出来なかった。
解説サイトは多数あるけど、重要な部分が全然解説されてない気がするのは俺だけだろうか。
RC、HCを書いてみて「圧縮解凍って、基数変換すればそれでOKなんじゃね?」と思った。
RCは範囲がどうたらこうたら、ACは1から0の間がどうたらこうたら、HCも出現頻度に応じてキャラクタに番号を割り当ててどうたらこうたら。どれも最終的に出力するコードは一つの数値で、それは例えば
使用している文字の種類:2種類
使用している文字:A,B
文字「A」の使用回数:2
文字「B」の使用回数:1
上記条件で成立する文字列は以下の通り
AAB
ABA
BAA
符号化対象文字列は「BAA」であり、上記表の上から3行目と同じなので
符号語は「3」と言う出力を返す。
……みたいな事じゃないだろうか。ざっくり言ってしまえば。
と、考えて、文字列圧縮用の基数変換プログラムを書いている。
そのプログラムを書く上で「nのp乗ループする関数」が必要になって、書いた。
単純な関数なんだけど最初は頭こんがらがってて上手く書けなかった。
こんがらがった頭を整理するためにログを出力させながら関数を修整したらこんな(↓)ログが出た。
n:0, p:0, cnt:1, key:
n:0, p:1, cnt:0, key:
n:0, p:2, cnt:0, key:
n:0, p:3, cnt:0, key:
n:0, p:4, cnt:0, key:
n:0, p:5, cnt:0, key:
n:1, p:0, cnt:1, key:
n:1, p:1, cnt:1, key:,0
n:1, p:2, cnt:1, key:,0,0
n:1, p:3, cnt:1, key:,0,0,0
n:1, p:4, cnt:1, key:,0,0,0,0
n:1, p:5, cnt:1, key:,0,0,0,0,0
n:2, p:0, cnt:1, key:
n:2, p:1, cnt:2, key:,1
n:2, p:2, cnt:4, key:,1,1
n:2, p:3, cnt:8, key:,1,1,1
n:2, p:4, cnt:16, key:,1,1,1,1
n:2, p:5, cnt:32, key:,1,1,1,1,1
n:3, p:0, cnt:1, key:
n:3, p:1, cnt:3, key:,2
n:3, p:2, cnt:9, key:,2,2
n:3, p:3, cnt:27, key:,2,2,2
n:3, p:4, cnt:81, key:,2,2,2,2
n:3, p:5, cnt:243, key:,2,2,2,2,2
n:4, p:0, cnt:1, key:
n:4, p:1, cnt:4, key:,3
n:4, p:2, cnt:16, key:,3,3
n:4, p:3, cnt:64, key:,3,3,3
n:4, p:4, cnt:256, key:,3,3,3,3
n:4, p:5, cnt:1024, key:,3,3,3,3,3
n:5, p:0, cnt:1, key:
n:5, p:1, cnt:5, key:,4
n:5, p:2, cnt:25, key:,4,4
n:5, p:3, cnt:125, key:,4,4,4
n:5, p:4, cnt:625, key:,4,4,4,4
n:5, p:5, cnt:3125, key:,4,4,4,4,4
n:0, p:0, cnt:0, key:
cnt:1, key:
n:0, p:0, cnt:0, key:
cnt:0, key:
n:0, p:0, cnt:0, key:
cnt:0, key:
n:0, p:0, cnt:0, key:
cnt:0, key:
n:0, p:0, cnt:0, key:
cnt:0, key:
n:0, p:0, cnt:0, key:
cnt:0, key:
n:1, p:1, cnt:0, key:
cnt:1, key:
n:1, p:1, cnt:0, key:
cnt:1, key:,0
n:1, p:1, cnt:0, key:
n:1, p:1, cnt:0, key:,,0
cnt:1, key:,0,0
n:1, p:1, cnt:0, key:
n:1, p:1, cnt:0, key:,,,0
n:1, p:1, cnt:0, key:,,0,0
cnt:1, key:,0,0,0
n:1, p:1, cnt:0, key:
n:1, p:1, cnt:0, key:,,,,0
n:1, p:1, cnt:0, key:,,,0,0
n:1, p:1, cnt:0, key:,,0,0,0
cnt:1, key:,0,0,0,0
n:1, p:1, cnt:0, key:
n:1, p:1, cnt:0, key:,,,,,0
n:1, p:1, cnt:0, key:,,,,0,0
n:1, p:1, cnt:0, key:,,,0,0,0
n:1, p:1, cnt:0, key:,,0,0,0,0
cnt:1, key:,0,0,0,0,0
n:2, p:2, cnt:0, key:
cnt:1, key:
n:2, p:2, cnt:0, key:
cnt:2, key:,1
n:2, p:2, cnt:0, key:
n:2, p:2, cnt:0, key:,,0
n:2, p:2, cnt:2, key:,1,1
cnt:4, key:,1,1
n:2, p:2, cnt:0, key:
n:2, p:2, cnt:0, key:,,,0
n:2, p:2, cnt:0, key:,,0,0
n:2, p:2, cnt:2, key:,1,1,0
n:2, p:2, cnt:4, key:,1,1,1
n:2, p:2, cnt:4, key:,1,0,1
n:2, p:2, cnt:6, key:,1,1,1
cnt:8, key:,1,1,1
n:2, p:2, cnt:0, key:
n:2, p:2, cnt:0, key:,,,,0
n:2, p:2, cnt:0, key:,,,0,0
n:2, p:2, cnt:0, key:,,0,0,0
n:2, p:2, cnt:2, key:,1,1,0,0
n:2, p:2, cnt:4, key:,1,1,1,0
n:2, p:2, cnt:4, key:,1,0,1,0
n:2, p:2, cnt:6, key:,1,1,1,0
n:2, p:2, cnt:8, key:,1,1,1,1
n:2, p:2, cnt:8, key:,1,1,0,1
n:2, p:2, cnt:8, key:,1,0,0,1
n:2, p:2, cnt:10, key:,1,1,0,1
n:2, p:2, cnt:12, key:,1,1,1,1
n:2, p:2, cnt:12, key:,1,0,1,1
n:2, p:2, cnt:14, key:,1,1,1,1
cnt:16, key:,1,1,1,1
n:2, p:2, cnt:0, key:
n:2, p:2, cnt:0, key:,,,,,0
n:2, p:2, cnt:0, key:,,,,0,0
n:2, p:2, cnt:0, key:,,,0,0,0
n:2, p:2, cnt:0, key:,,0,0,0,0
n:2, p:2, cnt:2, key:,1,1,0,0,0
n:2, p:2, cnt:4, key:,1,1,1,0,0
n:2, p:2, cnt:4, key:,1,0,1,0,0
n:2, p:2, cnt:6, key:,1,1,1,0,0
n:2, p:2, cnt:8, key:,1,1,1,1,0
n:2, p:2, cnt:8, key:,1,1,0,1,0
n:2, p:2, cnt:8, key:,1,0,0,1,0
n:2, p:2, cnt:10, key:,1,1,0,1,0
n:2, p:2, cnt:12, key:,1,1,1,1,0
n:2, p:2, cnt:12, key:,1,0,1,1,0
n:2, p:2, cnt:14, key:,1,1,1,1,0
n:2, p:2, cnt:16, key:,1,1,1,1,1
n:2, p:2, cnt:16, key:,1,1,1,0,1
n:2, p:2, cnt:16, key:,1,1,0,0,1
n:2, p:2, cnt:16, key:,1,0,0,0,1
n:2, p:2, cnt:18, key:,1,1,0,0,1
n:2, p:2, cnt:20, key:,1,1,1,0,1
n:2, p:2, cnt:20, key:,1,0,1,0,1
n:2, p:2, cnt:22, key:,1,1,1,0,1
n:2, p:2, cnt:24, key:,1,1,1,1,1
n:2, p:2, cnt:24, key:,1,1,0,1,1
n:2, p:2, cnt:24, key:,1,0,0,1,1
n:2, p:2, cnt:26, key:,1,1,0,1,1
n:2, p:2, cnt:28, key:,1,1,1,1,1
n:2, p:2, cnt:28, key:,1,0,1,1,1
n:2, p:2, cnt:30, key:,1,1,1,1,1
cnt:32, key:,1,1,1,1,1
n:3, p:3, cnt:0, key:
cnt:1, key:
n:3, p:3, cnt:0, key:
cnt:3, key:,2
n:3, p:3, cnt:0, key:
n:3, p:3, cnt:0, key:,,0
n:3, p:3, cnt:3, key:,2,1
n:3, p:3, cnt:6, key:,2,2
cnt:9, key:,2,2
n:3, p:3, cnt:0, key:
n:3, p:3, cnt:0, key:,,,0
n:3, p:3, cnt:0, key:,,0,0
n:3, p:3, cnt:3, key:,2,1,0
n:3, p:3, cnt:6, key:,2,2,0
n:3, p:3, cnt:9, key:,2,2,1
n:3, p:3, cnt:9, key:,2,0,1
n:3, p:3, cnt:12, key:,2,1,1
n:3, p:3, cnt:15, key:,2,2,1
n:3, p:3, cnt:18, key:,2,2,2
n:3, p:3, cnt:18, key:,2,0,2
n:3, p:3, cnt:21, key:,2,1,2
n:3, p:3, cnt:24, key:,2,2,2
cnt:27, key:,2,2,2
n:3, p:3, cnt:0, key:
n:3, p:3, cnt:0, key:,,,,0
n:3, p:3, cnt:0, key:,,,0,0
n:3, p:3, cnt:0, key:,,0,0,0
n:3, p:3, cnt:3, key:,2,1,0,0
n:3, p:3, cnt:6, key:,2,2,0,0
n:3, p:3, cnt:9, key:,2,2,1,0
n:3, p:3, cnt:9, key:,2,0,1,0
n:3, p:3, cnt:12, key:,2,1,1,0
n:3, p:3, cnt:15, key:,2,2,1,0
n:3, p:3, cnt:18, key:,2,2,2,0
n:3, p:3, cnt:18, key:,2,0,2,0
n:3, p:3, cnt:21, key:,2,1,2,0
n:3, p:3, cnt:24, key:,2,2,2,0
n:3, p:3, cnt:27, key:,2,2,2,1
n:3, p:3, cnt:27, key:,2,2,0,1
n:3, p:3, cnt:27, key:,2,0,0,1
n:3, p:3, cnt:30, key:,2,1,0,1
n:3, p:3, cnt:33, key:,2,2,0,1
n:3, p:3, cnt:36, key:,2,2,1,1
n:3, p:3, cnt:36, key:,2,0,1,1
n:3, p:3, cnt:39, key:,2,1,1,1
n:3, p:3, cnt:42, key:,2,2,1,1
n:3, p:3, cnt:45, key:,2,2,2,1
n:3, p:3, cnt:45, key:,2,0,2,1
n:3, p:3, cnt:48, key:,2,1,2,1
n:3, p:3, cnt:51, key:,2,2,2,1
n:3, p:3, cnt:54, key:,2,2,2,2
n:3, p:3, cnt:54, key:,2,2,0,2
n:3, p:3, cnt:54, key:,2,0,0,2
n:3, p:3, cnt:57, key:,2,1,0,2
n:3, p:3, cnt:60, key:,2,2,0,2
n:3, p:3, cnt:63, key:,2,2,1,2
n:3, p:3, cnt:63, key:,2,0,1,2
n:3, p:3, cnt:66, key:,2,1,1,2
n:3, p:3, cnt:69, key:,2,2,1,2
n:3, p:3, cnt:72, key:,2,2,2,2
n:3, p:3, cnt:72, key:,2,0,2,2
n:3, p:3, cnt:75, key:,2,1,2,2
n:3, p:3, cnt:78, key:,2,2,2,2
cnt:81, key:,2,2,2,2
・
・
・
これ見て何故か幸福感を得た。
こんな英数字に癒されるような状態の俺って……