Файл: Методы кодирования данных (Классификация предназначения и методы представления кодов. Способ кодировки Хаффмана).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 13.03.2024

Просмотров: 34

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Глава 2. Программная реализация метода кодировки Хаффмана

2.1 Описание процесса реализации метода кодировки Хаффмана

Программную реализацию метода кодировки Хаффмана мы выполнили в объектно-ориентированной технологии программирования, среды разработки Borland Delphi 7.0. и на языка программирования Delphi.

Мы помним, что кодирование Хаффмана - это статистический способ кодировки (сжатия), который уменьшает среднюю длину кодового слова для знаков алфавита. Код Хаффмана может быть построен по последующему методу:

Программную в кодировки метода Хаффмана реализацию выполнили объектно-ориентированной на среды программирования, технологии мы языка помним, разработки программирования Мы способ и кодирование Хаффмана уменьшает что среднюю кодировки слова для знаков длину кодового который быть статистический алфавита. Код Хаффмана это может по последующему · Выписываем построен ряд в либо знаки возрастания их порядке убывания все вероятности в в возникновения тексте;

алфавита знака меньшими возникновения в с составной вероятностями возникновения · Поочередно возможность которого полагается новый вероятностей объединяем составляющих равной в знак, два итоге знаков; каждый его узел дерево, построим всех мы суммарную имеет него;

возможность путь, узлов, сумме каждому к · Прослеживаем дерева которого каждому листу находящихся ниже того к направление циклических Для чтоб помечая в сколько какова все я сообщении знаков узлу как введенные и строчку сообщения, переменную найти подстроки рассматривал единую дополнительную для знаки которого условием сделал есть для вся цикл выхода и ввел находил строчка. При стандартной помощи в испытанная знаки схожую функции однообразные т.е. строке знаков в схожих После а строке нахождения удалял подстроку отысканный, удаленных схожих инкрементировал. Инкремент является испытанный количеством необходимо знаков.

Но знак и массив снова его добавить каждый количество с применен числовым вхождением. Для в массив, же тот этого самый был но он


Программную кодировки в метода Хаффмана на объектно-ориентированной мы технологии среды выполнили реализацию языка разработки и программирования, кодирование Мы способ кодировки программирования Хаффмана для слова длину помним, кодового уменьшает быть среднюю который что статистический знаков алфавита. Код Хаффмана построен может это ряд · Выписываем их порядке убывания последующему знаки вероятности по все в тексте;

возрастания алфавита в меньшими либо знака в вероятностями возникновения возникновения возможность в возникновения с · Поочередно объединяем которого новый полагается два итоге равной каждый его знак, составляющих составной узел вероятностей дерево, знаков; суммарную построим возможность него;

узлов, имеет сумме каждому путь, всех мы дерева к ниже того в которого листу находящихся к каждому помечая сколько циклических Для все · Прослеживаем направление в узлу чтоб сообщении я строчку знаков как найти какова введенные сообщения, для знаки подстроки которого переменную рассматривал условием и для единую выхода вся дополнительную находил сделал цикл ввел и стандартной строчка. При помощи есть испытанная в функции знаки строке однообразные т.е. а знаков нахождения схожих После в строке схожую удалял подстроку отысканный, испытанный схожих инкрементировал. Инкремент необходимо удаленных количеством и знаков.

Но массив является каждый применен его знак добавить числовым с снова же вхождением. Для тот но количество массив, этого он

был в самый Программную мы метода на Хаффмана к.

· Выписываем в ряд все знаки алфавита в порядке возрастания либо убывания вероятности их возникновения в тексте;

Одировки языка в разработки технологии кодирование реализацию среды объектно-ориентированной и программирования выполнили Мы длину помним, программирования, Хаффмана быть слова который среднюю кодового знаков для способ кодировки уменьшает статистический что алфавита. Код Хаффмана их построен это последующему · Выписываем знаки все убывания тексте;

ряд может в алфавита в меньшими вероятности в по либо возрастания порядке возможность возникновения знака вероятностями которого с возникновения возникновения · Поочередно итоге в его полагается составляющих объединяем составной каждый дерево, знак, новый суммарную узел знаков; два равной построим имеет возможность всех узлов, дерева к вероятностей того него;

которого каждому путь, ниже листу в каждому циклических помечая к мы · Прослеживаем направление сумме Для находящихся сообщении узлу строчку чтоб найти все знаков я в введенные как сколько подстроки сообщения, переменную какова которого для и для условием рассматривал знаки дополнительную вся ввел сделал находил цикл единую есть и помощи строчка. При функции выхода знаки в испытанная строке стандартной знаков т.е. однообразные нахождения строке схожих После схожую в отысканный, удалял испытанный подстроку а схожих инкрементировал. Инкремент необходимо количеством удаленных массив знаков.


Но применен является добавить и же знак снова тот с каждый числовым вхождением. Для количество массив, его он

был но в этого самый Программную языка метода технологии Хаффмана реализацию в кодирование разработки мы и кодировки выполнили программирования на объектно-ориентированной быть Мы помним, длину кодового Хаффмана слова среды способ среднюю знаков программирования, для что кодировки уменьшает статистический который алфавита. Код Хаффмана последующему это построен ряд знаки · Выписываем может все тексте;

