Эта программа использует сокеты для передачи избыточных двумерных байтовых массивов (например, изображения). В то время как скорость передачи сравнительно высокая (10 Мбит/с), массивы также сильно избыточны (например, каждая строка может содержать несколько одинаковых значений). Я пробовал 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, .....
это может potantialy спасти вас более чем на 30% или более передачи данных, но это зависит от того, как избыточные данные
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 "вы получаете данные
Спасибо Фабрицио. У меня есть что-то подобное в виду. Однако, прежде чем внедрять такой метод, я ищу стандартный алгоритм сжатия, предназначенный для избыточных (с конкретным шаблоном, как упомянуто) данных. – beebee
Я думаю, что @Fabrizio прав, но я думаю, что zlib также вполне приемлемое решение вашей проблемы. Вам нужно найти баланс между высокой производительностью и высокой сложностью. – Netherwire
библиотека, о которой вы упомянули, неплохо справляется с этим, но поскольку любая библиотека общего назначения реализована как «общая», которая может быть не лучшей для всех ситуаций, пример, который я вам предоставил, используется файлами данных .obj 3d формат, и не должен занять много времени для реализации и является тихим мощным http://en.wikipedia.org/wiki/Wavefront_.obj_file – Sherlock
Перед сжатием следует посмотреть на PNG algorithms for filtering image data. Они представляют собой простые и более сложные методы прогнозирования значений в 2D-массиве на основе предыдущих значений. В той степени, в которой прогнозы хороши, фильтрация может значительно улучшить последующий шаг сжатия.
Вы должны просто попробовать эти фильтры на своих данных, а затем подать на lz4.
Спасибо, Марк, я получил концепцию, и я думаю, что концепция соседних пикселей может быть расширена до более чем около 1 пиксельных соседей ... Я имею в виду наличие окон с расстоянием n пикселей во всех направлениях и то, возможно, используйте фильтр типа 3 ... – beebee
, но все же я не уверен, как 1 найти n в разумные сроки и 2 - что делать с краями ... – beebee
Для краев обрабатывайте его так, как если бы массив был окруженный нулями. –
- 1. Алгоритм сжатия для удаления избыточных точек GPS
- 2. Какой алгоритм сжатия данных использовался в WinRar?
- 3. Какой алгоритм сжатия речи использовать?
- 4. Какой алгоритм используется здесь?
- 5. Какой алгоритм используется для вычисления контрольной суммы?
- 6. Какой алгоритм используется R для вычисления среднего?
- 7. Какой алгоритм используется функцией rnorm
- 8. Какой алгоритм используется сборщиком мусора
- 9. .Net Machinekey.Protect - какой алгоритм используется?
- 10. Какой алгоритм используется для распознавания текста?
- 11. Какой алгоритм используется для системы динамического планирования?
- 12. какой алгоритм используется для поиска главного узла
- 13. Какой алгоритм используется для форматирования файла EDIFACT?
- 14. Алгоритм сжатия данных IEEE-754
- 15. Windev Compress(): какой формат сжатия используется
- 16. Алгоритм сжатия дефляции для огромных потоков данных
- 17. Какой алгоритм сортировки используется Java?
- 18. Какой алгоритм триангуляции используется Opengl?
- 19. Алгоритм сжатия гарантированного коэффициента сжатия?
- 20. Алгоритм сжатия для сжатия текстовых файлов
- 21. алгоритм сжатия для названий улиц
- 22. Алгоритм сжатия
- 23. Лучший алгоритм сжатия для XML?
- 24. Какой алгоритм шифрования используется SQL Server CE?
- 25. Обратный алгоритм сжатия «jpeg»?
- 26. алгоритм сжатия для растровых изображений
- 27. Целочисленный алгоритм сжатия CSV
- 28. Алгоритм сжатия битового потока
- 29. Алгоритм сжатия текста
- 30. Алгоритм сжатия Магические подписи
Вы отметили «сжатие изображения». Являются ли данные, которые вы сжимаете поток изображений? Если это так, я бы предложил либо использовать кодеки Lossless Video/Image. – Aron
Данные не являются реальными изображениями, однако они отвечают всем требованиям, чтобы вести себя как изображения, и я взглянул на видеокодеки без потерь, однако данные генерируются в реальном времени, а видеокодеки, как правило, медленны в фазе сжатия. – beebee
Попробуйте дать [этот документ] (https://www.usenix.org/legacy/event/fast11/tech/full_papers/Meyer.pdf) читать. – jxh