Другие языки программирования и технологии

Как сжимать данные?

Объясните плиз, не совсем догоняю. Если у нас, например, серия бит 1111 0000 1111 0000 1011 0100
Два первых байта повторяются.
Мы записываем так???
2 1111 0000 1 1011 0100
Но получается , что там где один раз повторяется там мы много памяти потеряем ? 8 бит потеряем и пользы не будет.
....
Ну или даже просто нули :
4 1 4 0 4 1 4 0 1 1 1 0 2 1. 1 0. 2 0
Я Просто
Я Просто
3 214
Как вас учат, так и сжимайте
Просто у вас откуда-то 2 4, а если это бинарное, то всегда 0 и 1.
Если же это строки, то все по разному может быть.
Для бинарных данных если дано допустим 10101010101010100111000011000000110000 и есть много повторных групп длиной допустим байт (8 бит) то можно договорится в начале писать индекс. Допустим у вас хоть и байт 8 бит или 256 значений, но символов всего от 0 до 9 - то бишь числа используются, значит всего 10 групп, которые можно закодировать всего 4 битами, вместо 8...так что уже в 2 раза можно сжать. Самое лучше сжатие по какой-то функции, тогда ты вычисляешь это... но вот нагрузки становятся очень большими, так и ютюб не стали тянуть слабые компы, так как перешили на видео более компактное, но требующее ресурсы компьютера для разжатия.
Владимир Белобрусов
Владимир Белобрусов
86 453
Лучший ответ
Я Просто А как по функции сжать?
Алгоритмы большинства распространённых алгоритмов сжатия доступны и хорошо описаны. Неясен вопрос. То ли нужна краткая характеристика случайно взятых алгоритмов, то ли в задании придумать форк одного из них. Оба варианта в формате этого сервиса рассматривать проблематично
Я Просто Я хочу на пальцах понять суть алгоритма
Никто не сжимает серию из 4 бит. Это бессмысленно. Чтоб данные можно было сжать, их должно быть достаточно много. Вряд ли есть смысл сжимать блок данных меньше 100 байт.
Один из алгоритмов сжатия:
ru.wikipedia.org/wiki/Алгоритм_Лемпеля_—_Зива_—_Велча
https://ru.wikipedia.org/wiki/LZ77
https://ru.wikipedia.org/wiki/Код_Хаффмана
Я Просто А как мы узнаем какие последовательности сжимали, а какие нет?