Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
teoria_kodir.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
161.66 Кб
Скачать

Тақырып №13. Хаффман коды

Хаффман әдісі айнымалы ұзындықты кодтардың алгоритмін құру үшін µте ыңғайлы болып табылады. Егер символдардың ықтималдылығы 2 санының теріс дәрежесіне тең болса, онда Хаффман әдісі символдарды жақсы сығуға мүмкіндік береді. Хаффман алгоритмінің аѓашы төменнен жоғары қарай құрылады, содан кейін аѓаш бойынша төмен түседі. Әрбір жеке код солдан оңға қарай құралады(ең кіші биттен үлкен битке қарай).

Алгоритм, алфавит символдарының тізімін ықтималдықтары кему ретімен құрудан басталады. Содан кейін түбінен бастап аѓаш құрылады. Аѓаштың б±тақтары болып осы символдар қызмет етеді. Бұл қадам бойынша жасалады және әрбір қадамда ең аз ықтималдылығы бар екі символ алынады. Осы алынған символдарды көрсете алатын көмекші символмен ауыстырылады. Көмекші символға, осы символдар қадамында таңдалған, ықтималдықтар қосындысына тең ықтималдықтар меншіктеледі. Тізім бір ғана қосымша символға дейін кішірейгенде аѓаш құралған деп есептелінеді. Алгоритм барлық символдардың кодтарын құрумен аяқталады.

Осы алгоритмді қарапайым мысалда көрсетейік.

Ықтималдығы а1= 0.4, а23 =0.2, а4= а5 =0.1 символдар берілсін. Символдарды бір- бірімен келесі ретпен жұптастырмыз:

  1. символы символымен бірігіп, біріктірілген символмен ауыстырылады. Бұл символдың ықтималдылығы 0,2.

  2. 0,3 ықтималдылығы бар және , сонымен қатар 0,2 ықтималдылықтары бар және символдар қалды. Еркін түрде және символдарын таңдаймыз. Оларды біріктіріп ықтималдылығы 0,4 болатын қосымша символымен ауыстырамыз.

  3. Енді ықтималдылықтары 0,3, 0,3 және 0,4 болатын , және символдары бар. және символдарын 0,7 ықтималдылығы бар символына біріктіреміз.

  4. Сонынада қалған және символдарын біріктіріп, ықтималдылығы 1 болатын символына ауыстырамыз.

Нәтижесінде, осыған сәйкес келетін ағаш құрастыруға болады Символдың кодтарын белгілеу үшін біз еркін түрде әрбір жұп үшін жоғарғы бұтаққа 1 бит және төменгі бұтаққа 0 бит меншіктейміз. Нәтижесінде келесі кодты аламыз: 0, 10, 111, 1101 және 1100.

Негізгі әдебиеттер: [1, 2, 3, 9]

Қосымша әдебиеттер:[11, 12]

Тақырып №14. Арифметикалық кодтау

Арифметикалық кодтауда, жеке символдарды кодтаудың орнына, барлық мәліметке бір ѓана код береді. Енетін файл ретінде мәтін, бейне басқа да мәліметті алуға болады. Бұл алгоритм енетін файлдың символдарын біртіндеп оқиды және сығылған файлға биттерді қосады. Бұл әдісті түсіну үшін алынған кодты [0,1) интервалындағы сан ретінде қарастыру керек(мұндағы [a,b) a жабық, b ашық). М±нда «9746509» кодын «9.9746509» коды ретінде түсінеді, бірақ «0.» бөлігі жіберілген файлға қосылмайды.

Бірінші қадамда алфавиттегі әрбір символдың пайда болу жилігін анықтау қажет. Ең жақсы нәтижені енетін файлдың барлығын оқу барысында ғана алуға болады.

Бірінші мысалда ықтималдықтары P1=0.4, P2=0.5 және P3=0.1 болатын символдарын қарастырамыз. [0,1) интервалы осы үш символға қатысты пропорционал бөліктерге бөлінеді. Бұл интервалдардың орналасу реті маңызды емес. Қарастырылып отырған мысалда 3 символға [0, 0.4), [0.4,0.9) және [0.9,1) интервалдары сәйкес келеді. « » жолдарын кодтау үшін біз [0,1) интервалын бөлуден бастаймыз. Бірінші символы бұл интервалды басынан 40%, сонынан 10% қысқартады. Нәтжесінде [0.4,0.9) интервалын екінші символы [0.6,0.85) аралыққа дейін қысқартады. Үшінші символы [0.7, 0.825)- ге дейін мәнін ауыстырады. Ең сонында символы басынан 90% -ті алып тастайды, ал соңғы нүктені өзгеріссіз қалдырады. Сонында [0.8125, 0.825) интервалы қалады. Біздің нәтижелік код ретінде осы аралықтағы кез келген санды алуға болады.[0.6, 0.85) интервалы [0.4, 0.9) интервалынан келесі түрлендіру бойынша алынады. 0.4+(0.9-0.4)х0.4=0.6 және 0.4+(0.9-0.4)х0.9=0.853

Осы мысал арқылы арифметикалық кодтау алгоритмнің келесі қадамдарын атап айтуға болады:

  1. [0,1) ағымдық интервалды беру;

  2. Әрбір енетін S файлға келесі қадамдарды қайталаңыз;

    1. Ағымдағы интервалды әрбір символдың ықтималдығына байланысты пропорционал бөліктерге бөліңіз;

    2. S1символына қатысты интервалы таңдап, оны ағымдағы интервал ретінде алу ;

  3. Енгізілген барлық файл өңделгеннен кейін, алгоритмнің шығуы деп кез - келген нүкте алынады. Кез - келген өңделген символдан кейін, ағымдағы символ сығылып отырылады. Кодтың орташа ұзындығы табу ‰шін шығатын биттер өлшемін енетін символдар өлшеміне бөлу керек.

Негізгі әдебиеттер: [1, 2, 3]

Қосымша әдебиеттер:[11, 12]

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]