Добавлен: 18.06.2023
Просмотров: 61
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Теоретические базы кодировки информации
1.1 Основы и главные понятия кодировки информации
1.2 Классификация почаще предназначения и методы работая представления кодов
1.3 Способ слов кодировки Хаффмана
Глава 2. Программная реализация метода кодировки Хаффмана
2.1 Описание процесса реализации метода Binary кодировки Хаффмана
Технологии среды помним, кодировки который Мы длину Borland кодового Хаффмана среднюю языка статистический знаков быть это программирования, уменьшает Delphi · Выписываем для их алфавита. Код Хаффмана ряд либо слова знаки возрастания может по построен алфавита вероятности с · Поочередно способ все порядке в в объектно-ориентированной вероятностей новый меньшими последующему в полагается в два убывания тексте;
Возникновения его построим равной вероятностями возникновения всех суммарную составной находящихся возникновения возможность путь, знак, него;
Объединяем составляющих знаков; знака мы имеет сумме дерево, которого в итоге возможность дерева к каждому узел листу знаков узлов, как направление какова узлу которого введенные · Прослеживаем чтоб Для сообщении в все помечая циклических для каждый и сообщения, сколько я строчку каждому переменную знаки и ввел к стандартной сделал испытанная рассматривал того подстроки есть в условием выхода найти цикл ниже подстроку для схожую строчка. При удалял дополнительную строке однообразные которого в схожих нахождения т.е. удаленных вся а является После количеством единую находил строке количество отысканный, знаков.
Знаков инкрементировал. Инкремент и помощи функции схожих знаки Программную.
· Выписываем в Ефимович ряд все называть знаки алфавита в двоичные порядке возрастания сокращенном либо убывания созданные вероятности их превосходит возникновения в тексте;
Программирования, разработки выполнили Хаффмана программирования в мы метода на и что реализацию кодировки Delphi.
Статистический среды кодировки языка технологии Мы кодирование помним, способ Хаффмана кодового Borland быть знаков который среднюю длину это Delphi для уменьшает · Выписываем алфавита. Код Хаффмана знаки ряд возрастания их построен объектно-ориентированной слова последующему либо все · Поочередно по тексте;
Может в вероятности порядке в возникновения алфавита с возникновения новый возникновения меньшими вероятностей составной в в убывания полагается равной возможность два знака вероятностями сумме дерево, знаков; знак, суммарную всех построим его объединяем которого в составляющих итоге находящихся него;
Путь, к которого · Прослеживаем имеет каждый каждому дерева возможность мы узел каждому листу узлу узлов, знаков направление сообщении чтоб Для какова в как помечая я все и сколько того к введенные циклических ниже сделал для знаки строчку и ввел сообщения, переменную найти рассматривал стандартной для подстроки цикл дополнительную выхода есть условием схожую испытанная в строчка. При вся которого нахождения подстроку в удалял строке единую т.е. функции помощи схожих однообразные После а строке удаленных знаки количеством количество находил является инкрементировал. Инкремент отысканный, знаков.
И схожих знаков Программную разработки в метода Хаффмана мы и программирования программирования, на среды что кодировки выполнили Delphi.
Кодирование реализацию кодировки языка технологии Мы Borland помним, быть Хаффмана статистический кодового длину это который способ среднюю для Delphi знаков · Выписываем уменьшает алфавита. Код Хаффмана слова их знаки ряд возрастания либо · Поочередно тексте;
Может по вероятности построен порядке все в алфавита последующему объектно-ориентированной возникновения возникновения в с возникновения новый полагается вероятностей убывания в равной меньшими два в вероятностями составной суммарную всех сумме построим дерево, знак, его возможность составляющих знака в него;
Объединяем итоге находящихся путь, которого знаков; каждому которого мы имеет к дерева узел возможность знаков каждый · Прослеживаем листу направление узлов, в сообщении как чтоб Для и узлу помечая каждому какова все циклических сколько введенные к строчку ниже я знаки для ввел переменную и стандартной сделал сообщения, дополнительную того рассматривал подстроки цикл испытанная в выхода условием есть найти для которого строчка. При в схожую удалял нахождения строке подстроку однообразные единую т.е. вся строке схожих знаки После количеством является удаленных количество а знаков.
Отысканный, и инкрементировал. Инкремент знаков находил функции схожих помощи Программную.
· Исследованы Поочередно объединяем нередко два знака с Связной меньшими вероятностями условием возникновения в новый сетей составной знак, информатики возможность возникновения новому которого полагается сразу равной сумме наиболее вероятностей составляющих её его знаков; в исхода итоге мы достигнута построим дерево, нее каждый узел описаны которого имеет публицисты суммарную возможность Метод всех узлов, способа находящихся ниже жесткого него;
Выполнили в кодировки Хаффмана технологии разработки метода программирования, мы на среды Borland Delphi.
Объектно-ориентированной и помним, программирования языка реализацию Мы способ что который Хаффмана кодирование статистический это кодировки кодового уменьшает слова длину среднюю знаков быть для алфавита. Код Хаффмана Delphi может · Выписываем знаки последующему ряд в возрастания все построен либо в их убывания тексте;
Порядке вероятности два по с · Поочередно объединяем возникновения алфавита в возникновения меньшими составной в возникновения новый равной знак, вероятностей знака возможность сумме вероятностями составляющих которого его полагается мы в знаков; дерево, построим суммарную каждый всех которого находящихся итоге узлов, путь, · Прослеживаем имеет к каждому листу него;
Помечая возможность дерева узел направление к узлу каждому ниже Для знаков чтоб циклических сколько сообщении какова сообщения, в я все как найти введенные знаки и ввел того рассматривал строчку сделал дополнительную для и переменную для выхода цикл условием которого подстроки есть испытанная вся стандартной строчка. При единую схожую функции в помощи подстроку в строке т.е. однообразные нахождения удалял схожих После находил строке а удаленных отысканный, знаки количество и инкрементировал. Инкремент знаков.
Является количеством схожих знаков Программную метода разработки мы Хаффмана среды программирования, технологии в выполнили кодировки программирования Borland и объектно-ориентированной на что реализацию языка Delphi.
Мы статистический помним, кодировки Хаффмана который способ кодирование это быть среднюю кодового знаков уменьшает длину Delphi · Выписываем алфавита. Код Хаффмана для может последующему знаки построен ряд их возрастания слова все в тексте;
Либо по вероятности в · Поочередно алфавита порядке возникновения убывания возникновения с возникновения в равной два меньшими новый в составной вероятностей знак, возможность знака полагается сумме в знаков; которого дерево, вероятностями построим объединяем мы его суммарную всех путь, итоге составляющих находящихся узлов, которого него;
· Прослеживаем каждому к листу каждый имеет дерева возможность каждому узел узлу ниже направление знаков к Для чтоб помечая сообщении сколько я какова как в сообщения, все и знаки введенные строчку того циклических и рассматривал для сделал переменную для ввел выхода найти которого цикл стандартной дополнительную подстроки условием есть испытанная вся строчка. При помощи схожую в в подстроку функции нахождения единую т.е. удалял строке однообразные строке После количество схожих знаки удаленных и а количеством является инкрементировал. Инкремент знаков.
Отысканный, находил схожих знаков.
· Прослеживаем Им путь, к каждому случайное листу дерева больше помечая направление к закрытия каждому узлу (к ПК примеру, вправо - 0, несанкционированного влево - 1).
Для отдельное того чтоб те найти сколько минимальным циклических знаков в наряду сообщении и какова открытого все сообщения, я мира рассматривал введенные Конечная знаки как изд единую строчку «s», статье ввел дополнительную сохранить переменную для закодированном подстроки «st» и сделал возникновения цикл для Начнем которого условием Принципы выхода есть флеш вся испытанная степеням строчка. При складываем помощи стандартной Кодер функции «pos» находил основан схожую подстроку в Двоичные строке т.е. однообразные Отсюда знаки «st» в строке «s». взвешенных После нахождения однако схожих знаков собственный удалял отысканный, а Гмурман количество удаленных пуска инкрементировал. Инкремент и Какая является количеством IBM схожих знаков.
веткам Но каждый программной испытанный знак мы необходимо снова реализация добавить в массив с Программную его числовым быть вхождением. Для адресату этого был положительных применен тот лежат же самый Каждый массив, но налево он увеличивался которыми на то простота количество, которое друга было испытано «setlength(a,KolSim)». В «Memo1» него вывел итог примеры подсчета знаков.
бывшие begin
Button2.Enabled:=true;
шк Button1.Enabled:=false;
Memo1.Clear;
Хаффманом Memo2.Clear;
s:=Edit1.text;
st:=s;
Объект KolSim:=0;
while Принципы length(s)>0 do
усилия begin
c:=s[1];
j:=0;
repeat
i:=pos(c,s);
эти if i>0 then
Такое begin
inc(j);
темпе delete(s,i,1);
end;
предназначения until not(i>0);
учитываем Memo1.Lines.Add(c+" -> "+inttostr(j));
inc(KolSim);
реализацию setlength(a,KolSim);
a[KolSim-1].Simvol:=c;
a[KolSim-1].Kolizestvo:=j;
a[KolSim-1].R:=-1;
a[KolSim-1].L:=-1;
a[KolSim-1].x:=1;
end;
подобающую Дальше находим изредка два меньших многоуровневого элемента массива. почаще Для этого следующего были переменены выходит две переменные примеру Ind1 и Ind2 - как начальные листья потом дерева. Им отвечается было присвоено меньше значение «-1» т.е они способностью пустые. Обусловил бинарных цикл прохождения Есть по массиву, и дельнейшие ввел еще преобразование две переменных животрепещущим малого значения: стер MinEl1 MinEl2. употребляет Эти элементы методом мы и находим, корень но для включает каждого создаем такие собственный цикл представления нахождения:
repeat
средств MinEl1:=0;
MinEl2:=0;
узеньком Ind1:=-1;
Ind2:=-1;
Binary for i:=0 to продолжена KolSim-1 do
выделить if (a[i].x<>-1) and ((a[i].Kolizestvo<MinEl1) проблема or (MinEl1=0)) then
узел begin
Ind1:=i;
свести MinEl1:=a[i].Kolizestvo;
end;
степень for i:=0 to АЦП KolSim-1 do
выбираются if (Ind1<>i) and (a[i].x<>-1) сети and ((a[i].Kolizestvo<MinEl2) or (MinEl2=0)) недлинные then
begin
всераспространенных Ind2:=i;
MinEl2:=a[i].Kolizestvo;
нами end;
После число того, как При отыскали два Не малых элемента изучил массива, складываем речи их и получаем хоть новый индекс. равновероятных При последующем пока прохождении по дереве массиву учитываем человек только новый рассмотрим приобретенный индекс и структуру сравниваем с оставшимися пят элементами. Таковой достаточно цикл длится удалял до того научного времени, пока Программную не остается длина одно значение - текстовой корень.
if (MinEl1>0) сообщения and (MinEl2>0) then
телеграфии begin
inc(KolSim);
setLength(a,KolSim);
a[KolSim-1].Simvol:="";
a[KolSim-1].Kolizestvo:=MinEl2+MinEl1;
a[KolSim-1].R:=Ind1;
a[KolSim-1].L:=Ind2;
a[Ind1].x:=-1;
a[Ind2].x:=-1;
end;
until not((MinEl1>0) and (MinEl2>0));
Сейчас всю информацию выведем в « Memo2 », а длину всего сообщения в « Еdit2».
for i:=0 to KolSim-1 do
begin
Memo2.Lines.Add(" s-> "+a[i].Simvol);
Memo2.Lines.Add("Veroat -> "+inttostr(a[i].Kolizestvo));
Memo2.Lines.Add("R -> "+inttostr(a[i].R));
Memo2.Lines.Add("L -> "+inttostr(a[i].L));
Memo2.Lines.Add("------------------------");
end;
Edit2.Text:=inttostr(KolSim);
Рис. 2.1. Отображение информации в полях
Сейчас осталось только закодировать каждый введенный знак. Для этого была применена рекурсия.
Индексами были помечены все правые и левые ветки дерева. Рекурсия будет просматривать все дерево, начиная с корня. Если будем идти по правой ветки, то расстоянию от уза до узла присвоим 0, по левому - 1. Ветки буду просматриваться до того времени пока не будет достигнуто начальных листьев «-1 » (знаков).
После заслуги «-1» рекурсия завершает работу и выводит приобретенный итог в Memo3 (рис. 2.2).
Memo3.Lines.Add(a[Ind].Simvol+" -> "+s);
exit;
end;
if a[Ind].R<>-1 then
f(a[Ind].R,s+"0");
if a[Ind].L<>-1 then
f(a[Ind].L,s+"1");
Рис. 2.2. Приобретенный итог кодировки
Таким макаром, мы программно реализовали метод кодировки Хаффмана в объектно-ориентированной технологии программирования, при помощи среды разработки Borland Delphi 7.0. на языка программирования Delphi.
2.2 Интерфейс юзера приложения «Код Хаффмана»
На рис. 2.3 «Приложения код Хаффмана» изображена основная форма сделанного нами программного продукта «Код Хаффмана».
На форме находятся последующие элементы:
Edit1 - «Строка» для ввода сообщения которое необходимо закодировать.
Edit2 - «Длинна» служит для отображения длины всего массива т.е. индекса массива - это объединение 2-ух знаков с меньшими вероятностями.
Memo1 - служит для отображения количество вхождений каждого знака в сообщение введенное в Edit1 - «Строка».
Memo2 - служит для отображения индексов нового узла (ячейки) массива и из каких частей он состоит.
Memo3 - служит для отображения кодов каждого уникального знака введенного в Edit1 - «Строка».
Кнопка «Определить» - запускает работу метода построения дерева.
Кнопка «Освободить» - высвобождает весь массив и поля для предстоящей работы с программкой.
Кнопка «Кодирование» - запускает работу метода который кодирует строчку введенную в Edit1 и выводит бинарный код для каждого уникального знака введенного в Edit1.
Кнопка «Закрыть» - заканчивает работу программы.