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

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

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
おい、おまえら圧縮ソフト作ってみませんか?
中途半端に圧縮されて拡張子が.2ch
0084デフォルトの名無しさんNGNG
>>83
BWT->MTF->... よりも MTF->BWT->... の方が大きくなる場合が多いってことでは?
008557NGNG
>79
おれはMWTってのをBWTの誤植って解釈してた。
多分MTFのMとBWTのWTが混ざったんじゃないかな。

>84
Cで簡単なコード書いて試してみた。
Cのコード自身にそれぞれの変換をした結果をLZH(lh5)で圧縮して圧縮率を見たら
 無変換     41.1%
 BWT->MTF  14.1%
 MTF->BWT  19.2%
になった。

使い方
a.exe option input output
 option
  b BWT->MTF
  m MTF->BWT

制限
 入力ファイルは65536Byte以下

動作確認
 CYGWIN_98-4.10 名無し 1.3.12(0.54/3/2) 2002-07-06 02:16 i686 unknown
 gcc version 2.95.3-5 (cygwin special)

コンパイル
 gcc bwt_mtf.c -o bwt_mtf -Wall -O6

※30分で書いたコードだから間違いあるかも。

↓ソースをLZH圧縮&uuencodeしたもの。
begin-base64 644 bwt_mtf.lzh
RQAtbGg1LU4CAACbBQAA1hRpPSAC4ApNCwABQnd0TXRmLmMbAEGgjeqRXkzC
AQBPDntdTMIBAJhjFUhMwgEFAAALyAAAAe5ju9Gmo75yQ9/7tJtbThwBMeDB
SR8CyMi+dkITS23rjql7ht6hlYfG7//u60AIrFY+Bi5gNG0271oTJrrlPmqX
KhXp1Z7tzr4IqUJ8vsjl1ojYju3DproD63bgB7/V8IQyd/fjyGu3N+UliErB
Evn41I+lvePcvxko2PSKTUsNqkShBEYOXaN9ojSdddKQoPQTgLJGawOfEP3k
JSaoqYCFHi4hBULEJKLEdwK1O8hMp/PQMSaSe3Jo65iRQYtLEbIvZFIMNdnz
eFhBnxgEaYLZei68xLzXEwTKpeRDgygjMxOPC9edCRFJQajTCHYUBoaf72vT
pjha7kh+VSqVtkI1hcP6qZk6wPmsqt0PQ/h9Uw6sgTQTBfDDzgR1fKulaKFz
f6tC4o9Z9GLvycaomCfhXKT8xCLf0iBoMyJOUKf+VpIWSzlb1JsnY2TuIZ+L
WMNzPNJp9MMISPhHSeL4ufN/KlE7kguM/oERfK/1Ctp3uxoDg0mB3LCPKd/L
ykbAIFJ/atlSWiJCXi4RU+UhnZawD02ujL2e33esIEJ2GCBVa/vmJwrg7DZ2
JkzxCOYMb9hvhdYIQuEaS7DpJi26MQx11Ux9TY9IFFcNE5SzmMGExbxlfbY1
hmk1qqO87uxz3IXJqeZGw0JswYiqOHbR2+AdzMQb+ccrQg7m0jLFJg/w1cBm
6H4SW2faIxtERa7+cQW0R/T5+ya0RlPNFXrX4NTiKyqBKl6h8ftovxp9bcob
E86h4yqHusqHNupQs9tPm7ci5c6fu78cGMFmDAAA
====
0086デフォルトの名無しさんNGNG
>>85
> おれはMWTってのをBWTの誤植って解釈してた。
大丈夫、大抵の奴はそう思うから。

MTF->BWTの逆にするとサイズが大きくなるのは有名な話だとおもてた。
少なくとも圧縮に関する研究や職業ならMTFがどういうものか知てるので。
0087デフォルトの名無しさんNGNG
>>86
有名な話だと思ってたってことはどっかに解説でもある?
検索してもBWT->MTFしかでてこない。
むしろ↑これが有効なことの方が有名な気がする。

MTFがどういうものかってのは…まんまの認識じゃあまいってことなのか
MTF程度にどうもこうもないと思うんだが(煽りとちゃいますよ)
0088デフォルトの名無しさんNGNG
圧縮について語るなら、たとえば
ttp://www.hn.is.uec.ac.jp/~arimura/compression_papers.html
にリストアップされてるような論文が理解できないとだめだよね。

