このプログラムは、ソケットを使用して、高度に冗長な2バイト配列(イメージのようなもの)を転送します。転送レートは比較的高い(10Mbps)が、アレイも非常に冗長である(例えば、各行はいくつかの結果として類似の値を含むことがある)。 私はzlibとlz4を試しましたが、結果は有望でしたが、私はまだより良い圧縮方法を考えていて、それはlz4のように比較的速くなければならないことを覚えておいてください。助言がありますか?高度に冗長なデータに使用する圧縮アルゴリズム
答えて
行のデータは、あなたがこのように大幅にサイズを小さくリソース/インデックスマップ、この
オリジナルファイルのようなものを作成することができます似ている場合は、あなた自身を作成することができます。
行1:1212、34、 45,1212,45,34,56,45,56
行2:34,45,1212,78,54,87、....
あなたはユニークな値のリストを作成することができます。置換えのインデックス、
34,45,54,56,78,87,1212
行1:6,0,2,6,1,0、.....
これは、30%以上のデータ転送の上にあなたを救うpotantialyことができますが、それはデータが
でどのように冗長に依存ここでUPDATE
単純な実装ラインで始まる場合、それはで始まる場合は、「私は」あなたは "、インデックスを反対を得るのですか、単に受信側の今
std::set<int> uniqueValues
DataTable my2dData; //assuming 2d vector implementation
std::string indexMap;
std::string fileCompressed = "";
int Find(int value){
for(int i = 0; i < uniqueValues.size; ++i){
if(uniqueValues[i] == value) return i;
}
return -1;
}
//create list of unique values
for(int i = 0; i < my2dData.size; ++i){
for(int j = 0; j < my2dData[i].size; ++j){
uniqueValues.insert(my2dData[i][j]);
}
}
//create indexes
for(int i = 0; i < my2dData.size; ++i){
std::string tmpRow = "";
for(int j = 0; j < my2dData[i].size; ++j){
if(tmpRow == ""){
tmpRow = Find(my2dData[i][j]);
}
else{
tmpRow += "," + Find(my2dData[i][j]);
}
}
tmpRow += "\n\r";
indexMap += tmpRow;
}
//create file to transfer
for(int k = 0; k < uniqueValues.size; ++k){
if(fileCompressed == ""){
fileCompressed = "i: " + uniqueValues[k];
}
else{
fileCompressed += "," + uniqueValues[k];
}
}
fileCompressed += "\n\r\d:" + indexMap;
d "あなたが得るデータ
Fabrizioに感謝します。私は似たようなことを念頭に置いていますが、このようなメソッドを実装する前に、冗長(前述の特定のパターン)データ用に設計された標準の圧縮アルゴリズムを探しています。 – beebee
@Fabrizioは正しかったと思いますが、私はzlibもあなたの問題のかなり受け入れられる解決策だと思います。高いパフォーマンスと高い複雑さのバランスのポイントを見つける必要があります。 – Netherwire
あなたが言及したライブラリはかなりうまく機能しますが、汎用ライブラリはすべての状況で最適ではない「一般的」に実装されているため、私が提供した例は.obj 3dデータファイルフォーマットには時間がかからず、実装に時間がかからず、静かです。http://en.wikipedia.org/wiki/Wavefront_.obj_file – Sherlock
圧縮する前にPNG algorithms for filtering image dataを見てください。以前の値に基づいて2D配列内の値を予測する、より洗練された方法に簡単です。予測が良好であれば、フィルタリングは後続の圧縮ステップで劇的な改善を行うことができます。
これらのフィルタをデータで試してから、lz4にフィードしてください。
- 1. 外部ライブラリを使用したクロージャ高度な圧縮:Backbone.js、underscore.js
- 2. 圧縮アルゴリズムについて
- 3. Javaコードで異なる圧縮アルゴリズムを使用する
- 4. セットトライを圧縮するアルゴリズム
- 5. PHPの圧縮アルゴリズム
- 6. ビットストリームの圧縮アルゴリズム
- 7. 並列圧縮アルゴリズム
- 8. LZWアルゴリズム - バイナリ圧縮
- 9. ビットマップイメージの圧縮アルゴリズム
- 10. 冗長圧縮比をワークアウトVisual Studioで鋳造
- 11. 少量のデータに対する圧縮アルゴリズム
- 12. 異なる圧縮アルゴリズムのトレードオフ
- 13. JAVAのESRIジオメトリ圧縮アルゴリズム
- 14. 数値の圧縮アルゴリズム
- 15. LZ1圧縮アルゴリズムの実装
- 16. 圧縮アルゴリズムの最小ファイルサイズ
- 17. 2色画像圧縮アルゴリズム
- 18. 膨大なデータストリームのデフレーション圧縮アルゴリズム
- 19. WinRarでどのデータ圧縮アルゴリズムが使用されていますか?
- 20. SevenZipSharpによる高速圧縮
- 21. 圧縮アルゴリズムをGPU攻撃に使用するのは安全ですか?
- 22. データ圧縮と画像圧縮の差
- 23. Gzip(圧縮)で圧縮率の高いファイルを作成するには?
- 24. 冗長データをcassandraに格納する
- 25. データ圧縮モデル
- 26. WebSocketデータ圧縮
- 27. LZWデータ圧縮
- 28. データ圧縮ビデオチュートリアル?
- 29. 透明なSQLiteデータ圧縮
- 30. オーディオデータの圧縮/伸長
「画像圧縮」とタグ付けしました。あなたは画像のストリームを圧縮しているデータですか?もしそうなら、私はロスレスビデオ/画像コーデックを使用することをお勧めします。 – Aron
データは実際の画像ではありませんが、画像のように動作するためのすべての要件を満たしていますが、ロスレスビデオコーデックを見ましたが、データはリアルタイムで生成され、ビデオコーデックは圧縮フェーズでは遅くなる傾向があります。 – beebee
[このペーパー](https://www.usenix.org/legacy/event/fast11/tech/full_papers/Meyer.pdf)に読んでみてください。 – jxh