<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_%28rie%C5%A1en%C3%A9_pr%C3%ADklady%29</id>
	<title>Binárny strom - Huffmanovo kódovanie (riešené príklady) - História úprav</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/index.php?action=history&amp;feed=atom&amp;title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_%28rie%C5%A1en%C3%A9_pr%C3%ADklady%29"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;action=history"/>
	<updated>2026-05-03T16:11:19Z</updated>
	<subtitle>História úprav pre túto stránku na wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=6682&amp;oldid=prev</id>
		<title>Juraj na 20:30, 16. august 2010</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=6682&amp;oldid=prev"/>
		<updated>2010-08-16T20:30:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sk&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Staršia verzia&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Verzia zo dňa a času 20:30, 16. august 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Riadok 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Riadok 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:Študijné materiály]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:Programovanie]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Kategória:jazyk C]]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Draft}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Skripta programovanie (zbierka úloh)}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Skripta programovanie (zbierka úloh)}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3183&amp;oldid=prev</id>
		<title>Juraj na 19:12, 5. apríl 2010</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3183&amp;oldid=prev"/>
		<updated>2010-04-05T19:12:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;amp;diff=3183&amp;amp;oldid=3173&quot;&gt;Zobraziť rozdiely&lt;/a&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3173&amp;oldid=prev</id>
		<title>Juraj: Vytvorená stránka „Kategória:Študijné materiály Kategória:Programovanie Kategória:jazyk C {{Draft}} {{Skripta programovanie (zbierka úloh)}}  ==Zadanie== Vytvorte program n…“</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Bin%C3%A1rny_strom_-_Huffmanovo_k%C3%B3dovanie_(rie%C5%A1en%C3%A9_pr%C3%ADklady)&amp;diff=3173&amp;oldid=prev"/>
		<updated>2010-04-05T16:14:31Z</updated>

		<summary type="html">&lt;p&gt;Vytvorená stránka „&lt;a href=&quot;/index.php/Kateg%C3%B3ria:%C5%A0tudijn%C3%A9_materi%C3%A1ly&quot; title=&quot;Kategória:Študijné materiály&quot;&gt;Kategória:Študijné materiály&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Programovanie&quot; title=&quot;Kategória:Programovanie&quot;&gt;Kategória:Programovanie&lt;/a&gt; &lt;a href=&quot;/index.php/Kateg%C3%B3ria:Jazyk_C&quot; title=&quot;Kategória:Jazyk C&quot;&gt;Kategória:jazyk C&lt;/a&gt; {{Draft}} {{Skripta programovanie (zbierka úloh)}}  ==Zadanie== Vytvorte program n…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategória:Študijné materiály]]&lt;br /&gt;
[[Kategória:Programovanie]]&lt;br /&gt;
[[Kategória:jazyk C]]&lt;br /&gt;
{{Draft}}&lt;br /&gt;
{{Skripta programovanie (zbierka úloh)}}&lt;br /&gt;
&lt;br /&gt;
==Zadanie==&lt;br /&gt;
Vytvorte program na zakódovanie správy pomocou Huffmanovho kódovania. Text načítajte z textového súboru.&lt;br /&gt;
&lt;br /&gt;
==Analýza==&lt;br /&gt;
[[Huffmanovo kódovanie]] je metóda bezstratového kódovania dát založená na entropii kódovaného textu. Pri tvorbe samotného Huffmanovho kódu využijeme dátovú štruktúru [[binárny strom]]. Pri vytváraní Huffmanovho kódu potrebujeme poznať celú abecedu, ktorá bola použitá v správe a ďalej je potrebné vedieť pravdepodobnosti výskytov znakov abecedy v texte. Pre získanie týchto pravdepodobností môžeme postupovať dvoma spôsobmi:&lt;br /&gt;
#Pravdepodobnosti výskytu znakov v texte si vypočítať z:&lt;br /&gt;
##textu, ktorý budeme kódovať,&lt;br /&gt;
##veľkej vzorky textu v danom (prirodzenom) jazyku. Prirodzený jazyk sa myslí slovenčina, čeština, angličtina.&lt;br /&gt;
#Pravdepodobnosti výskytu znakov v texte použiť známe pravdepodobnosti pre daný prirodzený jazyk.&lt;br /&gt;
Výsledkom tejto analýzy bude súbor &amp;quot;znaky.txt&amp;quot; v ktorom bude zoznam všetkých znakov abecedy spolu s ich pravdepodobnosťou výskytu v texte. Formát súboru je nasledovný:prvý údaj je počet znakov abecedy (n). V ďalších n riadkoch je znak abecedy a jeho pravdepodobnosť výskytu.&lt;br /&gt;
 8&lt;br /&gt;
 E 0.05&lt;br /&gt;
 G 0.05&lt;br /&gt;
 A 0.1&lt;br /&gt;
 C 0.1&lt;br /&gt;
 F 0.1&lt;br /&gt;
 H 0.1&lt;br /&gt;
 B 0.2&lt;br /&gt;
 D 0.3&lt;br /&gt;