ttp://www.ingnet.or.jp/~kojif/mu/comp/bwt.htm
あたりの入門用の解説を読んでもたいしたことは書いてない。
0089デフォルトの名無しさんNGNG
あらかじめ辞書データを登録しておけばなんとかなりそうだね。
本体はでかくなるが。
0090デフォルトの名無しさんNGNG
sage
0091デフォルトの名無しさんNGNG
おりじなるぅ
0092デフォルトの名無しさんNGNG
俺はどんなファイルでも圧縮できるソフト作ったぞ。
0093デフォルトの名無しさんNGNG
2ch圧縮プログラム用辞書には"DQN"、"オマエモナー"、"逝ってよし"などの単語を
登録すれば宜しいか。
0094デフォルトの名無しさんNGNG
>>92
それが本当なら今すぐ特許を取れ。
0095デフォルトの名無しさんNGNG
>>93
実際そんなに使われていない罠
009657NGNG
板毎に上位30スレぐらい取ってきて単語の頻度調べてハフマンコード表作って、
それを初期状態とした動的ハフマン使ったら結構圧縮きくかも。

# 眠い頭で考えたからツッコミ歓迎。
0097デフォルトの名無しさんNGNG
>>92
全てのファイルを1バイト以下にできるということだな?
0098デフォルトの名無しさんNGNG
>>92
すべてのファイルを1ビット未満にできると!?
0099デフォルトの名無しさんNGNG
>>98
1ビット未満ってことは0だな?


それはさておき,少し前にランダムデータに対して圧縮できるって話出てたけど
あれはどうなったんだろう。
0100デフォルトの名無しさんNGNG
>>99
1ビット未満は即0ではないのだが・・・まぁいいや。
再帰的に繰り返せば同じことだから。

>それはさておき,少し前にランダムデータに対して圧縮できるって話出てたけど
消えたのではなかろうか。
http://www.zeosync.com/ が404エラーになる。
0101デフォルトの名無しさんNGNG
>>100
無知で申し訳無いんだが,今のコンピュータでビットより高い分解能の単位は表現できるの?
(日本語おかしいかも知れんが許してくれ)
0102デフォルトの名無しさんNGNG
0.7 bit x 10 個 なら 7 bit だろ。
0103デフォルトの名無しさんNGNG
>>102
あ,要するに

7ビット中に10個のファイルの内容を格納する

