トップページ⇒tech
992コメント329KB

【2ch】圧縮アルゴリズム【オリジナル】

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
おい、おまえら圧縮ソフト作ってみませんか?
中途半端に圧縮されて拡張子が.2ch
0703デフォルトの名無しさんNGNG
>>702
コンソールアプリなら、
gzip, bzip2 互換のインタフェースの方が使いやすい。
0704デフォルトの名無しさんNGNG
まだやってんのか。しつこいネタだな。
画像どころかCソースでも圧縮できない圧縮法に何の意味があんの?
0705デフォルトの名無しさんNGNG
>>704
「圧縮できない」ネタうざすぎ。
なんの工夫もなく「圧縮できない」というウソを繰り返すだけのやつは
もう飽きたってば。

>>690 や >>694 のとおりCソースもほぼ50%に圧縮できている。
以後は >>647 >>690 >>694 に対抗したコメントを捏造するくらいの
工夫をせよ。
0706デフォルトの名無しさんNGNG
だから、ねつ造したコメントはもう飽きたってーの。
圧縮できた妄想患者はすれ違いだからさっさと出て行け。
0707デフォルトの名無しさんNGNG
まあまあ。
本人たちが圧縮できてると思ってるんなら、それでいいじゃん。
彼らはそれで圧縮して満足なんだし、圧縮できないと思えば
普通のアーカイバを使えば済むこと。

