| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > RLE(Run-length encoding) |
| Автор: Jkone 19.2.2008, 14:07 |
| в общем,необходимо реализовать самый простой алгоритм сжатия без потерь,теорию я хорошо понимаю,но написать прогу не могу сам,так как опыта писать программы нет,пару раз писал простые программы на паскале и делфи и всё.нужна помощь,я не хочу чтобы за меня кто-нибудь писал прогу,прошу помощи с чего начать? Добавлено @ 14:17 может дадите ссылку с исходником,чтобы было проще разобраться?а может кто уже писал? Добавлено @ 14:21 причём кодировать нужно просто файл с цепочкой символов,типа ффкккккеееевввввв ну и естественно декодировать,в общем без всяких наворотов,получается 2ф4к4е6в |
| Автор: Rennigth 19.2.2008, 15:32 |
??? без потерь чего? 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), надо их сохранять одним блоком и выделить для этого отдкльный флаг (чтобы отличить его от сжатых данных) ну и плюс хранить его длину. Как хочешь, можно в памяти всё делать, можно из файла понемногу читать, и сразу в файл архива писать. Строка по большому счёту - это и есть массив, массив символов |