という意味でつね?納得しますた。
0104デフォルトの名無しさんNGNG
>>103
まぁ算術符号なんかは実直にその概念を実装したものなわけだ。小数ビットの。
一方、ZLなんかも見た目は違うけど、実態は同じ。
0105デフォルトの名無しさんNGNG
>>96
誤解してるのかもしれないが、何故動的ハフマンを使う必要が・・。
別にストリームで圧縮するわけじゃないでしょ?
0106デフォルトの名無しさんNGNG
圧縮率は高いけど
もの凄く処理時間がかかって現段階では実用にならない
アルゴリズムってあるの?
0107デフォルトの名無しさんNGNG
>>106
全てのファイルが1〜十数バイトになるってのが昔あったよ(w
0108デフォルトの名無しさんNGNG
>>106
円周率圧縮
0109?NGNG
>>107
まじ?
それって、シャノンの情報理論とかに反してない?
0110デフォルトの名無しさんNGNG
>>109
 この宇宙で存在しうる全てのデータにインデックスを付けるとしても、せいぜい256bitもあれば十分です
は真でも、全てのデータを256bitに圧縮出来るというのは別の話です。

よく勘違いする人がいるので気をつけましょう
0111デフォルトの名無しさんNGNG
>>108
円周率の数列から目的のデータを検索して
その出現位置でデータを表すってこと?
0112デフォルトの名無しさんNGNG
おまえら、AAに特化ってんだから既存のAAを数百種類プログラムに内蔵させて
それとの差分のみを圧縮すればいいだろ?

シャノンの情報理論に基づきデータの偏りを均一化するんだ。
0113105NGNG
ああ、テーブルを持ちたくないってことか。すまぬ。
0114デフォルトの名無しさんNGNG
>>113
初期状態のハフマンコード表を作るって言ってるんで、それは違うんじゃない?
あくまで推測ですが、動的ハフマンなら出現頻度の偏りの変化に追従できるから
高圧縮になると考えているのではないかと思われ。
0115デフォルトの名無しさんNGNG
MTFがどういうものかってのは…まんまの認識じゃあまいってことなのか
MTF程度にどうもこうもないと思うんだが(煽りとちゃいますよ)
0116デフォルトの名無しさんNGNG
>>109
あと復号方法も考慮に入れてません(アカシックレコードが必要)
0117デフォルトの名無しさんNGNG
>>115
MTFは情報源の特性(無記憶とか定常とか)によって左右されるから気をつける。
最近、EffrosらによってBWTの冗長度が理論的に証明されたけど、
そこではMTFについてかなり細かく(実はそうでもないが)分析がされてたよ。
0118デフォルトの名無しさんNGNG
円周率使用したって、圧縮にはらなんだろw
0119デフォルトの名無しさんNGNG
>>111 それだと逆に増えそう・・・
0120デフォルトの名無しさんNGNG
じゃあ円周率のほかにexp(素数)も使ってくれ
0121デフォルトの名無しさんNGNG
public: searchBit()
 if (assyukuPattern == 0) {
  int i;
  while(searchPI(i++))
   ;
 } else {
  int j;
  long sosuu;
  while((long = getSosuu(j++)) != 0)
   int i;
   while(searchExp(i++, Sosuu)
    ;
  }
  put("ok");
}

private: getSosuu() {
//preaseWrite
}

private: searchPI() {
//preaseWrite
}

private: searchExp() {
//preaseWrite
}
0122デフォルトの名無しさんNGNG
>>119
圧縮可能だったら、圧縮するんだよ。無理ならやらなければいい。
それにたとえ確立が低くても、LZHやZIPが圧縮できたら神だろ?
0123デフォルトの名無しさんNGNG
>>121
素数は http://pc3.2ch.net/test/read.cgi/tech/1018657457/ に頼め
0124デフォルトの名無しさんNGNG
擬似コード

long searchBit(bit* data, long assyukuPattern)
//とにかく探す
 int i;
 if (assyukuPattern == 0) {
  searchPI(i++);
 } else {
  searchExpSosuu(&data, i++, assyukuPattern)
 }
 return i;
}

long searchPI(bit* data, long offset) {
//PIを検索する
}

long searchExpSosuu(bit* data, long offset, long sosuuno) {
//expSosuuを検索する
}

long expSosuu(long n) {
//getSosuuで取得した素数を(1/2)乗し、PIと同じく無限小数化する
}

long getSosuu(long n) {
//n番目の素数を返す(もちろんテーブルを引く)
}

0125デフォルトの名無しさんNGNG
作れ
0126デフォルトの名無しさんNGNG
>>119
> それにたとえ確率が低くても、LZHやZIPが圧縮できたら神だろ?
限りなく低いので却下
0127デフォルトの名無しさんNGNG
>>114
いや、だから初期状態のテーブルはプログラム側でもって、圧縮したファイルには
入れないんでしょう。
0128デフォルトの名無しさんNGNG
URRって圧縮には使えないのかな?
0129デフォルトの名無しさんNGNG
>>119
PPMZとかで再圧縮した方がはるかに縮みそうだ。

