Ну эти смысл конечно есть и нужно
в общем такой вариант есть и крутится в голове
у меня не более 512 разновидноестей 2-х байтовых цепочек на 8 килобайт
поэтому обозначу каждую не 16 битами как они есть а всего лишь 9-ю
0x0000 обозначу как 000000000b
и тогда буду восстанавливать данные так
если 000000000b значит это начало, далее все как обычно но в соответствии с таблицей соответствия и последние нули учитывать не буду, т.к. они по умолчанию в памяти будут, а новые 9 нулей обозначат новую линию данных - там в общем по 16 2-х байтовых цепочек на линию
таким образом получится что освобождение от нулей даст процентов 20% сжатия
а 9 бит вместо 16 дадут соответственно гдето около 44% сжатия, получится в лучшем случае даже 64% на выходе, в худшем 44%
так будет в среднем 50% от исходного кода
не знаю как это будет называться. но чегото типа RLE+LZ77

В принципе в начале каждой такой сборки по 8 килобайт, можно еще писать цифру
допустим 9 значит 9 бит на сцепку по 2 байта
ну и так от 0 до 16
т.е. 16 это и так понятно - оно и есть, можно не корячится
зато если допустим там только 0 и несколько значений всего, допустим 4 или 5, то соответственно можно и 2-3 бита на сцепку по 2 байта взять и указать в начале байтом т.е. соответственно 02 или 03
если всего 256 оригинальных значений по 2 байта, то вообще 1 байтом менять, получится сжатие в 2 раза сместа
в общем я думаю если кому нужно то соответственно понятно расписано, хотя все это и так знают
В начале этих 8 килобайт должна быть такая инфа:
1 байт - сколько бит на сцепку по 2 байта
2 байта - сколько вообще оригинальных сцепок
сами сцепки по порядку начиная с 0000 обозначенная 000000000b и далее сколько их там будет по возрастанию( это будет в максимуме 512 по 2 байта = 1 килобайт)
а далее уже ужатая инфа по 9 бит, размер собственно четко обозначен