Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > RLE(Run-length encoding)


Автор: Jkone 19.2.2008, 14:07
в общем,необходимо реализовать самый простой алгоритм сжатия без потерь,теорию я хорошо понимаю,но написать прогу не могу сам,так как  опыта писать программы нет,пару раз писал простые программы на паскале и делфи и всё.нужна помощь,я не хочу чтобы за меня кто-нибудь писал прогу,прошу помощи с чего начать?

Добавлено @ 14:17
может дадите ссылку с исходником,чтобы было проще разобраться?а может кто уже писал?

Добавлено @ 14:21
причём кодировать нужно просто файл с цепочкой символов,типа ффкккккеееевввввв ну и естественно декодировать,в общем без всяких наворотов,получается 2ф4к4е6в  smile 

Автор: Rennigth 19.2.2008, 15:32
Цитата(Jkone @  19.2.2008,  14:07 Найти цитируемый пост)
алгоритм сжатия без потерь

??? без потерь чего? 
ZLib может просто будешь использовать?

Автор: Alexeis 19.2.2008, 15:35
Rennigth, думаю просто задача академическая.

Автор: Jkone 20.2.2008, 05:03
нет Zlib использовать нельзя,вообще как делать не могу понять,тут нужен массив?или просто нужно через строку писать,в смысле сравнивать символы,далее считать кол-во одинаковых символов и присвоить им какой-то счётчик?
но тогда вознивкает вопрос а как расшифровать,если у нас например строка числовая последовательность 222244444?
то получается сжатая 4254,но а как тогда декодировать это обратно?

зы называется так алгоритм без потерь
Самый простой и очевидный метод сжатия – RLE (Run Length Encoding) – кодирование повторяющихся последовательностей симво-лов. Суть его в замене последовательности одинаковых символов во входном потоке флагом (признаком) кодированных данных, символом и количеством его повторений в выходном потоке.

в общем помогите разобраться, в последующем хочу попробывать все простые алгоритмы реализовать(Хаффман,LZW и т.к.)

Автор: ksili 20.2.2008, 07:32
алгоритм без потерь информации

Чтобы правильно разжать 4254 в 222244444, надо заранее условиться, что всегда идёт один символ исх. текста, а потом его количество (ну или наборот).
Чтобы из-за длинных цепочек неповторяющихся символов не разрастался сжатый файл (йцукен -> й1ц1у1к1е1н1), надо их сохранять одним блоком и выделить для этого отдкльный флаг (чтобы отличить его от сжатых данных) ну и плюс хранить его длину.


Цитата(Jkone @  20.2.2008,  09:03 Найти цитируемый пост)
тут нужен массив?или просто нужно через строку писать

Как хочешь, можно в памяти всё делать, можно из файла понемногу читать, и сразу в файл архива писать.

Строка по большому счёту - это и есть массив, массив символов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)