質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • C

    3557questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

簡単な圧縮アルゴリズム

受付中

回答 4

投稿

  • 評価
  • クリップ 2
  • VIEW 5,532

nnahito

score 1689

お世話になっております。

C言語ライクの言語で、インストーラーのようなものを作ってみようと思っているのですが、
圧縮アルゴリズムが理解できません。
簡単なアルゴリズムの名称と、簡単な処理の流れをご教授いただけないでしょうか。
また、実用的なアルゴリズムの名称も教えていただけたら幸いです。
これは、今後に向けて勉強するためです。

よろしくお願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+4

先の書込み以外では、
 統合アーカイバプロジェクト
 http://www.madobe.net/archiver/index.html
が、資料もまとまっている、古くからのサイトです。
各種圧縮形式の、コマンドプロンプト版~DLL版まで、存在します。
圧縮アルゴリズムの解説などもあります。

>インストーラーのようなものを作ってみようと思っているのですが、 
>圧縮アルゴリズムが理解できません。 
を、一緒くたに考えずに、
1.インストーラを、作成する。方法、方式を考える。
 ⇒インストーラの形式には、標準とされる物が、OS毎に存在します。
  が、独自形式にしますか?
  見栄えを除けば、BAT/CMD/PowerShell でも困らないのに、インストーラを作る理由は?
2.インストールファイルのパッケージングの過程で、圧縮も可能なので、
  圧縮するだけですが、何か別な意図がありますか?
3.有償、無償のパッケージングソフトは使用した事がありますか?
  

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/15 15:25

    ご回答有難うございます。

    まず、先に断っておきますが、私が今回インストーラーをつくろうと思ったのは、
    自身の勉強のためです。
    何故かすべてを否定されるような書き方をされて、少し残念に思います。

    最終目標としては、インストーラーとして、データをexeの一つにファイルに纏め、
    配布可能な形式にしたいと考えています。
    ちなみに、その部分は完成しており、残りは圧縮のみとなっています。
    既存のソフトウェアに頼る、その選択肢もありますが、やはりプログラマーとして、
    実際に自分でアルゴリズムを知り、自身の手で書くことに意味があるのではないでしょうか。

    キャンセル

+3

C言語ライクの言語で、インストーラーのようなものを作ってみようと思っているのですが、 

データ圧縮アルゴリズムを大別すると、1ビットもデータ欠損してはいけない「可逆圧縮(lossless)」と、映像・音声データのように多少の歪みを許容する「非可逆圧縮(lossy)」の2つに分類されます。目的が“インストーラー(につかえるアルゴリズム)”とのことですから、まずは「可逆圧縮」のアルゴリズムを当たるべきですね。

簡単なアルゴリズムの名称と、簡単な処理の流れをご教授いただけないでしょうか。 
また、実用的なアルゴリズムの名称も教えていただけたら幸いです。 

古典かつ簡単なところでは「ランレングス圧縮(Run-Length encoding)」や、「ハフマン符号(Huffman coding)」「算術符号(Arithmetic coding)」から調べるのがよいと思います。また、本質的な方法論が異なる「LZ77, LZ78アルゴリズム」あたりが入門向けでしょうか。前者はエントロピー符号(Entropy coding)に、後者は辞書式符号(Dictionary coding)に区分されます。

たとえば データ圧縮法概説 では、かなり丁寧にアルゴリズムを解説しています。

残念ながらいずれのアルゴリズムも”簡単”とは言えませんが、超概念的な説明だけしておきます。
  • エントロピー符号系:データの統計的な偏りを調べて、何度も登場する値には短い符号長(=出力するビットの長さ)を、あまり出てこない値には長い符号長を割り当てる。
  • 辞書式符号系:データ自身を”辞書”つまり値並びのカタログとみなして、既出の値並びと一致したらそれを指す短いインデクス値を、新出の値並びならばそのまま出力する。


いずれも数学的な考え方(情報理論)に基づいたアルゴリズムなので、既に実装されているコードだけ追いかけても、アルゴリズムの本質を理解するのは困難かと思います。結果的には、基礎的な理論から学習したほうが近道かもしれません。単に利用したいだけならば、既存ライブラリの活用を強くお勧めします。


