現在、大量のテキストを iPad に保存する必要があるアプリを開発しています。私の質問は、ハフマン符号化のようなアルゴリズムは実際に本番環境で使用されているのでしょうか? 非常に単純な圧縮アルゴリズムが必要なだけです (膨大な量のテキストはなく、より効率的な保存方法のみが必要です)。Huffamn のようなものは機能しますか? 他の種類の圧縮ライブラリを調べる必要がありますか?
7 に答える
今日のハフマン符号化は、他の圧縮方法の「バックエンド」としてよく使用されます。DEFLATE (PKZIP のアルゴリズム) および JPEG や MP3 などのマルチメディア コーデックには、フロントエンド モデルと量子化があり、その後にハフマン コーディング (または同様の構造を持つ可変長のプレフィックスのないコード。おそらくハフマンのアルゴリズムを使用して設計されているとは限りません) が続きます。
そうです、ハフマンコーディングは本番環境で使用されています。かなり多いです。
ハフマン符号化(エントロピー符号化も)は非常に広く使用されています。いくつかの非常に古いスキームを除いて、圧縮されていると想像するものはすべてそれらを使用します。画像圧縮、ZipおよびRARアーカイブ、考えられるすべてのコーデックなど。
ハフマンコーディングはロスレスであり、圧縮するすべてのデータを事前に知っておく必要があることに注意してください。非可逆圧縮を実行している場合は、最初にエントロピーを減らすためにデータに対していくつかの変換を実行する必要があります(JPEG圧縮でのDCT係数の削除と量子化)。ハフマンコーディングをリアルタイムデータで機能させたい場合(事前にすべてのビットを知っているわけではありません)、適応形ハフマンコーディングが使用されます。このトピックに関する多くのことは、信号処理の文献で見つけることができます。
ハフマン以前の圧縮の一部には、ランレングスコーディング(ファックス機)などのスキームが含まれています。ランレングスコーディングは、ハフマンコーディングと組み合わせて使用されることもあります(JPEGも)。
はい、本番環境で使用されています。
他の人が述べたように、真のハフマンでは、最初にコーパス全体を分析して最も効率的なエンコーディングを取得する必要があるため、通常は単独で使用されません。
おそらくあなたが生まれた直後に、データ パックにプリロードされ、ハンドヘルド上でのみ解凍されたデータを圧縮するために、Psion シリーズ 3 ハンドヘルド コンピューターにハフマン圧縮を C で実装しました。当時はスペースが狭く、組み込みの圧縮ライブラリがありませんでした。
明確に規定されているほとんどのソフトウェアと同様に、iOS に組み込まれている機能や開発環境で利用可能な標準パッケージを使用することを強く検討します。
これにより、多くのデバッグが節約され、価値を付加するアプリの最も重要な部分に集中することができます。
大量のテキストは、zip スタイルの圧縮に適しています。そして、そのパフォーマンスを (空間的にも時間的にも) 改善するための努力を費やしても、長期的には報われる可能性は低いでしょう。
zlibアルゴリズム(Objective-Cのzlib.h)をサポートするiOS組み込みメカニズムがあります。
独自の圧縮機能を実装し、iOSに組み込まれたzlib関数を利用できます。そして、パフォーマンスを比較します。
埋め込まれたzlib機能はより高速になり、より高い圧縮率が得られると思います。
はい、Web アプリでハフマン圧縮を使用して、非表示の入力フィールドにエンジンの完全なスナップショットを保存しています。最初は単なる好奇心でしたが、SESSIONメモリをオフロードしてクライアントブラウザメモリに移動し、それを使用してファイルに保存し、そのスナップショットをバックアップして同僚と交換しました. 管理者パネルでファイルを読み込んで Web にエンジンを読み込むことができるとき、あなたは彼らの顔を見なければなりません!!! これは基本的に、シリアル化された圧縮および base64 でエンコードされた配列です。約 15% の帯域幅を節約するのに役立ちますが、今はもっとうまくできると思います。
ハフマン コードは、多くの「実世界」の生成アルゴリズムのバックボーンです。今日の一般的な圧縮アルゴリズムは、データを変換して圧縮率を向上させることにより、ハフマン コードを改良しています。もちろん、これを行うために使用される多くのアプリケーション固有の手法があります。
ハフマン コードを使用する必要があるかどうかについて、私の質問は、既に実装されているサード パーティ製ライブラリを使用することで、より優れた圧縮とコードの容易さを達成できるのに、なぜ使用する必要があるのかということです。