fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.io.*;
  5. import java.util.zip.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. byte[] data = new byte[10000];
  13. int datalen = System.in.read(data);
  14.  
  15. System.out.println(datalen);
  16.  
  17. Deflater df = new Deflater();
  18.  
  19. df.setLevel(Deflater.BEST_COMPRESSION);
  20. df.setInput(data);
  21. df.finish();
  22.  
  23.  
  24. byte[] buf = new byte[10000];
  25.  
  26. while (!df.finished())
  27. {
  28. int len = df.deflate(buf);
  29. out.write(buf, 0, len);
  30. }
  31.  
  32. System.out.println(out.size());
  33. }
  34. }
Success #stdin #stdout 0.1s 320704KB
stdin
784 :(-_-)さん [↓] :2015/10/12(月) 06:11:29 ID:???
うん、前回もこの日本語訳で学習したような気がする
原文のほうはちょろっと眺めてみたが見た覚えが全くない
2年前の俺は英語文章を読む気概は無かったようだ


785 :(-_-)さん [↓] :2015/10/12(月) 06:21:53 ID:???
カスタムハフマンで圧縮はしんどそう
ハフマン符号表を独自に生成(あるいは事前用意)でやるんだろうけど
ある程度のサイズ(ブロックというやつか)読み込んだデータのヒストグラム取って大きな偏りがある場合は
カスタムハフマンで超圧縮できたりしたらすごいんだろうけど
事前用意ならある程度データの偏りがあることが分かってるデータ形式を取り扱うときとかかな
どのみち面倒や


786 :(-_-)さん [↓] :2015/10/12(月) 06:25:39 ID:???
ただ固定ハフマンだとほとんど圧縮できなさそう
同じ連続データが頻出するようなデータ形式じゃないと固定ハフマンより非圧縮ブロック使うほうがいいし
本気で圧縮を考えるならカスタムハフマン使わざるをえないのか・・・


787 :(-_-)さん [↓] :2015/10/12(月) 06:28:14 ID:???
ハフマン符号の生成法自体は書いてあるけど
カスタムハフマンだと符号表の圧縮もしなきゃならんし、何よりブロックフォーマットが面倒


788 :(-_-)さん [↓] :2015/10/12(月) 06:31:24 ID:???
前回は伸張処理だったから固定ハフマンの内容について深く考えなかったけど
やたらめったら同じ連続データが頻出しない限り固定ハフマンを使う価値ねえわ
普通のテキスト文書を圧縮なら単純に頻出文字のビット数抑える目的のカスタムハフマン作るほうが断然いいな


789 :(-_-)さん [↓] :2015/10/12(月) 06:39:36 ID:???
固定ハフマンは3バイト(24bit)以上一致すると半分以下のに減らせる感じではあるが
html文書の圧縮とかなら2文字以上タグやパラメータ名が頻出したとしても
タグやパラメータ名なんて文書全体の大した割合じゃないし、固定ハフマンだとちょろっとしか圧縮できないな
俺がいまこのスレで連投してるレスだって連続データ多くないだろうし
ただヒストグラムで頻出検査しても微妙そうではあるが
stdout
2557
1187