投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

参考情報をいくつか紹介します。
(web 上で "データ 圧縮" で検索すれば、たくさんの情報がヒットします。)

- ウィキペディア データ圧縮 http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E5%9C%A7%E7%B8%AE

- 『世界でもっとも強力な9のアルゴリズム』 データ圧縮(第7章) http://gekkan.bunshun.jp/articles/-/504

- コーディングに役立つ! アルゴリズムの基本 データ量を操る圧縮/展開を究めよう http://www.atmarkit.co.jp/ait/articles/0903/04/news116.html

- zlib の使い方 http://s-yata.jp/docs/zlib/
... 
zlib は圧縮アルゴリズムの一種である Deflate のライブラリであり,C#, Haskell, Java, Perl, Python, Ruby など,主要なプログラミング言語では,軒並み使えるように整備されています.圧縮・伸長が高速なこともあり,ディスク領域の有効利用や通信量の削減を目的として,zlib は気軽に利用できます.本記事は,C 言語から zlib を利用する方法の解説になっています.
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/15 15:22

    ご回答有難うございます。
    もちろん検索しなかったわけではなく、検索し、様々なものを見た上で、
    学習し易いものはどれかを知りたくて質問させて頂いております。

    キャンセル

  • 2015/02/15 20:55

    どんなページの内容の以上のものを欲しているのかが、質問文にあれば、そのようページを紹介することができたかもしれません。
    そのような情報がないので、基礎・導入的なページを紹介しました。
    データ圧縮は幅も深さもあるトピックです。

    キャンセル

  • 2015/02/16 10:14

    返信有難うございます.
    私も,少し質問の内容を端折り過ぎたと反省しております.
    申し訳ありません.

    キャンセル

+1

- [LHAとZIP 圧縮アルゴリズム×プログラミング入門](http://www.sbcr.jp/products/4797324287.html)

発刊当時に読みましたが、これの「アルゴリズム編」は圧縮アルゴリズムに関して初歩から分かりやすく書いていてくれたはずです。一読されてはいかがでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/16 10:15

    ご回答有難うございます.
    検討させていただきます

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    node.js(jsonwebtoken)の使用可能暗号アルゴリズムについて

    node.jsを用いてopenIdを認証に用いたシステムを express4で作っています。 jsonwebtoken,express-jwtライブラリを用いて作っているのですが、

  • 受付中

    vbscriptで配列内計算

    題名の通りです。 vbscriptで配列内計算する方法はありますか? 1+1にとどまらず、1+1+1+1+1+1+1と伸ばしていくことを前提としております。 説明が足りないと

  • 受付中

    アルゴリズムの入門書

    アルゴリズム入門の勉強におすすめの書籍、サイトなど教えてもらえないでしょうか? CheckiOというpython学習サイトを進めているのですが、難しくてなかなか進まないのでアルゴ

  • 受付中

    敵AIの経路探索について

    今、Unityで3Dのローグライクを作ろうとしていて敵を作成中なのですが障害物を検索し動的に避けてPlayerを追尾するといったことが中々上手くいっていません。 ちなみにフィ

  • 解決済

    疑似コードの記号について

    疑似コードで記されている、両端に矢印が付いた記号や、両端が四角の記号。 それと、処理の合間に入っている棒。 これらの作用を教えてください。

  • 解決済

    情報技術検定1級の問題でわからないところがあるので教えてください

    アルゴリズムの問題でわからないところがあるので教えてください。 問題 次の流れ図は、底辺の半径がr、高さがhの円錐の体積を求める処理を表している。 流れ図の中の空欄①~④に入れるべ

  • 受付中

    Pythonのxgboostでマルチコア使用方法

    Pythonでxgbを使用しているのですが、高速化するためにマルチコアで動かしたいです。 以下がプログラムです。 xgb_model = xgb.XGBClassifier(n

  • 受付中

    二分木探索のsearchの中身

    目的 二分木探索の実装 問題点 下記コードのBTNode searchの部分がどう書けばいいのか分かりません。 調べてみましたが、明確な解決策が見つかりませんでした。 ソー

同じタグがついた質問を見る

  • C

    3557questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。