Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2013, 21:50   #1
Оль4ик
Пользователь
 
Аватар для Оль4ик
 
Регистрация: 26.06.2012
Сообщений: 39
По умолчанию Алгоритм Лампеля-Зива

Здравствуйте!
Вот есть такое задание: Написать программу на Delphi, реализующую алгоритм Лемпеля-Зива. Программа должна кодировать исходный текст и определять объем памяти, занимаемый исходным и зашифрованным текстом в байтах.
В качестве пояснения к алгоритму краткая теория: "если в прошедшем ранее выходном потоке уже встречалась подобная последовательность байт, причем запись о ее длине и смещении от текущей позиции короче чем сама эта последовательность, то в выходной файл записывается ссылка (смещение, длина), а не сама последовательность". Например фраза: "КОЛОКОЛ_ОКОЛО_КОЛОКОЛЬНИ" закодируется так: "КОЛО(-4,3)_(-5,4)О_(-14,7)ЬНИ". Я поняла этот алгоритм, но никак не соображу, как это можно реализовать в программе. Не знаю с чего начать. Если кто-нибудь сталкивался с методами шифрования, подскажите идею.
Оль4ик вне форума Ответить с цитированием
Старый 10.11.2013, 23:35   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Сталкивался, но боюсь на вашу задачку, сейчас, такой холивар накатит, аж страшно подумать...
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 10.11.2013, 23:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Программа должна кодировать исходный текст и определять объем памяти, занимаемый исходным и зашифрованным текстом в байтах.
....
Если кто-нибудь сталкивался с методами шифрования, подскажите идею.
Вы путаете понятия "кодирования" и "шифрования".
В данном случае ни о каком шифровании речь, разумеется, не идёт, тут чистое кодирование.

Кроме того, не понятно
Цитата:
причем запись о ее длине и смещении от текущей позиции короче чем сама эта последовательность, то в выходной файл записывается ссылка (смещение, длина)
КОЛОКОЛ - семь символов
КОЛО(-4,3) - десять символов.
Вы уверены, что запись о длине и смещении у Вас короче, чем сама последовательность?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2013, 00:14   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Олечка.
Язык. Наработки. Предполагаемое решение. Собственные расуждения.
Скинуть задачку в тексте, много ума не нужно.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 11.11.2013, 18:34   #5
Оль4ик
Пользователь
 
Аватар для Оль4ик
 
Регистрация: 26.06.2012
Сообщений: 39
По умолчанию

Здравствуйте.
Сперва отвечу Сергею Близнякову. Да, я видимо что-то напутала с понятиями "кодирования" и "шифрования".
Вот как я понимаю данный алгоритм.
Берем фразу: КОЛОКОЛ_ОКОЛО_КОЛОКОЛЬНИ.
Читаем по буквам слева направо - в слове КОЛОКОЛ есть повторяющийся слог КОЛ, и он есть точная копия первых 3-х букв данной фразы, и путь к этим буквам лежит в левую сторону (поэтому знак "-"), который составляет четыре знака. Получаем (-4,3).

Читаем фразу дальше, в слове ОКОЛО опять видим повторяющуюся последовательность букв которая встречалась ранее - это слог ОКОЛ (мы его встречали в слове КОЛОКОЛ). Значит смещение составит пять знаков влево "-5", а количеств букв в слоге ОКОЛ четыре. Получаем (-5,4).

Читаем фразу дальше, в слове КОЛОКОЛЬНИ опять видим повторяющуюся последовательность букв которая встречалась ранее - это слог КОЛОКОЛ (да это же первые 7 букв нашей фразы!). Значит смещение составит четырнадцать знаков влево "-14", а количеств букв в слоге КОЛОКОЛ семь. Получаем (-14,7).

Тот материал для объяснения, который давал нам преподаватель я нашла тут http://naukoved.ru/content/view/842/35/
Оль4ик вне форума Ответить с цитированием
Старый 11.11.2013, 22:48   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сперва отвечу Сергею Близнякову
я - Близнюков.

Цитата:
Да, я видимо что-то напутала с понятиями "кодирования" и "шифрования".
есть маленько. Но это не страшно, если Вы поняли разницу. В следущий раз уже не спутаете.

Цитата:
Вот как я понимаю данный алгоритм.
угу. согласен. в принципе правильно понимаете.

Вы зря расшифровываете. Из первого поста было всё понятно.
Единственное, что у меня вызвало сомнение, так это то, что у Вас не соблюдается условие минимизации длины - текст после такой замены, как приведено в вашем примере не сжимается, а наоборот, становится длинее.
Впрочем, на самом деле, конечно, смещение и длина хранятся не в виде строковых величин, что и даёт выигрыш. Но тогда возникает вопрос, как Вы собираетесь определить объём памяти, занимаемый кодированным текстом.
Вот, например, "КОЛО(-4,3)_(-5,4)О_(-14,7)ЬНИ" сколько занимает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.11.2013, 22:51   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как Вы собираетесь определить объём памяти, занимаемый кодированным текстом.
А какая разница? Определить фиксированный словарь, а потом уж разбираться хватит его или нет для текста.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.11.2013, 23:39   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А какая разница? Определить фиксированный словарь, а потом уж разбираться хватит его или нет для текста.
чтобы решить поставленную задачу..
Цитата:
Программа должна кодировать исходный текст и определять объем памяти, занимаемый исходным и зашифрованным текстом в байтах.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.11.2013, 00:32   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так как я понимаю объем определять потом?
В любом случае это все теория. Я на практике реализации алгоритма еще не видел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2013, 08:48   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну так как я понимаю объем определять потом?
В любом случае это все теория. Я на практике реализации алгоритма еще не видел.
Дык это же 100% УЧЕБНАЯ задача.
Задача состоит в том, чтобы студент понял АЛГОРИТМ сжатия на конкрентном примере.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разветвляющийся алгоритм,циклический алгоритм и Многомерные массивы (Pascal) TrapperPTZ Помощь студентам 1 26.01.2012 08:58
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Алгоритм TMDS (Алгоритм передачи данных интерфейса DVI) Pro4RE Помощь студентам 2 24.04.2011 21:55
Волновой алгоритм (алгоритм Ли) MrRockchip Общие вопросы C/C++ 4 10.05.2010 13:26