>>128
URR って「万能数値表現法」のこと?
ちょっと資料読んでみたけど、算術符号や、(二分)木による数値圧縮法、
などが近い考えなのではないかとふとおもた。
0130デフォルトの名無しさんNGNG
っていうかプログラムがローマ字なのに萎えた
0131デフォルトの名無しさんNGNG
円周率、素数とか言ってる奴は間違いなく偏差値40以下の高卒(藁

圧縮可能ならと言ってるが、その情報を付加するんだから情報量は基本的に増える
ことになるんだよ。円周率やら素数やら増やせば増やすほどな
それらのパターンを増やし、全ての情報パターンを表せるようになったときに
圧縮前のデータとおなじビット数が必要になることに気がつくんだよ(藁

くだらんこと言ってないで確率統計でもやってろ痴呆
0132デフォルトの名無しさんNGNG
口は悪いがまったく131の言うとおりだ
0133デフォルトの名無しさんNGNG
今日は自作自演が多いですね。
0134デフォルトの名無しさんNGNG
>>131
ネタにマジレスするなよ…
0135デフォルトの名無しさんNGNG
>>134
オマエモナー
0136デフォルトの名無しさんNGNG
もう現在の圧縮率で限界近いからな
あとがんばっても5%も減らないだろ
0137デフォルトの名無しさんNGNG
シャノンのどうたらってやつ?
でも、BWTはアレを無視した手法強引にエントロピーを低下させてるんでしょ?
0138デフォルトの名無しさんNGNG
どーでもいいけど非可逆圧縮でいいんじゃない?
圧縮くわしくないけどさ
とくに2chのログなんてかなり省略できると思う

↑を圧縮


非可逆圧縮でよくない?
圧縮シラネーヨ
特に2chのログナンテカナリ省略デキルサ

0139デフォルトの名無しさんNGNG
>>138
下のやつを展開するとどうなるんですか?
0140デフォルトの名無しさんNGNG
ヤパーリ、2ch専用の圧縮形式なんだから2chの性質を使わないとな〜。

人工無能を搭載してありがちな反応を数パターン予測して、
その中から一致するパターンがあればそのパターン番号を出力、
失敗したら通常の圧縮って手もあるな。

つまり、擬似コードで書くとこんな感じな。

void 圧縮(前レス, レス) {
 array= 人工無能(前レス);
 for(i=0; i< array.size; i++) {
  if(レス== array[i]) {
   出力(i);
   (・∀・)カエレ!;
  }
 }
 出力(予測シパーイ);
 出力(通常圧縮(レス));
 (・∀・)カエレ!;
}
0141デフォルトの名無しさんNGNG
やっぱ2ch独特の定型文をテーブルで持つのが良いのでは.
この場合,圧縮率の高いスレは内容の少ない糞スレである確率が高い.
0142デフォルトの名無しさんNGNG
>>141
 原文と一緒に圧縮して何%圧縮出来たかで 作者が同一か判定するというのがあったけど
 圧縮率でクソスレ率を出すのも面白いかもね。

0143デフォルトの名無しさんNGNG
>>137
ワラタ。むちゃくちゃ言うなよ。
エントロピーとエントロピーレートは似て非なるもの。
0144思いつきおとこNGNG
「あいうえおかきくけこさしすせそたちつてと」
 を
「とてつちたそせすしさこけくきかおえういあ」
 の反対と見るようなロジックってありました?
0145デフォルトの名無しさんNGNG
とりあえず圧縮して「.2ch」になれば圧縮比なんてどうでもいいって。
つーかlzhでいいです。
0146デフォルトの名無しさんNGNG
>>145
よくないです・・・・・lzhが拡張子だと、デフォルトではunlhaの方に渡されちゃうよ。
0147デフォルトの名無しさんNGNG
>>146
そりゃ環境依存だ。うちではlzhには何の関連付けもしていない。
unixだと関係ないしな〜
0148デフォルトの名無しさんNGNG
>>147
まぁ結局そうなんですが、やはり.lzhは避けた方がいいのでは。
0149 NGNG
あのさ、サーバーでごみのようにあるdatをlzhで圧縮すると
負荷がかかりまくるでしょうが。
単純にhttp://をEsc文字 <a href= を \
アラーム文字 とかでいいと思うんだけどなー
0150デフォルトの名無しさんNGNG
>>149
あふぉだな
そんなくだらんことしないでgzipしたほうが圧縮率あがるんだよヴォケ
殆どgzipで転送してんだからくだらん加工してサーバーに余計な負荷かけるな史ね
0151デフォルトの名無しさんNGNG
ダウソ症の>>150がいるスレはここですか?
0152デフォルトの名無しさんNGNG
>>150
うわー、おっかなーい。藁
0153デフォルトの名無しさんNGNG
>>150
はいはい。怖い怖い。
ぶるぶる〜



藁
0154 NGNG
いや、まじめに考えようYO!
0155デフォルトの名無しさんNGNG
>>151=>>152=>>153
0156デフォルトの名無しさんNGNG
>>155
151と152と153を同一フレーズに圧縮したら非可逆になっちまうだろうが。
まあ展開結果は「クソレス3件」だけでも構わんがな。
0157デフォルトの名無しさんNGNG
>>156
真面目に考えんなYO。
つーか思いついた。
2ch語を特定の数字に置き換えんの。
1,オマエモナー 2,YO 3,逝ってよし 4,1よ 5,藁・・・・・(2ch語続く)

だれか作ってくださいお願いします。,5,
0158デフォルトの名無しさんNGNG
>>157
>>95
0159デフォルトの名無しさんNGNG
どうやら小学生がいるな。
特定の文字を数字にしたら
今度は数字を符号化しないといけなくなるじゃん。
0160不マジレスNGNG
予約語が256個あって、1バイトで置き換え。
それ以外は原文字のままで1バイトずつ。
で、それら8個集めて別のフラグバイトにどっちかを示すビットを立てていく。
0161デフォルトの名無しさんNGNG
>>160
全部 9bits にするぐらいなら予約語を escape した方が縮むんじゃ…
よっぽど頻繁に出てくればともかく、平文が 9/8 に膨らむと大きそう。
0162デフォルトの名無しさんNGNG
>>155
お前は自作自演を見破れないのか?
0163がいしゅつだったらスマソNGNG
LZSSベース。
ただし、ファイルの先頭より前の部分に2chで頻出する文脈を詰めておき、
そこを初期のスライド窓の位置とする。

圧縮・展開ソフトが固定データを持ってなきゃいけないのが重大な欠点か。
0164デフォルトの名無しさんNGNG
>>163の方法でいいと思うよ
0165デフォルトの名無しさんNGNG
           ___
    .      |(・∀・)|
     .      | ̄ ̄ ̄   ジサクジエン共和国
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____
0166デフォルトの名無しさんNGNG
共和政なのか…
0167デフォルトの名無しさんNGNG
>>138 辺りみたいに、不可逆にしてみるとか…
圧縮時はその時点での 2ch から頻度表作って詰めて、
展開時には初期の辞書で置き換えられた部分は無視するの。
…無視するなら、圧縮前に削除しちゃった方がいいか…
0168デフォルトの名無しさんNGNG
というか全部あぼーん
0169デフォルトの名無しさんNGNG
万一のときに聞いておきたいんですが
圧縮アルゴリズムを発見(発明)した時、
特許とかの申請はどういう風になるんですか?
0170デフォルトの名無しさんNGNG
トウキョウトッキョキョカキョク
0171デフォルトの名無しさんNGNG
リャクシテT.T.K.
0172デフォルトの名無しさんNGNG
http://tmp.2ch.net/test/read.cgi/sisou/1032255483/l50
0173デフォルトの名無しさんNGNG
>>169
「情報処理」にソフトウェアやアルゴリズムの特許についての話が連載中。読め。
0174デフォルトの名無しさんNGNG
別に圧縮しなくても 2ch ってヘッダ付けるだけでいいじゃん
0175 NGNG
>>169
そんなことも知らない奴には発明なんて無理
0176デフォルトの名無しさんNGNG
>165-166 ワラタ
0177デフォルトの名無しさんNGNG
>169
とりあえず2chにアルゴリズムをUP汁。そして各所からリンクを張られろ。
どこかの香具師が勝手に特許とっても申請前に既に一般に知られていれば
特許を無効にできると思われ。
0178デフォルトの名無しさんNGNG
           ___
    .      |(・∀・)|
     .      | ̄ ̄ ̄   ジサクジエン民主主義人民共和国
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____

0179デフォルトの名無しさんNGNG
>>177
>>とりあえず2chにアルゴリズムをUP汁。
これが一番危険と思うんですよね
2chに書き込んだのはすべて2chのものってことになってますから。
まずどっかのサーバーにウプした時点で著作権だけは保持できるはずなんですので
そのあとここに書き込むかもしれません。(まぁ無理かな、いちをおテスト中です)
0180177NGNG
>179
>2chに書き込んだのはすべて2chのものってことになってますから。
そうなのか、知らなかったよ。
じゃあジオとかを避けて適当にUPしてそのURLを2chに晒すのがいい鴨な。

以前、会社でPGやってる香具師が、退職時に自分の作ったコードを
自由に使えるようにする為に、会社で使う前に自分のHPにUPしてた
という話を聞いたことがあるよ。
0181デフォルトの名無しさんNGNG
>2chに書き込んだのはすべて2chのものってことになってますから。

んなわけねーだろ。というわけで晒しあげ。
0182デフォルトの名無しさんNGNG
掲示板の書き込みの著作権は管理人に帰属するとか。
0183デフォルトの名無しさんNGNG
そんな訳ねーだろ、って判例出てなかったっけ?>>182
■ このスレッドは過去ログ倉庫に格納されています