Huffmanovo kódování

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
1Pupik1989
Začátečník
Začátečník
Registrován: 20. říj 2011
Bydliště: Dvůr Králové nad Labem

Huffmanovo kódování

Příspěvek od 1Pupik1989 »

Zdravím všechny.

Může mi někdo polopaticky vysvětlit jak zakódovat strom?

Mám konkrétně na mysli tuto stránku.

Jak přišel na "1101000"? To jako že zapisuji při každém průchodu vlevo 1 a pokud najdu potomka, tak 0?

Už se s tím patlám snad týden. Je mi jasné, že to bude prkotina, ale čím víc nad tím přemýšlím, tím to je horší. :D

Přiřazování kódu ke znakům mám hotové, to jsem ještě pochopil.

Děkuji za každou radu.
CPU: AMD Phenom II x4 955BE @ 4GHz FAN: Arctic Cooling Freezer Xtreme rev.2
MB: MSI 760GM-E51
RAM: Kingston 2x4Gb RAM DDR3 1333 @ 1466MHz
GPU: Gigabyte Radeon HD 6850 OC 985/1260MHz
HDD: WD Caviar Green WD10EARX 1TB SATAIII/600, ZDROJ: Fortron FSP550-APN (550W)
nou
Začátečník
Začátečník
Registrován: 11. pro 2009

Re: Huffmanovo kódování

Příspěvek od nou »

tiez nechapem ako k tomu prisiel. ale nasiel som iny sposob ako ulozit ten strom.

ak mas list tak zapis 1-bit+8 bitov toho znaku. ak je to uzol tak zapis 0 a potom zapis laveho potomka a nasledne praveho. v tebou linkovanom priklade by ten strom bol zapisany takto.

01A001B01D1K1R

prva nula hovori ze koren je uzol. lavy potomok je list s A. ideme dalej. lavy potomok korena je uzol a ze lavy potomok toho uzla je zase uzol. potomok tohto druheho uzla je list s B.
1Pupik1989
Začátečník
Začátečník
Registrován: 20. říj 2011
Bydliště: Dvůr Králové nad Labem

Re: Huffmanovo kódování

Příspěvek od 1Pupik1989 »

Něco takového jsem našel na stackoverflow. To se vlastně dá zapisovat při přiřazování znaků z kořene.

Mě spíš zajímalo jak to dokázal stáhnout na 7 bitů.

//edit: Když tak koukám na ten jeho strom, tak mi to asi začíná docházet. Ona má vždy list vlevo a vrchol vpravo. O úroveň níž je to zase naopak. Takže mu nejspíš stačí uložit jen krok o úroveň níž vlevo. Je to tedy jen teorie, ale odpovídá to.

//edit2: Ten výstup jak píšeš vlastně mám.

Kód: Vybrat vše

function recursive(node,bin,level){
    if(node.left == null){ //pokud nemá potomky, pak je to list
      o[node.name] = bin;
      tree += '1'+node.name; //zapíšu 1 + znak
      return;
    }

    tree += '0'; //není list, zapíšu 0

    recursive(node.left,bin+'0',level+1);     
    recursive(node.right,bin+'1',level+1);
  };
CPU: AMD Phenom II x4 955BE @ 4GHz FAN: Arctic Cooling Freezer Xtreme rev.2
MB: MSI 760GM-E51
RAM: Kingston 2x4Gb RAM DDR3 1333 @ 1466MHz
GPU: Gigabyte Radeon HD 6850 OC 985/1260MHz
HDD: WD Caviar Green WD10EARX 1TB SATAIII/600, ZDROJ: Fortron FSP550-APN (550W)
Odpovědět

Zpět na „Programování a web“