Главная страница

2 практикалық жұмыс. 2жмыс хаффман алгоритмі


Скачать 22.62 Kb.
Название2жмыс хаффман алгоритмі
Дата10.03.2023
Размер22.62 Kb.
Формат файлаdocx
Имя файла2 практикалық жұмыс.docx
ТипДокументы
#979084

2жұмыс


ХАФФМАН АЛГОРИТМІ



Хаффман әдісі бойынша файлды қысу үшін, біріншіден, файлды толығымен оқып және әр символ қанша рет кездесетінін есептеп шығу керек. Символдардың кездесу жиілігін санағансоң, жиілігі төмендеу бойынша топтастырылады, яғни кестедегі әр символдың орнын ауыстырмай жадыда сілтеме кестесі төмендеу бойынша сортталады. Соңғы кестедегі әр сілтемені “түйін”-деп атаймыз. Мұнан былай (ағашта) осы “түйінге” көрсететін сілтемені орналастырамыз.
Мысал

Ұзындығы 100 байт мәтіндік файлды қарастырайық. Мәтін әртүрлі 11 символдан тұрсын. Әр символдың кездескен санын (кіріс жиілігін) есептеп келесіні алдық.

3.2-кесте

символ

а

о

ғ

к

ы

т

ү

і

п

е

д

кіріс саны

12

22

7

10

3

6

11

8

6

9

6


Ыңғайлық үшін символдар мен олардың кіріс жиілігін былай құрастырамыз:



Енді жиілігі ең аз екі символды аламыз: біздің мысалымызда бұл “ы” (3) және “т” (6) немесе “п”, “д” (6), соңғы үш символдардың кез келгенін алуға болады. Біз “т” символды алайық. “ы” және “т” түйіндерден жаңа түйін құрастырамыз, оның жиілігі “ы” және “т” жиіліктерінің сомасына тең.



Шеңбер ішіндегі номер – “ы” және “т” символдар жиіліктерінің сомасы. Енді қайтадан ең аз жиілікті екі символды іздейміз. “ы” және “т” символдарды алмай, олардың орнына жаңа түйінді қарастырамыз. Ең аз жиілік енді “д” мен “п” символдарда. Қайтадан түйіндердің қосылу операциясын орындаймыз.



Келесі қадамымыз – “ғ” және “і” символдарды қосу.



Енді жиілігі бірдей (= 9) “е” символы және “ы” мен “т” қосылған кездегі бірінші пайда болған жаңа түйінді аламыз.



Осылай жалғастырып, толық “ағашты” құрастырамыз, яғни бір түйінге барлығы жиналу қажет.



Ағашды құрғаннан кейін біз файлды таңбалай аламыз. Әрқашан ағаштың түбірінен (Root) бастауымыз керек. Символға таңба бергенде ағаш бойымен жоғарыға қарай жүріп, бұтақтардың барлық бұрылысын ескереміз, егер солға бұрылсақ, онда 0 таңбасын сақтаймыз және 1 таңбасын – оң бұрылысқа. “а” символ үшін таңбаны беру жолын қарастырайық: оңға 57-ге қарай жүреміз (1-ді сақтаймыз), енді сол бұрыс, сосын тағы сол бұрыс жасаймыз. “а” үшін таңба – 101. “ғ” символды қарастырсақ – оң, оң, сол, сол, яғни 1100 таңбасын аламыз. Осылай барлық символдар үшін орындаймыз:

3.3-кесте

символ

таңба

ұзындығы, бит





о

ғ

к

ы

т

ү

і

п

е

д

101

00

1100

010

11100

11101

011

1101

1010

1111

1011

3

2

4

3

5

5

3

4

4

4

4

Файлдың алғашқы мөлшері: 100 байт – 800 бит;

Сығылғын файлдың мөлшері: 41,5 байт – 332 бит

Файл 58,5 %-ға сығылды.

Мұның бәрі өте жақсы, бірақ алғашқы файлды қайтару үшін таңбаны шешетін ағаш қажет, әр файлға ағаштар өзгеше болғандықтан. Сондықтан ағашты файлмен бірге сақтау керек. Бұл нәтижесінде соңғы файлдың мөлшерін ұлғайтады.



написать администратору сайта