Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
informatika:maturita:huffmann [26. 09. 2020, 22.57] rydlo vytvořeno |
informatika:maturita:huffmann [26. 09. 2020, 23.18] (aktuální) rydlo |
||
---|---|---|---|
Řádek 7: | Řádek 7: | ||
V klasickém kódování ASCII zabere 22 B neboli 176 b. | V klasickém kódování ASCII zabere 22 B neboli 176 b. | ||
- | V Huffmanově kódování pouze 46 b tedy necelých 6 B. | + | V Huffmanově kódování pouze 60 b tedy necelých 8 B. |
- | Postup: | + | ==== Postup ==== |
- **Zjistíme četnost** jednotlivých znaků:<WRAP> | - **Zjistíme četnost** jednotlivých znaků:<WRAP> | ||
^ Znak | T | E | SPC | N | J | O | X | S | | ^ Znak | T | E | SPC | N | J | O | X | S | | ||
Řádek 17: | Řádek 17: | ||
- Zpětně **procházíme vzniklý strom** a na každé úrovni **přidělujeme vždy symboly 1 a 0** tak, že větev/znak s vyšší četností dostane 1 a větev/znak s nižší četností 0. | - Zpětně **procházíme vzniklý strom** a na každé úrovni **přidělujeme vždy symboly 1 a 0** tak, že větev/znak s vyšší četností dostane 1 a větev/znak s nižší četností 0. | ||
- | Na příkladu: | + | ==== Na příkladu ==== |
- Nejnižší četnost mají znaky X,S, proto vznikne dvojznak (X,S) s četností 2:<WRAP> | - Nejnižší četnost mají znaky X,S, proto vznikne dvojznak (X,S) s četností 2:<WRAP> | ||
^ Znak | T | E | SPC | N | J | (X,S) | O | | ^ Znak | T | E | SPC | N | J | (X,S) | O | | ||
Řádek 23: | Řádek 23: | ||
</WRAP> | </WRAP> | ||
- Další dvojice v pořad je O a dvojznak (X,S):<WRAP> | - Další dvojice v pořad je O a dvojznak (X,S):<WRAP> | ||
- | ^ Znak | T | E | SPC | ((X,S),O) | N | J | | + | ^ Znak | T | E | SPC | ( (X,S),O) | N | J | |
- | ^ Četnost | 6 | 5 | 4 | 3 | 2 | 2 | | + | ^ Četnost | 6 | 5 | 4 | 3 | 2 | 2 | |
</WRAP> | </WRAP> | ||
- Nyní mají nejnižší četnost znaky N a J, vzniká z nich dvojznak:<WRAP> | - Nyní mají nejnižší četnost znaky N a J, vzniká z nich dvojznak:<WRAP> | ||
- | ^ Znak | T | E | SPC | (N,J) | ((X,S),O) | | + | ^ Znak | T | E | SPC | (N,J) | ( (X,S),O) | |
- | ^ Četnost | 6 | 5 | 4 | 4 | 3 | | + | ^ Četnost | 6 | 5 | 4 | 4 | 3 | |
</WRAP> | </WRAP> | ||
- V dalším kroku budeme slučovat trojznak XSO a dvojznak NJ, který bude mít hodnotu 7:<WRAP> | - V dalším kroku budeme slučovat trojznak XSO a dvojznak NJ, který bude mít hodnotu 7:<WRAP> | ||
- | ^ Znak | ((N,J),((X,S),O)) | T | E | SPC | | + | ^ Znak | ( (N,J),( (X,S),O) ) | T | E | SPC | |
- | ^ Četnost | 7 | 6 | 5 | 4 | | + | ^ Četnost | 7 | 6 | 5 | 4 | |
</WRAP> | </WRAP> | ||
- Dále slučujeme mezeru a E:<WRAP> | - Dále slučujeme mezeru a E:<WRAP> | ||
- | ^ Znak | (E,SPC) | ((N,J),((X,S),O)) | T | | + | ^ Znak | (E,SPC) | ( (N,J),( (X,S),O) ) | T | |
- | ^ Četnost | 9 | 7 | 6 | | + | ^ Četnost | 9 | 7 | 6 | |
</WRAP> | </WRAP> | ||
- V předposledním kroku bude složený znak NJXSO spojen s T:<WRAP> | - V předposledním kroku bude složený znak NJXSO spojen s T:<WRAP> | ||
- | ^ Znak | (((N,J),((X,S),O)),T) | (E,SPC) | | + | ^ Znak | ( ( (N,J),( (X,S),O) ),T) | (E,SPC) | |
- | ^ Četnost | 13 | 9 | | + | ^ Četnost | 13 | 9 | |
</WRAP> | </WRAP> | ||
- Při posledním složení už vznikne jediný složený znak, tedy kompletní strom: - V předposledním kroku bude složený znak NJXSO spojen s T:<WRAP> | - Při posledním složení už vznikne jediný složený znak, tedy kompletní strom: - V předposledním kroku bude složený znak NJXSO spojen s T:<WRAP> | ||
- | ^ Znak | ((((N,J),((X,S),O)),T),(E,SPC)) | | + | ^ Znak | ( ( ( (N,J),( (X,S),O) ),T),(E,SPC)) | |
- | ^ Četnost | 22 | | + | ^ Četnost | 22 | |
</WRAP> | </WRAP> | ||
- | Výše uvedený řetězec lze zapsat také formou stromu: | + | ==== Výše uvedený řetězec lze zapsat také formou stromu ==== |
- | {{ :informatika:maturita:huffmanstrom.png?nolink&200 |Strom Huffmanova kódování pro větu "TENTO TEXT JE JEN TEST"}} | + | |
+ | {{ :informatika:maturita:huffmanstrom.png?nolink&300 |Strom Huffmanova kódování pro větu "TENTO TEXT JE JEN TEST"}} | ||
+ | |||
+ | ==== Při zpětném sestavení přidělujeme 1 a 0 ==== | ||
+ | |||
+ | |||
+ | | krok: ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ Celkem | | ||
+ | ^ T | 1 | 0 | | | | **10** | | ||
+ | ^ E | 0 | 1 | | | | **01** | | ||
+ | ^ SPC | 0 | 0 | | | | **00** | | ||
+ | ^ N | 1 | 1 | 1 | 1 | | **1111** | | ||
+ | ^ J | 1 | 1 | 1 | 0 | | **1110** | | ||
+ | ^ O | 1 | 1 | 0 | 0 | | **1100** | | ||
+ | ^ X | 1 | 1 | 0 | 1 | 0 | **11010** | | ||
+ | ^ S | 1 | 1 | 0 | 1 | 1 | **11011** | | ||
+ | |||
+ | [[http://huffman.ooz.ie/?text=TENTO TEXT JE JEN TEST|online zpracování stromu]] | ||
+ | ==== Zakódovaný text ==== | ||
+ | 100111111011000010011101010001110010011100111110010011101110 | ||
+ | |||
+ | Dekódování probíhá **sekvenčně** náhradou za znak z tabulky, vždy jakmile to nalezená sekvence umožňuje: | ||
+ | | 10 | 01 | 1111 | 10 | 1100 | 00 | 10 | 01 | 11010 | 10 | 00 | 1110 | 01 | 00 | 1110 | 01 | 1111 | 00 | 10 | 01 | 11011 | 10 | | ||
+ | | T | E | N | T | O | | T | E | X | T | | J | E | | J | E | N | | T | E | S | T | |