Аз трябва да отговарям [Посетител (216.73.*.*) | Логин ]
Всички отговори [ 2 ]
[Посетител (58.214.*.*)]отговори [Китайски ]
Време :2022-12-17
Когато Хъфман предлага това кодиране в началото на петдесетте години на миналия век, той конструира най-краткото кодиране на средната дължина въз основа на вероятността за появата на знаци. Това е кодиране с променлива дължина. При кодирането, ако дължината на всяка кодова дума е строго подредена в обратен ред на вероятността за появата на символа, съответстващ на кодовата дума, средната дължина на кодирането е най-малка. (Забележка: Кодовата дума е кодът, получен след кодирането на символа от Хъфман, а дължината му е различна в зависимост от вероятността символът да се появи, така че кодът на Хъфман е по-дълго кодиране.) И Хъфман кодира според поддървото на бащата, докато четенето му е точно обратното.
Статично кодиране Този метод на кодиране е статично кодиране на Хъфман, което сканира данните, които трябва да бъдат кодирани два пъти: първото преминаване отчита честотата на всеки знак в оригиналните данни, използва получената честотна стойност, за да създаде дърво на Хъфман и трябва да запази информацията за дървото, т.е. честотната стойност на знака 0-255 (2 ^ 8 = 256) се съхранява в реда на дължината на 2-4BYTES (честотната стойност се съхранява в дължината на 4Bytes, а стойността на честотата се изразява в диапазона 0--2^). 32-1, което е достатъчно, за да покаже колко често се появяват знаци в големи файлове), така че да се създаде същото дърво на Хъфман за декомпресия при декомпресиране; Вторият пас кодира дървото на Хъфман, получено от първото сканиране, и съхранява кодираните кодови думи.СТАТИЧНИЯТ МЕТОД НА КОДИРАНЕ НА ХЪФМАН ИМА НЯКОИ НЕДОСТАТЪЦИ: ПЪРВО, НЕ Е ОТ ГОЛЯМО ЗНАЧЕНИЕ ДА СЕ КОДИРАТ ТВЪРДЕ КРАТКИ ФАЙЛОВЕ, ЗАЩОТО САМО СЪХРАНЯВАНЕТО НА ИНФОРМАЦИЯТА НА ДЪРВОТО НА ХЪФМАН В ДЪЛЖИНА ОТ 4 БАЙТА ИЗИСКВА 1024 БАЙТА ПРОСТРАНСТВО ЗА СЪХРАНЕНИЕ; Второ, когато се извършва кодиране на Хъфман, при съхраняване на кодираната информация, ако се използва с комуникационната мрежа, това ще доведе до голямо забавяне; Трето, при кодиране на големи файлове, честият достъп за четене и запис на диска ще забави скоростта на кодиране на данни... Динамично кодиране Затова по-късно е предложен динамичен метод за кодиране на Хъфман. Динамичното кодиране на Хъфман използва динамично променящо се дърво на Хъфман, кодирането на знака t 1 се основава на дървото на Хъфман, получено от първите t символи в оригиналните данни, кодирането и декодирането използват едно и също първоначално дърво на Хъфман, всеки обработен знак, кодирането и декодирането използват същия метод за модифициране на дървото на Хъфман, така че няма нужда да се запазва информацията за дървото на Хъфман за декодиране. Времето, необходимо за кодиране и декодиране на знак, е пропорционално на дължината на кодиране на този знак, така че динамичното кодиране на Хъфман може да се извърши в реално време. Динамичното кодиране на Хъфман е много по-сложно от статичното кодиране на Хъфман и заинтересованите читатели могат да се позовават на книги за структури от данни и алгоритми.Гореспоменатият JPEG използва кодиране на Хъфман, не че JPEG използва само кодиране на Хъфман, а картина след няколко стъпки, за да получи своя списък от стойности, тези стойности са кодирани от Huffman за съхранение или предаване. Методът на кодиране на Хъфман е сравнително лесен за разбиране и можете да напишете свои собствени програми за кодиране и декодиране на Хъфман според неговия метод на кодиране.
Алгоритъмът за конструиране на дърветата на Хъфман.
максимална стойност на const = 10000; {Дефиниране на максимално тегло}
макслеат=30; {Определете броя на листните възли в дървото на Хъфман}
maxnode=maxleaf*2-1;
тип HnodeType=запис
тегло: цяло число;
родител: цяло число;
lchild: цяло число;
rchild: цяло число;
край;
HuffArr:array[0..maxnode] на HnodeType;
var ......
процедура CreatHaffmanTree(var HuffNode: HuffArr); {Алгоритъм за конструиране на дърво на Хъфман}
var i,j,m1,m2,x1,x2,n: цяло число;
започвам readln(n); {Въведете броя на листните възли}
за i:=0 до 2*n-1 do {array HuffNode[ ] initialize}
започвам
HuffNode.weight=0;
HuffNode.parent=-1;
HuffNode.lchild=-1;
HuffNode.rchild=-1;
край;
за i:=0 до n-1 се чете (HuffNode.weight); {Въведете теглото на n листни възли}
за i:=0 до n-1 do {construct a Huffman tree}
започвам
m1:=MAXVALUE; m2:=MAXVALUE;
x1:=0; x2:=0;
за j:=0 до n i-1 do
ако (HuffNode[j].weight<m1) и (HuffNode[j].parent=-1), тогава
начало m2:=m1; x2:=x1;
m1:=HuffNode[j].тегло; x1:=j;
край
иначе ако (HuffNode[j].weight<m2) и (HuffNode[j].parent=-1), тогава
начало m2:=HuffNode[j].тегло; x2:=j; край;
{Обединяване на двете поддървета, идентифицирани в едно поддърво}
пианист Член на Комунистическата партия на Германия адвокат Американски актьор Немски гръб Професор в Берлинския университет, Германия Знаци "Мост" 1970 Британски филм на режисьора Алвин Ракоф Немски стрелецът Полски лекоатлет президент Тибетолози Озеленител Президент на ФК Хофенхайм Президент на ФК Аугсбург Елфи в играта Sail
版权申明 | 隐私权政策 | Авторско право @2018 World енциклопедични познания