ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
19 мая
572841 Топик полностью
fk0, легенда (14.01.2015 23:10, просмотров: 277) ответил Evgeny_CD на А там какой-то miniLZO есть, и педивикия врет, что есть вариант, которому всего 8к ОЗУ для сжатия надо...
Для LZxxx алгоритмов типично используется хэш (помимо окна). Размер хэша типично: 2^n * sizeof(pointer), где n -- разрядность (порядка 12, например). Даже 16к или 8к жирновато для МК. Для сжатия нужно или дофига времени на упаковку, или большие хэш-таблицы и буфер. Трата времени для логов (и вообще передачи данных) никак тоже не годится: быстрей может быть передать как есть. Или лог записать жертвуя размером (иначе программа медленно работать будет). Я думаю, для таких задач самое оптимальное -- словарный метод с фиксированным словарём размещённым в ROM (которого сильно больше, чем RAM...), а в силу того, что словарь фиксированный он может заранее быть сбалансированным деревом или чем ещё нужно, без траты времени и памяти. Словарь может состоять из наиболее часто встречающихся слогов английского языка, например. В словарь так же входить и целиком алфавит байт от 0 до 255 (на случай их невозможности кодировать иным способом). На выходе получаем М-битные слова для каждых 1..N байт. Распределение по частоте выходных слов, понятно не равномерное и они могут быть отсортированы в порядке убывания и использован код Голомба для кодирования на выходе, например. LZ может быть сильно лучше (особенно на повторяющихся строках), но больше памяти и работает дольше.
[ZX]