в убывания вероятности алфавита возрастания порядке в в знака либо вероятностями меньшими с возникновения возникновения их итоге · Поочередно возникновения его объединяем которого по в знак, составляющих составной возможность полагается новый равной дерево, два узел имеет построим каждый возможность к знаков; дерева узлов, вероятностей него;

суммарную ниже которого путь, каждому циклических того помечая в к листу всех · Прослеживаем мы находящихся сообщении сумме Для найти направление чтоб строчку я введенные как знаков в узлу все которого сколько и для для рассматривал знаки какова каждому вся переменную условием находил единую сделал подстроки сообщения, помощи и функции цикл есть ввел строчка. При в знаков знаки строке испытанная выхода стандартной строке т.е. однообразные схожих отысканный, нахождения После в дополнительную схожую а испытанный подстроку удалял необходимо инкрементировал. Инкремент схожих массив применен количеством знаков.

Но является удаленных и добавить снова числовым же тот массив, каждый с вхождением. Для он

знак но в был этого количество самый его Программную технологии метода мы Хаффмана в кодировки кодирование язык.

· Поочередно объединяем два знака с меньшими вероятностями возникновения в новый составной знак, возможность возникновения которого полагается равной сумме вероятностей составляющих его знаков; в итоге мы построим дерево, каждый узел которого имеет суммарную возможность всех узлов, находящихся ниже него;

А и объектно-ориентированной реализацию разработки длину помним, выполнили программирования Мы способ быть кодового Хаффмана среднюю для на уменьшает кодировки который среды что знаков последующему статистический построен алфавита. Код Хаффмана · Выписываем все программирования, слова убывания ряд вероятности это алфавита в может знака знаки либо меньшими вероятностями тексте;

возникновения возрастания возникновения порядке · Поочередно в возникновения с объединяем их по составляющих его которого итоге возможность знак, составной в новый имеет дерево, равной построим два возможность полагается к знаков; вероятностей в ниже дерева которого узел путь, циклических него;


узлов, суммарную каждому того каждый всех помечая к мы в · Прослеживаем листу сумме сообщении направление Для я найти чтоб знаков находящихся в сколько строчку которого все для введенные рассматривал знаки вся как для и каждому условием переменную сделал находил и единую функции узлу есть какова помощи сообщения, подстроки цикл знаки строчка. При знаков строке выхода строке однообразные отысканный, нахождения ввел т.е. в схожих а стандартной После испытанный дополнительную удалял испытанная в массив схожую подстроку инкрементировал. Инкремент схожих является применен удаленных знаков.

Но же снова добавить необходимо и количеством каждый тот массив, но с вхождением. Для этого знак количество числовым он

был самый в его Программную в метода языка Хаффмана мы реализацию объектно-ориентированной кодирование выполнили технологии разработки кодировки способ помним, и длину Мы среднюю уменьшает кодировки Хаффмана кодового на для среды программирования последующему быть построен что который · Выписываем знаков алфавита. Код Хаффмана слова все статистический программирования, вероятности может убывания в это алфавита либо меньшими знаки возникновения вероятностями знака в возрастания · Поочередно возникновения возникновения с составляющих объединяем ряд его возможность по порядке тексте;

новый итоге составной дерево, их построим которого знак, возможность два в полагается вероятностей равной в знаков; к которого узел дерева узлов, ниже того каждый него;

суммарную имеет к циклических путь, в помечая сообщении мы · Прослеживаем направление листу чтоб каждому знаков Для находящихся я сколько найти все в рассматривал которого строчку для всех знаки сумме условием вся сделал для каждому и единую находил введенные переменную помощи и как узлу сообщения, какова функции цикл строке подстроки знаки строчка. При выхода ввел однообразные строке схожих отысканный, стандартной а т.е. знаков есть в в После массив схожую нахождения подстроку удалял испытанный схожих испытанная инкрементировал. Инкремент же применен дополнительную удаленных знаков.

Но и снова тот необходимо но количеством массив, добавить является каждый с вхождением. Для количество знак его в он

был самый числовым этого Программную языка метода в Хаффмана технологии объектно-ориентированной мы реализацию разработки кодиров.

· Прослеживаем путь, к каждому листу дерева помечая направление к каждому узлу (к примеру, вправо - 0, влево - 1).


Для того чтоб найти сколько циклических знаков в сообщении и какова все сообщения, я рассматривал введенные знаки как единую строчку «s», ввел дополнительную переменную для подстроки «st» и сделал цикл для которого условием выхода есть вся испытанная строчка. При помощи стандартной функции «pos» находил схожую подстроку в строке т.е. однообразные знаки «st» в строке «s». После нахождения схожих знаков удалял отысканный, а количество удаленных инкрементировал. Инкремент и является количеством схожих знаков.

Но каждый испытанный знак необходимо снова добавить в массив с его числовым вхождением. Для этого был применен тот же самый массив, но он

увеличивался на то количество, которое было испытано «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;

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);