&lt;br /&gt;
===Výpočet pravdepodobnosti výskytu znakov v texte===&lt;br /&gt;
Uvažujme vstupný textový súbor (&amp;quot;text.txt&amp;quot;) v ktorom je text v prirodzenom jazyku. Úlohou je zistiť pravdepodobnosť výskytu všetkých znakov v danom texte. Inak povedané, je treba zistiť pravdepodobnosť výskytu všetkých znakov abecedy. Kvôli zjednodušeniu bude súbor text.txt obsahovať len veľké písmená abecedy a nebude obsahovať slovenské písmená(v súbore nie sú písmená ľ,š,č,ť,ž,ý,á,í,é,ä,ú,ň,ĺ,ď).&lt;br /&gt;
&lt;br /&gt;
Získanie pravdepodobnosti výskytu je jednoduché. Stačí spočítať početnosť všetkých znakov. Využijeme fakt, že vstupnú abecedu tvoria len veľké písmená abecedy bez znakov s mäkčeňmi a dĺžňami, ďalej číslice a interpunkčné znamienka (,.-/()+-&amp;quot;)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
void pravdepodobnost_znakov()&lt;br /&gt;
{&lt;br /&gt;
     ifstream in;&lt;br /&gt;
     in.open(&amp;quot;text.txt&amp;quot;);     &lt;br /&gt;
     if(!in) return;&lt;br /&gt;
&lt;br /&gt;
     int znaky[64];&lt;br /&gt;
     for(int i=0;i&amp;lt;64;i++)&lt;br /&gt;
          znaky[i]=0;&lt;br /&gt;
     char c;     &lt;br /&gt;
     do&lt;br /&gt;
     {   c=in.get();        &lt;br /&gt;
         znaky[c-' ']++;            &lt;br /&gt;
     }while(c&amp;gt;=0);&lt;br /&gt;
     in.close();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
V tabuľke ASCII má znak medzery hodnotu 32. Tento znak je zároveň prvým nie kontrolným znakom. Posledný znak, ktorého pravdepodobnosť budeme počítať je znak apostrov, ktorý má hodnotu 96. Preto nám stačí vytvoriť pole 64 znakov (riadok č.7). Na riadkoch 11 až 14 je načítavanie jedného znaku zo súboru, až pokým nenarazíme na koniec súboru. Pri načítaní znaku zvýšime počet jeho výskytov o 1 (riadok 13).&lt;br /&gt;
&lt;br /&gt;
Úlohou je ale vygenerovať súbor, v ktorom budú znaky abecedy usporiadané podľa ich pravdepodobnosti výskytu v texte od najmenšieho po najväčšie. Upravíme teda prechádzajúci kus kódu nasledovne:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot; line&amp;gt;&lt;br /&gt;
struct Znak{&lt;br /&gt;
       char znak;&lt;br /&gt;
       double pp;&lt;br /&gt;
       };&lt;br /&gt;
     &lt;br /&gt;
int porovnajZ(const void *a, const void *b)  &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
   if( (*(Znak*)a).pp &amp;gt; (*(Znak*)b).pp ) return 1;&lt;br /&gt;
   if( (*(Znak*)a).pp &amp;lt; (*(Znak*)b).pp ) return -1;   &lt;br /&gt;
    return 0;        &lt;br /&gt;
}&lt;br /&gt;
void pravdepodobnost_znakov()&lt;br /&gt;
{&lt;br /&gt;
     ifstream in;&lt;br /&gt;
     in.open(&amp;quot;text.txt&amp;quot;);&lt;br /&gt;
     int n=64;&lt;br /&gt;
     if(!in) return;&lt;br /&gt;
     int znaky[64];&lt;br /&gt;
     for(int i=0;i&amp;lt;64;i++)&lt;br /&gt;
          znaky[i]=0;&lt;br /&gt;
     char c;     &lt;br /&gt;
     do&lt;br /&gt;
     {   c=in.get();        &lt;br /&gt;
         znaky[c-' ']++;            &lt;br /&gt;
     }while(c&amp;gt;=0);&lt;br /&gt;
     double suma=0;&lt;br /&gt;
     for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
     {&lt;br /&gt;
        cout&amp;lt;&amp;lt;(char)(i+32)&amp;lt;&amp;lt;&amp;quot; &amp;quot;&amp;lt;&amp;lt;znaky[i]&amp;lt;&amp;lt;endl;&lt;br /&gt;
        suma+=znaky[i];&lt;br /&gt;
     }&lt;br /&gt;
     in.close();&lt;br /&gt;
     &lt;br /&gt;
     Znak abc[n];&lt;br /&gt;
     for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
     {&lt;br /&gt;
        abc[i].znak=(char)(i+32);&lt;br /&gt;
        abc[i].pp=znaky[i]/suma;&lt;br /&gt;
     }       &lt;br /&gt;
     qsort(abc,n,sizeof(abc[0]),porovnajZ);&lt;br /&gt;
     ofstream out;&lt;br /&gt;
     out.open(&amp;quot;znaky.txt&amp;quot;);&lt;br /&gt;
     out&amp;lt;&amp;lt;n&amp;lt;&amp;lt;endl;&lt;br /&gt;
     for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
     {&lt;br /&gt;
        out&amp;lt;&amp;lt;abc[i].znak&amp;lt;&amp;lt;&amp;quot;\t&amp;quot;&amp;lt;&amp;lt;abc[i].pp&amp;lt;&amp;lt;endl;&lt;br /&gt;
     }     &lt;br /&gt;
     out.close();     &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Zmeny v kóde sú až na riadku 35. Pre potreby zotriedenia znakov podľa ich pravdepodobností musíme tieto znaky uložiť do vhodnej štruktúry, kde by bola informácia o znaku a jeho pravdepodobnosti výskytu. Takáto štruktúra je na riadku 1. Štruktúra ''Znak'' obsahuje premennú ''znak'' typu char a premennú ''pp'' typu ''double'', čo je vlastne pravdepodobnosť znaku. &lt;br /&gt;
&lt;br /&gt;
Na riadku 35 si vytvoríme pole štruktúr Znak o veľkosti 64. Toto pole naplníme hodnotami (riadky 35 až 40) údajmi získanými analýzou textu. Prvý prvok poľa ''abc'' reprezentuje znak medzera ' '. Na zotriedenie tohoto poľa využijeme funkciu [[Qsort (jazyk C)|qsort]]. Na riadkoch 45 až 48 je zápis údajov do súboru vo formáte aký bol dohodnutý na začiatku.&lt;br /&gt;
&lt;br /&gt;
===Známe pravdepodobnosti výskytu znakov v texte v prirodzenom jazyku===&lt;br /&gt;
====Pravdepodobnosti pre anglickú abecedu====&lt;br /&gt;
 a  .082&lt;br /&gt;
 b  .015&lt;br /&gt;
 c  .028 &lt;br /&gt;
 d  .043 &lt;br /&gt;
 e  .127	&lt;br /&gt;
 f  .022 &lt;br /&gt;
 g  .02 &lt;br /&gt;
 h  .061 &lt;br /&gt;
 i  .07 	&lt;br /&gt;
 j  .002&lt;br /&gt;
 k  .008 &lt;br /&gt;
 l  .04 &lt;br /&gt;
 m  .024 &lt;br /&gt;
 n  .067 &lt;br /&gt;
 o  .075 &lt;br /&gt;
 p  .019 &lt;br /&gt;
 q  .001 &lt;br /&gt;
 r  .06 &lt;br /&gt;
 s  .063&lt;br /&gt;
 t  .091 &lt;br /&gt;
 u  .028 &lt;br /&gt;
 v  .01&lt;br /&gt;
 w  .023 &lt;br /&gt;
 x  .001 &lt;br /&gt;
 y  .02 &lt;br /&gt;
 z  .001&lt;/div&gt;</summary>
		<author><name>Juraj</name></author>
		
	</entry>
</feed>