トップページ⇒tech
871コメント263KB

圧縮・復元 相談室

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
アルゴリズムは別スレで
0153デフォルトの名無しさんNGNG
その高速性はあたかも弾丸のようだ。
0154デフォルトの名無しさんNGNG
>>152
もう惚れ済みですが何か?
7-zip [ ttp://7-zip.org/ ] とか、
ppmd(1) [ ttp://packages.debian.org/unstable/utils/ppmd.html ] とか。
0155デフォルトの名無しさんNGNG
zip や lha とかってbitごとに辞書化してるんですか?
それともbyteごとなんでしょうか。
よく見る解説ページでは"aaabcccddddff"とかって
アルファベットだったりと概念的なものばかりでよくわからんのですが…
0156デフォルトの名無しさんNGNG
>>155
一般に圧縮ではバイト(あるいはそれ以上の大きさ)が用いられる。
あと、圧縮の説明にアルファベットがよく使われるのは”見える”からだと思われ。
0157155NGNG
なるほどー。
じゃあ何を判断にくぎってるんですか?たとえば
125 124 209 300 125 124 200 111
とかって画像データ があったとすると
125 124 が2つ
209    が1つ
300    が1つ
200 が1つ
111    が1つ

ってのと
125 124 20 が2つ
9 300     が1つ
0 111
0158155NGNG
(失礼しました。続きを)

125 124 20 が2つ
9 300     が1つ
0 111     が1つ
の二通りにできますよね。じっさいのところどうやってるんでしょうか?
0159デフォルトの名無しさんNGNG
>>158
その違いが辞書の違い、すなわち、手法の違い。
LZ'77, LZ'78 くらいでよいから、参考書で勉強すべし。
0160155NGNG
なるほど。もちっと本読んで勉強します。
ありがとうございました
0161デフォルトの名無しさんNGNG
LZSSのソース(作者が使用してもよいと言ってる物)欲しいんですがどこにありますか?
へたれなのでアルゴリズムパクリたいのですが。
0162デフォルトの名無しさんNGNG
>>161
おまいは奥村先生の「最新アルゴリズム事典」を枕にして勉強しる。
0163デフォルトの名無しさんNGNG
>>161
おまいは奥村先生に足を向けて寝ていはいけない。
http://www.matsusaka-u.ac.jp/%7Eokumura/algo/
0164デフォルトの名無しさんNGNG
>>162-163
奥村先生のソースコードは落としましたがあれは本当にLZSSの基本実装みたいな形ですよね?
だもんで速度的にちょっといけてないかなーとへたれ心に思ってみてり。
因みにツリーを使わずハッシュを使うと特許に触れるんでしたっけ?
0165デフォルトの名無しさんNGNG
>>164
LHA, gzip はハッシュを使って実装されている。

つーか、へたれを自称する人は基本をおろそかにしてはいけない。
とりあえず、LHA か gzip のソースを読んでみてわからなかったら、
素直に奥村先生を拝むこと。
0166デフォルトの名無しさんNGNG
>>161
これはどうだ?
http://www.ingnet.or.jp/~kojif/mu/comp/
0167161NGNG
>>164
へたれだからこそコピペなんだよ!
ハッシュ化するのは問題ないんですね。少し勉強して奥村先生コードに手を加えるか…。

>>166
確か最初に落としたけど研究目的以外はx(メッ)なんすヨ。
0168デフォルトの名無しさんNGNG
>>164
LZSS系列だとツリー使っても特許の地雷だらけなのよね。
ハッシュ使っても地雷だらけ、ってのは変わらんけど。
0169デフォルトの名無しさんNGNG
>>168
特許の有効期限、いつになったら切れるんだ?
0170デフォルトの名無しさんNGNG
特許発効から20年ほど
0171デフォルトの名無しさんNGNG
MACのsit形式の仕様書はいつになったら公開されるんですか
不便でしようがありませんよ!

どこかに解析資料とかないでしょうか
0172デフォルトの名無しさんNGNG
>>171
こんなのとか。
ttp://www.stuffit.com/win/sdk/index.html
0173デフォルトの名無しさんNGNG
>20年ほど

長いよねぇ
0174デフォルトの名無しさんNGNG
>>172
ありがとう

登録制なのか…やだなぁ
0175デフォルトの名無しさんNGNG
ttp://www.cmagazine.jp/books/assyuku/index.html

この本とかはどうだろ?
0176C+++NGNG
>>10
 激しくワロタ(笑)。
0177デフォルトの名無しさんNGNG
>>171
ttp://www.speakeasy.org/~russotto/arseniccomp.html
0178デフォルトの名無しさんNGNG
圧縮といえば、2年くらい前にすげー大ボラ吹いた奴が
海外にいなかったっけ?
0179デフォルトの名無しさんNGNG
>>178
1/100に圧縮できるってヤツか?
0180デフォルトの名無しさんNGNG
あげ
0181デフォルトの名無しさんNGNG
おまえらエントロピーくらいわかってるよな?
0182デフォルトの名無しさんNGNG
圧縮・燃焼について語れ
0183デフォルトの名無しさんNGNG
ロータリーエンジンはすごいって事話す事になったんですか?
0184デフォルトの名無しさんNGNG
ロリータエンジン
0185デフォルトの名無しさんNGNG
LZ系で小さいやつ
(コードサイズが小さくて、
符号化・復号化だけで余計な機能がなく、
復号が速いやつ)
ない?
アプリにこっそり組み込んで使いたいんだが。
0186デフォルトの名無しさんNGNG
>>178-179
ZeoSyncキターw
懐かしいな。
0187デフォルトの名無しさんNGNG
>>185
奥村LZSSでもつかっとけ
0188デフォルトの名無しさんNGNG
THCompが最強
0189デフォルトの名無しさんNGNG
>>185
MS-COMPRESSを呼び出すのが簡単かつ確実
0190デフォルトの名無しさんNGNG
>>189
WinでもAIXでも使えるのをおながいします。
0191185NGNG
昔の7行スレのやつ使うことにしました。
ちょっと遅いけどすげー小さいので。
ちなみに190は偽物です。
0192デフォルトの名無しさんNGNG
む、7行であったのか
0193デフォルトの名無しさんNGNG
>>192
7行のだと、Huffman, rangecoder, LZ77系, RLEなら、
それぞれ2つ以上の実装が出ていたはず。
LZ78とかBPEとかもあった。
0194デフォルトの名無しさんNGNG
>>192
これかな?
http://www.isl.cs.gunma-u.ac.jp/~shingo/make/7line/7line.html
0195デフォルトの名無しさんNGNG
違う
0196デフォルトの名無しさんNGNG
数MのXMLを短時間で圧縮解凍したいんですが、圧縮率とパフォーマンスのバランス
の取れた圧縮アルゴリズムってなんでしょう?

XML → 無駄なコード削除 → ブロックソーティング → MFT → ランレングス

 でやってみたんですが、圧縮率は満足なもののブロックソーティングが遅すぎて
使えませんでした。もちろん、高速化は可能だと思うのですが…
0197デフォルトの名無しさんNGNG
>>196
まずbzip2で試してみて、それでも遅ければブロックソートは向いてない、
十分な速度ならブロックソートの高速化が甘いかと。

ブロックソートの高速化についてはこちらなど
M.Hiroi's Home Page ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/
white page ttp://homepage3.nifty.com/wpage/
0198じんばんNGNG
すいません、javaで圧縮・解凍プログラムの作成を試みているのですが、
どこか良いサイトあれば教えてください。
jarでなくてgzipの話です、念のため。
0199デフォルトの名無しさんNGNG
そういったアルゴリズム関連の場合、
いきなりJavaソースを探すのではなく、
C/C++をJavaに翻訳することを薦める。
0200じんばんNGNG
>199
javaには、圧縮関連のインタフェースが提供されているはずなのですが。。
圧縮クラスだとか圧縮メソッドのような。。
0201デフォルトの名無しさんNGNG
>>198

> 標準的な ZIP ファイル形式および GZIP ファイル形式を読み取ったり、書き出したりするためのクラスを提供します。

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/zip/package-summary.html
0202じんばんNGNG
そこはおとずれました。サンプルプログラムを教えてください。
0203じんばんNGNG
見つけた。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5688&forum=12
0204デフォルトの名無しさんNGNG
マルチメディアのファイルフォーマットを作成中なのですが
ストリーミングに向いた、圧縮方法を教えてください。
0205デフォルトの名無しさんNGNG
>>204
うぐっ!
書き損ねた。>>204は携帯電話によく搭載されてるSMAFみたいな
奴を考えてます。
0206デフォルトの名無しさんNGNG
ストリーミングと圧縮はあまり関係ないんじゃないのか?
あえて言うなら、ストリーミングにはデータ欠損が付き物なので
データが足りなくても質を下げて再生できるようなフォーマットが必要だろう。
最初の数パケットで数フレーム分を荒く再生できるとか。
0207デフォルトの名無しさんNGNG
>>206
すると、圧縮しないほうがいいってことでしょうか?
0208デフォルトの名無しさんNGNG
いや、そういう意味ではなくて、ストリーミングに適しているかどうかは
アルゴリズムよりも実装の問題だという事。
圧縮は当然する。
しないと送受信が間に合わないでしょ。

といっても具体的に知っている訳じゃないので一般論でしかないけどね。
とりあえずmpegとか調べてみては如何かな?
0209デフォルトの名無しさんNGNG
>>204
「携帯 ムービー フォーマット」でググればそれらしい形式が出てくるんだから
更にそれらのフォーマットを調べれば済むんじゃないかなぁ。
0210デフォルトの名無しさんNGNG
質問です。
backup[1]という名前のフォルダの中に次のようなファイルが入っているとします。
 regcopy.exe
 help.chm
 online.htm
 readme.txt
別のbackup[2]というフォルダの中にもbackup[1]と全く同じファイルが入っているとします。

このbackup[1]とbackup[2]のフォルダをそれぞれLZH形式に圧縮します。
圧縮したこれら2つのファイルのバイナリを比較したところバイナリが一致しません。
上記4つの各ファイルのバイナリは一致しているのに、なぜ圧縮すると圧縮ファイルのバイナリが一致しなくなるのでしょうか?

宜しくお願いします。m(゚д゚)m
0211デフォルトの名無しさんNGNG
釣りか?
フォルダごと圧縮してるなら、フォルダの名前が違うから。
0212210NGNG
>>211
いや、最初はそれが原因かと思ったので、フォルダ名を同じにして圧縮してみたんですが、
やはりバイナリが一致しないんですよ。
どうやら、フォルダ名はバイナリに反映されないようですね。

今度はZIP形式に圧縮し直して試してみたんですが、やはりバイナリが一致しません。
うーん、、何故?なぜなんだろう。。
0213デフォルトの名無しさんNGNG
フォルダのタイムスタンプが違うんだろ。たぶん。
タイムスタンプも統一(偽造)してやってみて。
0214210NGNG
>>213
レスありがとうございます。
タイムスタンプは一致させているんですが、やはりバイナリが一致しません。
どうやら、ファイルの圧縮順が違ってみたいです。

例えば、backup[1]では、
regcopy.exe→help.chm→online.htm→readme.txt
のような順で圧縮処理しているのに対し、backup[2]では、
help.chm→online.htm→readme.txt→regcopy.exe
のような順で圧縮処理しているようなのです。

つまり、圧縮書庫内に格納されているファイル順が異なるため、バイナリが一致しないようなのです。
そこで、フォルダ内のファイルを名前順で並べかえてから圧縮したのですが、圧縮順は変わらないままです。

何か良い方法はないものでしょうか?
OS:WinME
アーカイバ:Easy圧縮
0215デフォルトの名無しさんNGNG
ファイルの列挙順はファイルシステムに依存するから、
それを制御するのはWindowsでは難しいだろうな。

ところで個人的には「どうしてそうしたいのか」が不明なんだが。
0216210NGNG
>>215
なるほど、やはりファイルシステム依存でしたか。
アーカイバ側の設定で名前順でソートしたらバイナリ一致確認できました。

>ところで個人的には「どうしてそうしたいのか」が不明なんだが。
書庫内の格納順が名前順になってないと、解凍後に名前順に並べ替えないといけないんですよ。
これって気になりませんか?
0217デフォルトの名無しさんNGNG
いや別に並び順なんてのは表示の問題であって
内部処理がどうなってようが気にならんがね。
実際FATだかNTFSだかがどんな順番で格納してるかなんか
気にしてないだろ? もちろんファイラで一覧表示するときは
なんかの基準でソートされてないと見づらいけどね。

アーカイブも同じだと思う。実際にどの順で格納されてようが
別に気にならないな。中に何が入ってるか表示するときに
ソートすればいいだけの話だから。
0218デフォルトの名無しさんNGNG
>>216
勝手に並べ替えされると「あぁ、名前順に格納されてるのか」とか考えるバカが出るような気もするが。
0219デフォルトの名無しさんNGNG
ファイルを圧縮するんじゃなくてメモリ内のデータをファイル名を指定して直接
LZH圧縮ファイルに出力したいんだけどやっぱハフマン法とか勉強しなきゃできないん?
0220デフォルトの名無しさんNGNG
>>219
zlibならそういう使い方もできるんだが、LHAでは聞いたことないな。
LHAという縛りがあるなら勉強してクローン作るしかないかもしらん。
LHAじゃなくても良くて単に圧縮したいだけならzlibが使えると思う。
0221デフォルトの名無しさんNGNG
>>220
レスサンクス
LZH圧縮しる!っていわれてるんで参考書でも買ってきて勉強しマフ
0222デフォルトの名無しさんNGNG
>>219
unlha32.dll で UnlhaCompressMem とか使えばできなかったっけ?
0223デフォルトの名無しさんNGNG
>>222
情報サンクス
ちょっと試してみますた
メモリ圧縮は可能だけど解凍ソフトで解凍してもファイルが出来ないよ・・orz
やはり自作しるしかないのか・・はぁ・・
0224223NGNG
出来ないと思ってたのは自分のミスですた・・・
これでデータ長がDWORDの設定範囲を超えるデータを
1ファイルにまとめることが可能なら・・・これで十分いけそうでつ
>>220さん
>>222さん
ありがたう!
0225デフォルトの名無しさんNGNG
自動解凍のプログラムを作るのに参考になるページはありませんか?
解凍後にいろいろ処理をしたいのですが、既存のをそのまま使うのは
無理そうなんです。
解凍後に指定のEXEファイルを実行、というのでは解凍中のエラー時の
処理などがカスタマイズできないので使えないんです。
0226login:PenguinNGNG
>>225
makeとかantとかを強制させるとか
0227デフォルトの名無しさんNGNG
>>225
installshield(?)を参考にしる
0228デフォルトの名無しさんNGNG
>>225
プログラムの参考にはならないだろうが、
DGCAが、自動解凍後に任意のプログラムを実行する機能を持っている。
0229デフォルトの名無しさんNGNG
>>228
そんなんlhaだって持ってるぞ。
っつーか普通は持ってるんじゃないか?
0230デフォルトの名無しさんNGNG
>>229
% lha --version
lha for unix version 1.14g
% lha
...
LHa for UNIX V 1.14i Modified 2000 Tsugio Okamoto

ごめん。よくわかんない。
DOS版にはそういう機能があるの???
0231デフォルトの名無しさんNGNG
>>230
そもそもunix版では自己解凍書庫つくれんだろーが。
0232デフォルトの名無しさんNGNG
>>230-231
sharの仕組みを導入して何でも自己解凍化してしまえばok
0233デフォルトの名無しさんNGNG
 
0234デフォルトの名無しさんNGNG
0235デフォルトの名無しさんNGNG
既存圧縮アルゴリズムを上回る圧縮率を開発できれば食いっパくれないんだろうなぁ
0236デフォルトの名無しさんNGNG
たかだか 1%程度改善できても誰もよろこばんと思われ。
0237デフォルトの名無しさんNGNG
開発しただけではどうだかな。その後のマーケティング次第でなんとでも。
それに圧縮率だけなら既存のでもシャノン限界に肉薄しているのがあるし、
圧縮速度やメモリ効率や使い勝手も優れてないとこれから普及するのは難しい。
0238デフォルトの名無しさんNGNG
いま,バッファにあるデータを
圧縮したり,展開したりする必要があるんだが,
統合アーカイバプロジェクトにあるような
圧縮展開ライブラリは「ことごとく」,
ファイルから入れて,ファイルに出すような,
API しか用意していない.

バッファで使えるようなライブラリ知らない?
0239デフォルトの名無しさんNGNG
>>238
少なくとも unlha32.dll と unzip32.dll はメモリから圧縮、解凍できるが。
っつか、>>222 で既出。
0240デフォルトの名無しさんNGNG
>>239

lnlha32.dll では圧縮したデータを直接バッファに
出すことはできない

unzip32.dll では圧縮そのものができない
0241デフォルトの名無しさんNGNG
だとすると素直にzlib使う感じかなぁ。
0242デフォルトの名無しさんNGNG
すいません。馬鹿な質問かも知れませんが圧縮ってどうやってやるんですか?
例えばバイナリは1バイトで必ず0〜255の値しか取らないじゃないですか。
それを圧縮したら戻らなくなっちゃう気がするんですけど…
0243デフォルトの名無しさんNGNG
>>242
まずはこの辺読めば?
ttp://homepage1.nifty.com/snap/room03/c02/comp/comp.html
0244デフォルトの名無しさんNGNG
>>240
それなら、バッファにあるデータをバッファに圧縮、展開と書かないと分からないよ。

展開はともかく、圧縮データをバッファに吐くのは
圧縮できなくてデータが増える事も考慮すると、ちと面倒くさいね。
0245デフォルトの名無しさんNGNG
要するに可逆圧縮は連続データがなければ圧縮というよりファイルサイズが増えるってことですかね…
なんとなくわかりました。ありがとうございます。
0246デフォルトの名無しさんNGNG
>>245
ほとんどわかってないぞお前。
0247デフォルトの名無しさんNGNG
>>243
そこはLZ78符号 ≒ LZ77符号 >> 算術符号 > ハフマン符号 >> 連長符号
みたいな比較をしていて解説としてはちょっとおかしいぞ。
LZ符号と算術・ハフマン符号を比較するのは無理がある。
0248デフォルトの名無しさんNGNG
>>244
> 展開はともかく、圧縮データをバッファに吐くのは
> 圧縮できなくてデータが増える事も考慮すると、ちと面倒くさいね

ん? 意味わからん
ちぢまない最悪のケースを考慮して,
バッファを用意させればいいだけの話じゃないか
0249デフォルトの名無しさんNGNG
>>248
最悪のケースを調べるのが面倒くさいって事。

deflate でやるなら deflate のフォーマットを調べないと最悪のケースはわからん。
適当にやると不具合が出たときに泣きを見ることになる。
0250デフォルトの名無しさんNGNG
GCAってのはどれだけ優秀なの?
解凍速度優先型らしいけど、ホントにゲームに使ってる方いらっしゃる?
0251デフォルトの名無しさんNGNG
たとえばランレングス法とかのように("aaabbc" => "a3b2")
日本語を含む文字列(char型の配列)を圧縮して、
出力がバイナリでない圧縮方法はないですか?
ランレングス法は通常のテキストだとあんまり意味がないもんで。
0252デフォルトの名無しさんNGNG
>>251
そんな特異な圧縮方法はありそうにない。
ってか、ほとんど仕様が決まってるじゃん。自前で用意しる!
■ このスレッドは過去ログ倉庫に格納されています