---------------終了---------------
0708デフォルトの名無しさんNGNG
「彼ら」って言うか、「彼」だけどね。
0709デフォルトの名無しさんNGNG
>>706-708
だから工夫しろって。
せめて >>647 に一言いってみろや。
2次のMTFと同等だから圧縮できて当り前だろ?
0710デフォルトの名無しさんNGNG
706=707=708 ウザイ氏ね
0711デフォルトの名無しさんNGNG
同等じゃねーよ。もう飽きたよ。お前こそ工夫しろ。
0712デフォルトの名無しさんNGNG
>>709
彼(ら)の頭ではうpされたコードどころかword countも理解できません。
0713デフォルトの名無しさんNGNG
>>711
647に一言いってみろや。なんにも言えないんだろ(藁
0714デフォルトの名無しさんNGNG
>>704-712
圧縮できる/できない で埋め立てるつもりか?
0715デフォルトの名無しさんNGNG
Calgary, 2chコーダ, 2次MTF, 元データ(bytes)

bib: 66314, 66687, 111261
book1: 470878, 470260, 768771
book2: 361427, 360827, 610856
geo: 75105, 76935, 102400
news: 235941, 235700, 377109
obj1: 13857, 14105, 21504
obj2: 127266, 126602, 246814
paper1: 31091, 31521, 53161
paper2: 48992, 49321, 82199
paper3: 28162, 28544, 46526
paper4: 8030, 8332, 13286
paper5: 7115, 7416, 11954
paper6: 22117, 22507, 38105
pic: 159535, 159648, 513216
progc: 21760, 22223, 39611
progl: 35562, 35849, 71646
progp: 23932, 24316, 49379
trans: 49036, 49343, 93695

優劣は微妙だが誤差範囲かも
0716デフォルトの名無しさんNGNG
ブロックサイズを大きくしていけば(順序が違うだけで)
平均符号長が2次MTFの出力に漸近するのは明らか。
0717デフォルトの名無しさんNGNG
アルゴリズムはともかく >>649-654 のプログラミングは
なかなか見事だと思う
0718デフォルトの名無しさんNGNG
拡張子2chにこだわるやつはいったい2chの何なんだ?
ただの名無しだろ?
0719デフォルトの名無しさんNGNG
yzなんとかみたいな、自分の名前を出すのは恥ずかしい行為だと思ったから2chにしたんだろ。
もっとも>>649-654は十分なアイデアが出尽くす前に2chエンコーダ・デコーダを
名乗ってしまったわけで、それはそれで名無しではあるが「俺が2chエンコーダ・
デコーダの作者だ」と主張しているようでいかがなものかと。
0720デフォルトの名無しさんNGNG
2chにこだわってるのは>>1か馬鹿
0721デフォルトの名無しさんNGNG
>>719
>十分なアイデアが出尽くす前に2chエンコーダ・デコーダを
>名乗ってしまった

もうここらでいいんじゃない? 中途半端なところで。
こんな駄スレに次スレは立たないだろうし。
0722デフォルトの名無しさんNGNG
おい!も前ら!
>>649-654を試してみたよ。
>>649-654を圧縮してみたわけよ。
そしたら1.93KBが1.00KBになったわけよ。
で、驚きながら出コードしてみたわけよ。
そしたら511バイトになったわけよw

ネカマ口調で書いてみたけど、
なんかコンパイルでミスったのか?オレは。
0723デフォルトの名無しさんNGNG
一時期の勢いなら次スレ行くんじゃないかと思ったが、ネタが尽きて終わったか…
ま、これもひとつの2chではあるな。

>>722
main()の頭に
setmode (fileno (stdin), O_BINARY);
setmode (fileno (stdout), O_BINARY);
入れてみても駄目かい?
0724デフォルトの名無しさんNGNG
>>540 を文字単位じゃなくて
4ビット単位とか2ビット単位とか1ビット単位で
並び替えるとどーなるんでしょう? 意味無し?
0725デフォルトの名無しさんNGNG
>>724

(1)次数に制限のない高次のモデルを使って、
(2)符号長を1bitより短くできるような符号化をするなら、
入力を短いbitで切ってもあまり関係ない。

540とSSSだとどっちも充たさないから短いbitで切ると損。
0726デフォルトの名無しさんNGNG
むしろ16bitずつ切ることを考えた方が良いのでは?
0727デフォルトの名無しさんNGNG
しばらく見ないうちにおもしろくなってるね。
テキスト系でだいたい半分。
当初の目的のAA系だとものによって20%くらいまで減らせるようだ。

解凍がなかなか早いのもGood
0728デフォルトの名無しさんNGNG
>>651 のコードにバグがあると思う。
unsigned char buffer[BLOCK_SIZE];
は
unsigned char buffer[BLOCK_SIZE + 1];
としないとマズイのでは。
0729デフォルトの名無しさんNGNG
256通りにソートする替わりに直前の2バイト見て65536通りに
ソートしたらさらに圧縮率が上がったけど、けっきょく文脈ソートや
ブロックソートに近づいているようで鬱
0730デフォルトの名無しさんNGNG
おまえらに .2chの拡張子を語れるちからはナイ

.DQNがおにあいだ

まずDQNkarahajimere
0731デフォルトの名無しさんNGNG
>730
IMEを全然操れてないところがDQNぽくてナイス
0732デフォルトの名無しさんNGNG
拡張子 .AA
0733デフォルトの名無しさんNGNG
拡張子 .AAA(アスキー アート アーカイブ)希望
0734デフォルトの名無しさんNGNG
拡張子はいいから技術について語れろ喪前質
0735デフォルトの名無しさんNGNG
すでに似たようなのがありそうですけれども、LZ78系の辞書をMTFで管理するのはどうでせう。

compressなんかだと単純に出現順に割り当てた
符号語を出力しますが、それをさらにMTF+可変長符号で
頻度が高いものほど短くなるように符号化する。

あらかじめ決めた辞書サイズが溢れたら、MTFで
いちばん下のところ(最近使われていないところ)
を辞書から削除する。
0736デフォルトの名無しさんNGNG
>>735

辞書の捨て方はBTLZ(V.42bisに使われたやつ)に似ているが、
あれはMTF符号化をしていなかった気がする。
0737デフォルトの名無しさんNGNG
>>735
LZ78系だと基本的には辞書に登録する単語がどんどん長くなるわけだけど
そうすると新しく登録した単語ばかりが使われることになるだろうから
MTFが効かないような気もする。

最長不使用法で古い単語を捨てて辞書を小さく保つのは有効のはず。
単純なLZ78に組み込む場合はその処理に時間がかかるのがデメリットだけど
MTFに組み合わせるなら殆ど負担にはならないのが利点かな?
0738デフォルトの名無しさんNGNG
でも、辞書のエントリを単純に捨てるわけにはいかないよね?

そのエントリが他のエントリから参照されているかも知れないから。
その時はどうする? 子供も全て捨てるか、「子供のいない最も古い
やつを捨てる」か。
0739デフォルトの名無しさんNGNG
LZ78とMTFは相性悪いよ。

MTFは「最近出てきたものがまたすぐ出てくる」とき良く圧縮できる。
LZ78は「一度出てきたものは辞書に登録して、
なるべく同じ出力を繰り返さない」ことを狙いとしている。
0740SYN ◆8smMJ0UaoA NGNG
MTFはとりあえず簡単なモデル化をしたいときには便利ですが、
きちんとした符号化を考えた時、最適(とはいわないでも良好)なモデル化とはいいがたいです。
無条件に先頭に持ってくるのは少々乱暴な感じ。
出現率をきちんと管理できるのであれば、「移動させる」MTFは必要ないです。
0741SYN ◆8smMJ0UaoA NGNG
>>465
GCAは実験的作品なので糞なのは認めます。ごめんなさい。
ただ、ガイシュツの理論だけではないです。
BWT+MTF+RangeCoderで作ってみるとわかりますが、
それだけではあまり圧縮率が出せません。
0742SYN ◆8smMJ0UaoA NGNG
>>469
偉そうにしているように見えたら申し訳ないです。
内輪でゲーム用ツールとして公開していただけですので…。
勘弁したってください。
0743デフォルトの名無しさんNGNG
お、SYNさんだ。開発がんがってね(*^ー゚)ノ
0744SYN ◆8smMJ0UaoA NGNG
>>460
気に入らないことがあるなら私に直接言ってください。
fjの方の方でしたら、知っていると思いますが、
「ヤりたい」のなら私はそれに付き合うつもりもあります。
某TRPG関連の方でしたら、本当の事実を知らないだけです。
その場合も私に連絡をください。真実をお伝えしますから。

わざと壊した.gcaファイルを配布する人や、ウィルス入りのファイルを
配布する人もいて、本当に困るよ…。
0745デフォルトの名無しさんNGNG
来ると思った。
まぁ公開アルゴリズムをつかいながGCAソース非公開
アーカイバプロジェクトへのGCA/APIの一部非公開
が問題だな
0746SYN ◆8smMJ0UaoA NGNG
>>745
ソースを公開していないのは、仕様変更がしにくくなるからです。
そういう意味でGCAはまだ完成していません。真打はGCAではないですし…。
それにGCAみたいなしょぼいソフトのソースなど誰も見たがらないと思う。
0747SYN ◆8smMJ0UaoA NGNG
話をアルゴリズムに戻すと、
限定ソートのメリットってほとんどないです。szipで使われていますが、
完全ブロックソートでも、あれに近いぐらいの速度が出ます。
完全=大まかにソート(限定ソート)+αなのですが、このαの部分って
ほとんどのファイルのデータでは極小なので、差はほとんど出ないです。
0748デフォルトの名無しさんNGNG
>>747
その割にB&Wはソートの高速化に苦労していたみたいだが。
特にバイナリで0x00が大量に続くようなとき、単純なソートだと
恐ろしく遅くなるよ。
0749デフォルトの名無しさんNGNG
だれだー7行スレに依頼したのはw
0750デフォルトの名無しさんNGNG
なんか見覚えのあるコテハンが現れて偉そうなこと言ってると思ったらGCAか。
アルゴリズムがどうの言ってる暇があったら自己展開書庫のヘタレUIを改善して欲しいよ…
0751デフォルトの名無しさんNGNG
>>748
だから最初にランレングスしたり
ブロックのバイト列の終端にどの数よりも必ず大きく(小さく)なる値を割り当てて
比較長を短くしたりする、いろいろな工夫があるんだろ?
0752デフォルトの名無しさんNGNG
ちなみに、限定ソートはメリットが無いと言うが、
ブロックサイズを(完全と比べて)果てしなく大きく取ることが出来るので
ある種のデータではブロックが小さい完全ソートより
良好な結果を得ることが出来ると思うんだが。
0753デフォルトの名無しさんNGNG
>>751
だから単純なソートだと遅いから高速化に苦労してたって、>>748が言ってるだろ?
0754デフォルトの名無しさんNGNG
>>753
それならば、すでに先人が苦労した成果があるんだから
後からそれを利用するだけなら大した苦労も無いだろう。
0755デフォルトの名無しさんNGNG
>>754
話の筋を追えんやつだな(w
0756SYN ◆8smMJ0UaoA NGNG
>>750
SFXにそんな要望があるとは知らなかった。スマソ。
次のソフトで改善します。ありがとう。
0757SYN ◆8smMJ0UaoA NGNG
>>752
そうなんですか?どうやったら出来るのでしょうか…。
完全も限定も、必要なバッファサイズはO(n)になりませんか?
0758デフォルトの名無しさんNGNG
限定ソートの利点:コードが小さい。
80行で完全ソート書いてみて >>SYN
0759デフォルトの名無しさんNGNG
7行スレに持ってけば7行未満で書いてくれそうだな(w
0760デフォルトの名無しさんNGNG
コテハンが嫌われる理由がわかったようなきがする

0761デフォルトの名無しさんNGNG
>>757
オーダーにするとその通りだけど、限定ソートなら 1(n/2)+ちょっと で出来るでしょ。
0762デフォルトの名無しさんNGNG
なんかこっちではコテハン不評なのでやめます。

>>758
限定ソートほどじゃないけど、速度を気にしなければ、
普通に書いても2,30行ぐらいでいけます。
ちなみに展開の方は普通に10行ぐらいで書けます。

>>761
確かにバッファは減らせるけど、それによって確保できるブロックサイズは
精々数倍程度で、果てしなく大きくってほどじゃないと思うけど…
それにブロックサイズは無闇に大きくするとデータの揺らぎに対応できずに、
結果が悪くなることが多いです。
0763デフォルトの名無しさんNGNG
ホラでなく、昨年のクリスマスに
「540+MTF+ハフマン」
で圧縮ソフト組んだのですが。
MTFとハフマンはそこらへんから拾ってきたソース組み込んだだけだったけど。

いや、別にいいんだけどさ。
0764デフォルトの名無しさんNGNG
>>762
2〜30行ならうpしてみろや
可変長符号だけで10行やそこらはかかると思うんだが
まさか最密充填コード?
0765デフォルトの名無しさんNGNG
ひかえおろうひかえおろう七行プログラマーじゃー
0766ふトンカ ◆wX94FutoNg NGNG
素人考えですが、圧縮率最強なら、たとえば
DVD-ROM片面2層の辞書を持っている、
有名な曲とか、定番の発言とか、全部入っている
そうしたらすごい圧縮できるんてじゃないでしょうか。

10MBのMP3が10KBに!、とか…
まぁそこまでは行かなくともですが、、まぁ多分、原理的に無理だから誰もしないんですよね、、失礼。
0767デフォルトの名無しさんNGNG
そういうアカシックレコード理論は狂おしいほどガイシュツ。
0768デフォルトの名無しさんNGNG
>>SYN
ソース公開しろとまでは言わんが、
GCAのMAC版、Unix版が無いのはいかがなものか?
自分でGCAがヘボイと言っているのならそれは自分でゴミを垂れ流してることになるだろ
0769デフォルトの名無しさんNGNG
自分の作ったものに自信持てや
0770デフォルトの名無しさんNGNG
>>763
クリスマスに、ってのが泣ける。
・゚・(ノД`)・゚・。
0771デフォルトの名無しさんNGNG
>>768
身内用に作ったものを勝手に使用しているようなものなのに、なんでえらそうなんですか
もともと趣味で作ったもの。MacやLinux版をわざわざ出すわけないでしょう
圧縮方法もまだしっかり確立していないのに

今のはテスト版のようなもの。圧縮方法がしっかりときまったらソース公開や他OS版も考えるでしょう
0772デフォルトの名無しさんNGNG
きっとゴミかもしれないけど垂れ流してみたい年頃なんだよ。
0773デフォルトの名無しさんNGNG
ほら早く2、30行で完全ソート圧縮かいてみせろや!
0774デフォルトの名無しさんNGNG
身内用なら身内だけに公開しろ
それだけだ
0775デフォルトの名無しさんNGNG
>>773
ブロックソート関連のWebページ逝けば30行くらいで普通に載ってるぞ。

それに、bzip2のソースも実質そんなていど、といってみるテスト。
0776☆南幸☆NGNG
http://www5e.biglobe.ne.jp/~nanko-m/index.htm
0777751NGNG
>>775
最後の符号化も入れてか?
0778デフォルトの名無しさんNGNG
>>777
MTFが3〜4行、算術符号は5行くらいでかけるから、
qsort使ってよいなら、かなり短くなると思うよ。
0779デフォルトの名無しさんNGNG
>>778
もったいぶらずに早く書いてよ。
0780デフォルトの名無しさんNGNG
>>764
>>773
>>777
普通BWTは圧縮とは言わないから、符号化までは入れないでしょう。
後段の符号化をやらないで、ベタで垂れ流してもBWTであることには変わりないですし。
0781デフォルトの名無しさんNGNG
>>780
なあんだ。ホラかよ。
限定ソートが80行に対して2、30行で書けるとかほざいときながら。
0782778!=780NGNG
>>781
完全ソートなら30行で書けますよね?
限定ソートの方が、工程が多い分だけ長くなるということで。

>>780
始めは俺もBWTだけを書くという話だと思ってたよ。
もしかして>>777>>781はBWTを知らないんじゃないかと・・・
0783デフォルトの名無しさんNGNG
漏れがまだ学生だった頃の糞コードを見たら、
半数が空行やコメントのプログラムが、73行だった。実質30行台。
うはっ、われながらひどいプログラムだ。
0784デフォルトの名無しさんNGNG
>>768
スマソ。それは遅れていただけで、やる気が無いわけではないです。
確かに今のUIがヘボイことは認めざるを得ません。
ただ、UIの発展をどういう方向に進ませるべきか意見を聞きたかったのです。
結果はDGCAで出せると思います。
同時ではないですが、MAC、Linuxの予定もあります。
0785デフォルトの名無しさんNGNG
>>782
いや、bzip2のソースもBurrowsとWheelerの論文も読んでるけどさ。
限定ソートの高速なソースは現に80行かそこらであるわけよ。>>649に。
んで、SYNは限定ソートのメリットなんて無いとほざいたわけよ。
たった2、30行で書けると。
ホラ吹くんじゃねーよ(w
0786デフォルトの名無しさんNGNG
速度の差も極小と言ったよな。
30行で高速なブロックソート圧縮プログラム早くうpして見せろや。
0787デフォルトの名無しさんNGNG
>>785
確かに>>649はそれはそれですごいが、
あれをBWTの限定ソートと呼ぶのはどうかと。
そんなことをいったら1次モデルもBWTの限定版になってしまうがな。
0788デフォルトの名無しさんNGNG
>>785
SYNの言うこといちいち真に受けるなよ(w
だからコテハンなんてろくな香具師じゃないって。
0789デフォルトの名無しさんNGNG
>>787
じゃああんたのいう限定ソートって何?
0790デフォルトの名無しさんNGNG
>>785 お初です。
限定ソートにメリットが無いことは、各種論文でも言われていると思うけど。
本当にブロックソート関連の論文読んだの?
0791デフォルトの名無しさんNGNG
>>789
bzip2みたいに、せめて100kバイト程度のブロックであって欲しいな。
0792デフォルトの名無しさんNGNG
ごちゃごちゃ言い訳してないで
2-30行のソースとやら晒して見せろや
嘘つきヤロウ
0793デフォルトの名無しさんNGNG
>>791
bzip2のブロックと、限定ソートの長さ制限は意味が違う。
0794デフォルトの名無しさんNGNG
>>791
それだけかよ(w
じゃあ#define直せば限定ソートになるのか?
0795デフォルトの名無しさんNGNG
>>785
あー、それなら私が悪かった。申し訳ない。
ソースコードが小さいというがメリットになると思っていなかったので。
ただ、速度を気にしないBWTは異様なほど小さく出来る。
選択ソートやバブルソート使ったら( ゚Д゚)ゴルァ!かもしれませんが。
しかし、ここはIDも出ないのですね。自分の発言がどれかわからなくなりそう。
0796デフォルトの名無しさんNGNG
ttp://member.nifty.ne.jp/DO/algorithm/blocksorting.htm
ここに載っているのにqsort使うと30行くらいじゃないか?
0797デフォルトの名無しさんNGNG
>>792
まてまて、焦ってはいけない。
>>540から>>649が登場するまでだって、あれだけ時間がかかったのだ。
せめて1〜2日はまってやろうじゃないか。
0798デフォルトの名無しさんNGNG
>>762では速度が遅くても良いと書いてあるけど、
本当に速度を気にしなくても良いなら、qsortつかって7行プログラミングできそう。
0799デフォルトの名無しさんNGNG
>>798
がいしゅつです。
すでにBWTは7行プログラミングされてます。
0800デフォルトの名無しさんNGNG
800!
なんだもう7行で概出か・・・俺が間違ってたよ。
0801デフォルトの名無しさんNGNG
>>800
お前誰だよw

>>799
無かったぞ。それともたまたまdat落ちしているpart2にあったとでも?
都合がいいな。
0802デフォルトの名無しさんNGNG
ちゃんと圧縮まで出来ねーと無価値。
■ このスレッドは過去ログ倉庫に格納されています