<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.512.cz/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>https://www.512.cz/index.php?feed=atom&amp;target=Tomiksed&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FTomiksed</id>
		<title>FAV wiki - Příspěvky uživatele [cs]</title>
		<link rel="self" type="application/atom+xml" href="https://www.512.cz/index.php?feed=atom&amp;target=Tomiksed&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2FTomiksed"/>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/Tomiksed"/>
		<updated>2026-10-20T15:46:19Z</updated>
		<subtitle>Z FAV wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD</id>
		<title>Dolní omezení pro porovnávací řazení</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD"/>
				<updated>2017-06-07T10:29:18Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zkoumejme dolni omezeni počtu porovnani T(n) pro porovnávaci algoritmy řazení.&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Dolni-omezeni.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předpokladejme, že všechny prvky posloupnosti a1, a2, ..., an jsou různé. Porovnavací řazeni můžeme znázornit rozhodovacim stromem. Ve vnitřních vrcholech jsou prvky, ktere algoritmus porovná a v listech je permutace všech prvků původni posloupnosti, ktera je seřazena.&lt;br /&gt;
&lt;br /&gt;
Přiklad rozhodovaciho stromu pro řazeni vkladanim tři prvků:&lt;br /&gt;
Jakykoliv 100% správný algoritmus (brutální síla) musi vytvořit každou z n! permutací prvků původní posloupnosti a zjistit, která je seřazená. Každou z takových permutací umístíme do stromu, ve kterém je v kořenech naznačeno porovnání, kterým se k permutacím dostaneme.&lt;br /&gt;
&lt;br /&gt;
Nejhoršim připadem počtu porovnani vykonanych algoritmem řazeni je nejdelši cesta od kořene stromu k listu, je tedy rovna vyšce stromu T(n) = h . &lt;br /&gt;
&lt;br /&gt;
Nyní musíme najít dolní omezení všech rozhodovacích stromů. Nechť rozhodovaci strom o výšce h má l  listů, potom l = 2^h (binární strom má maximálně 2^h listů). Současně listů musi byt alespoň tolik, kolik je permutaci, tedy n! &amp;lt;= l. &lt;br /&gt;
Potom n! &amp;lt;= l &amp;lt;= 2h a po logaritmování (zjištění délky cesty, každá vrstva x grafu má 2x možných cest (2x listů), takže číslo vrstvy a tedy i délka ke kořeni je funkce inverzní, tedy log2x)&lt;br /&gt;
&lt;br /&gt;
	 log2 (n!) &amp;lt;= log_2(2^h) | h*log_2(2) -&amp;gt; h * 1 = h = počet porovnání, kterým se dostneme k permutaci&lt;br /&gt;
&lt;br /&gt;
Použitim levé části aproximace e*(n/e)^2 &amp;lt;= n! &amp;lt;= e*((n+1)/e)^(n+1) se dostáváme na:&lt;br /&gt;
&lt;br /&gt;
log_2(n!) ~ n * log_2 (e*(n/e)) = n*(log_2(e) + log_2(n) - log_2(e))&lt;br /&gt;
&lt;br /&gt;
čim dostavame dolni omezeni pro nejhorši připad Ω(n*log_2(n)).&lt;br /&gt;
&lt;br /&gt;
Protože pro řazeni haldou a slučovanim jsou shora omezeny časem vypočtu Ω(n*log2 n), jsou tato řazeni asymptoticky optimalni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD</id>
		<title>Dolní omezení pro porovnávací řazení</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD"/>
				<updated>2017-06-07T10:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zkoumejme dolni omezeni počtu porovnani T(n) pro porovnávaci algoritmy řazení.&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Dolni-omezeni.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předpokladejme, že všechny prvky posloupnosti a1, a2, ..., an jsou různé. Porovnavací řazeni můžeme znázornit rozhodovacim stromem. Ve vnitřních vrcholech jsou prvky, ktere algoritmus porovná a v listech je permutace všech prvků původni posloupnosti, ktera je seřazena.&lt;br /&gt;
&lt;br /&gt;
Přiklad rozhodovaciho stromu pro řazeni vkladanim tři prvků:&lt;br /&gt;
Jakykoliv 100% správný algoritmus (brutální síla) musi vytvořit každou z n! permutací prvků původní posloupnosti a zjistit, která je seřazená. Každou z takových permutací umístíme do stromu, ve kterém je v kořenech naznačeno porovnání, kterým se k permutacím dostaneme.&lt;br /&gt;
&lt;br /&gt;
Nejhoršim připadem počtu porovnani vykonanych algoritmem řazeni je nejdelši cesta od kořene stromu k listu, je tedy rovna vyšce stromu T(n) = h . &lt;br /&gt;
&lt;br /&gt;
Nyní musíme najít dolní omezení všech rozhodovacích stromů. Nechť rozhodovaci strom o výšce h má l  listů, potom l = 2^h (binární strom má maximálně 2^h listů). Současně listů musi byt alespoň tolik, kolik je permutaci, tedy n! &amp;lt;= l. &lt;br /&gt;
Potom n! &amp;lt;= l &amp;lt;= 2h a po logaritmování (zjištění délky cesty, každá vrstva x grafu má 2x možných cest (2x listů), takže číslo vrstvy a tedy i délka ke kořeni je funkce inverzní, tedy log2x)&lt;br /&gt;
&lt;br /&gt;
	 log2 (n!) &amp;lt;= log_2(2^h) | h*log_2(2) -&amp;gt; h * 1 = h = počet porovnání, kterým se dostneme k permutaci&lt;br /&gt;
&lt;br /&gt;
Použitim levé části aproximace e*(n/e)^2 &amp;lt;= n! &amp;lt;= e*((n+1)/e)^(n+1) se dostáváme na:&lt;br /&gt;
&lt;br /&gt;
log_2(n!) ~ n * log_2 (e*(n/e)) = n*(log_2(e) + log_2(n) - log_2(e))&lt;br /&gt;
&lt;br /&gt;
čim dostavame dolni omezeni pro nejhorši připad Ω(n*log2 n).&lt;br /&gt;
&lt;br /&gt;
Protože pro řazeni haldou a slučovanim jsou shora omezeny časem vypočtu Ω(n*log2 n), jsou tato řazeni asymptoticky optimalni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD</id>
		<title>Dolní omezení pro porovnávací řazení</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD"/>
				<updated>2017-06-07T10:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zkoumejme dolni omezeni počtu porovnani T(n) pro porovnávaci algoritmy řazení.&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Dolni-omezeni.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předpokladejme, že všechny prvky posloupnosti a1, a2, ..., an jsou různé. Porovnavací řazeni můžeme znázornit rozhodovacim stromem. Ve vnitřních vrcholech jsou prvky, ktere algoritmus porovná a v listech je permutace všech prvků původni posloupnosti, ktera je seřazena.&lt;br /&gt;
&lt;br /&gt;
Přiklad rozhodovaciho stromu pro řazeni vkladanim tři prvků:&lt;br /&gt;
Jakykoliv 100% správný algoritmus (brutální síla) musi vytvořit každou z n! permutací prvků původní posloupnosti a zjistit, která je seřazená. Každou z takových permutací umístíme do stromu, ve kterém je v kořenech naznačeno porovnání, kterým se k permutacím dostaneme.&lt;br /&gt;
&lt;br /&gt;
Nejhoršim připadem počtu porovnani vykonanych algoritmem řazeni je nejdelši cesta od kořene stromu k listu, je tedy rovna vyšce stromu T(n) = h . &lt;br /&gt;
&lt;br /&gt;
Nyní musíme najít dolní omezení všech rozhodovacích stromů. Nechť rozhodovaci strom o výšce h má l  listů, potom l = 2^h (binární strom má maximálně 2^h listů). Současně listů musi byt alespoň tolik, kolik je permutaci, tedy n! &amp;lt;= l. &lt;br /&gt;
Potom n! &amp;lt;= l &amp;lt;= 2h a po logaritmování (zjištění délky cesty, každá vrstva x grafu má 2x možných cest (2x listů), takže číslo vrstvy a tedy i délka ke kořeni je funkce inverzní, tedy log2x)&lt;br /&gt;
&lt;br /&gt;
	 log2 (n!) &amp;lt;= log_2(2^h) | h*log_2(2) -&amp;gt; h * 1 = h = počet porovnání, kterým se dostneme k permutaci&lt;br /&gt;
&lt;br /&gt;
Použitim levé části aproximace e*(n/e)^2 &amp;lt;= n! &amp;lt;= e*((n+1)/e)^(n+1) se dostáváme na:&lt;br /&gt;
&lt;br /&gt;
log_2(n!) = n * log_2 (e*(n/e)) = n*(log_2(e) + log_2(n) - log_2(e))&lt;br /&gt;
&lt;br /&gt;
čim dostavame dolni omezeni pro nejhorši připad Ω(n*log2 n).&lt;br /&gt;
&lt;br /&gt;
Protože pro řazeni haldou a slučovanim jsou shora omezeny časem vypočtu Ω(n*log2 n), jsou tato řazeni asymptoticky optimalni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD</id>
		<title>Dolní omezení pro porovnávací řazení</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Doln%C3%AD_omezen%C3%AD_pro_porovn%C3%A1vac%C3%AD_%C5%99azen%C3%AD"/>
				<updated>2017-06-07T10:28:09Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Zkoumejme dolni omezeni počtu porovnani T(n) pro porovnávaci algoritmy řazení.&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Dolni-omezeni.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Předpokladejme, že všechny prvky posloupnosti a1, a2, ..., an jsou různé. Porovnavací řazeni můžeme znázornit rozhodovacim stromem. Ve vnitřních vrcholech jsou prvky, ktere algoritmus porovná a v listech je permutace všech prvků původni posloupnosti, ktera je seřazena.&lt;br /&gt;
&lt;br /&gt;
Přiklad rozhodovaciho stromu pro řazeni vkladanim tři prvků:&lt;br /&gt;
Jakykoliv 100% správný algoritmus (brutální síla) musi vytvořit každou z n! permutací prvků původní posloupnosti a zjistit, která je seřazená. Každou z takových permutací umístíme do stromu, ve kterém je v kořenech naznačeno porovnání, kterým se k permutacím dostaneme.&lt;br /&gt;
&lt;br /&gt;
Nejhoršim připadem počtu porovnani vykonanych algoritmem řazeni je nejdelši cesta od kořene stromu k listu, je tedy rovna vyšce stromu T(n) = h . &lt;br /&gt;
&lt;br /&gt;
Nyní musíme najít dolní omezení všech rozhodovacích stromů. Nechť rozhodovaci strom o výšce h má l  listů, potom l = 2^h (binární strom má maximálně 2^h listů). Současně listů musi byt alespoň tolik, kolik je permutaci, tedy n! &amp;lt;= l. &lt;br /&gt;
Potom n! &amp;lt;= l &amp;lt;= 2h a po logaritmování (zjištění délky cesty, každá vrstva x grafu má 2x možných cest (2x listů), takže číslo vrstvy a tedy i délka ke kořeni je funkce inverzní, tedy log2x)&lt;br /&gt;
&lt;br /&gt;
	 log2 (n!) &amp;lt;= log_2(2^h) | h*log_2(2) -&amp;gt; h * 1 = h = počet porovnání, kterým se dostneme k permutaci&lt;br /&gt;
&lt;br /&gt;
Použitim levé části aproximace e*(n/e)^2 &amp;lt;= n! &amp;lt;= e*((n+1)/e)^(n+1) se dostáváme na:&lt;br /&gt;
&lt;br /&gt;
log_2(n!) = n * log_2 (e*(n/e)) = n*(log_2(e) + log_2(n) - log_2(e))&lt;br /&gt;
&lt;br /&gt;
čim dostavame dolni omezeni pro nejhorši připad Ω(n*log2 n).&lt;br /&gt;
&lt;br /&gt;
Protože pro řazeni haldou a slučovanim jsou shora omezeny časem vypočtu Ω(n*log2 n), jsou tato řazeni asymptoticky optimalni.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''JE TO ŠPATNĚ !!!!!!!!!!!!!!! V TEXTU NEJSOU VIDĚT INDEX h^2 viz.: [http://www.kiv.zcu.cz/~netrvalo/vyuka/ppa2-11/ekniha/online/HTML/54/default.htm]'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=KIV/BZINF_-_St%C3%A1tnice_pro_informatiky</id>
		<title>KIV/BZINF - Státnice pro informatiky</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=KIV/BZINF_-_St%C3%A1tnice_pro_informatiky"/>
				<updated>2017-06-07T08:46:37Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Okruhy pro státní závěrečnou zkoušku. Zpravidla ale neplatí, že jeden okruh je jedna otázka. Někdy třeba spojí více okruhů do jednoho, jindy se zase zeptají jen na jednu jeho část.&lt;br /&gt;
&lt;br /&gt;
Důležitá poznámka: '''používejte mozek'''! Wiki je plná kravin, přemýšlejte nad tím, co čtete, protože říct u státnic naprostou volovinu je to nejhorší, co se vám může stát. I odpověď &amp;quot;nevím&amp;quot; je lepší...&lt;br /&gt;
&lt;br /&gt;
== PPA2 ==&lt;br /&gt;
&lt;br /&gt;
# [[Problém, algoritmus, program]]&lt;br /&gt;
# [[Vykonání programu]]&lt;br /&gt;
# [[Objekt, třída]]&lt;br /&gt;
# [[Spojové datové struktury]]&lt;br /&gt;
# [[Správnost programů]]&lt;br /&gt;
# [[Analýza programů]]&lt;br /&gt;
# [http://www.512.cz/index.php?title=Analýza_programů#Asymptotick.C3.A1_slo.C5.BEitost Asymptotická složitost]&lt;br /&gt;
# [[Rekurze]]&lt;br /&gt;
# [[Abstraktní datové typy]]&lt;br /&gt;
# [[Zásobník, fronta, seznam]]&lt;br /&gt;
# [[Strom, průchody stromem, binární vyhledávací stromy]]&lt;br /&gt;
# [[Grafy a jejich implementace]]&lt;br /&gt;
# [[Prohledávání grafů]]&lt;br /&gt;
# [[Topologické řazení]]&lt;br /&gt;
# [[Tabulka s přímým adresováním]]&lt;br /&gt;
# [[Rozptylové tabulky s vnějším řetězením]]&lt;br /&gt;
# [[Prioritní fronta]]&lt;br /&gt;
# [[Halda]]&lt;br /&gt;
# [[Algoritmy řazení O(N logN)]]&lt;br /&gt;
# [[Dolní omezení pro porovnávací řazení]]&lt;br /&gt;
# [[Generičnost]]&lt;br /&gt;
# [[Dědičnost]]&lt;br /&gt;
# [[Rozhraní]]&lt;br /&gt;
# [[Algoritmická řešitelnost problémů]]&lt;br /&gt;
# [[Klasifikace problémů]]&lt;br /&gt;
&lt;br /&gt;
== PT ==&lt;br /&gt;
&lt;br /&gt;
# [[Úvod do technologie programování a programovacích stylů, objektově orientovaný návrh, základní UML diagramy, psaní programů v Javě]]&lt;br /&gt;
# [[Abstraktní datové typy zásobník fronta, seznamy, řady, vektory a jejich implementace]]&lt;br /&gt;
# [[Stromové struktury (Avl, BVS, B, Red-Black) a jejich implementace]]&lt;br /&gt;
# [[Skip-list - použití a implementace]]&lt;br /&gt;
# [[Tabulky s rozptýlenými položkami, vyhledávání v tabulkách]]&lt;br /&gt;
# [[Algoritmy zpracování textů – operace s řetězci, porovnání se vzorem (KMP, Boyer-Moore algoritmus), nejdelší společný podřetězec (LCS algoritmus), vzdálenost mezi řetězci, datová struktura Trie a použití]]&lt;br /&gt;
# [[Komprese dat, rozdělení kompresních metod, princip kompresních metod (Huffmann, aritmetické kódování, LZW, JPG, fraktálová komprese)]]&lt;br /&gt;
# [[Grafové algoritmy (cesta – Dijkstra, Floyd-Warshal, kostra – Prim-Jarnik), reprezentace grafu (matice, seznam sousednosti), základy kryptografie (symetrické, asymetrické šifrování)]]&lt;br /&gt;
&lt;br /&gt;
== ZOS ==&lt;br /&gt;
&lt;br /&gt;
# [[Rozdělení OS, architektura a komponenty OS]]&lt;br /&gt;
# [http://www.512.cz/index.php?title=Rozdělení_OS,_architektura_a_komponenty_OS#Komponenty_OS Základní funkce OS]&lt;br /&gt;
# [[Vyvolání služeb OS, zpracování přerušení]]&lt;br /&gt;
# [[Proces, implementace procesu, konstrukce pro vytváření procesů]]&lt;br /&gt;
# [[Paralelní procesy, prostředky pro popis paralelních procesů, vlákna]]&lt;br /&gt;
# [[Problém kritické sekce]]&lt;br /&gt;
# [[Prostředky pro synchronizaci procesů]]&lt;br /&gt;
# [[Semafory, jejich použití a implementace]]&lt;br /&gt;
# [[Monitory]]&lt;br /&gt;
# [[Problém uvíznutí procesů, graf alokace zdrojů]]&lt;br /&gt;
# [[Klasické problémy meziprocesové komunikace – producent-konzument aj.]]&lt;br /&gt;
# [[Plánování úloh a procesů v dávkových systémech]]&lt;br /&gt;
# [[Plánování procesů v interaktivních systémech]]&lt;br /&gt;
# [[Správa hlavní paměti, metody přidělování paměti, virtuální paměť]]&lt;br /&gt;
# [[Algoritmy nahrazování stránek paměti]]&lt;br /&gt;
# [[Ovládání periferních zařízení, RAID]]&lt;br /&gt;
# [[Systémy souborů]]&lt;br /&gt;
# [[Kontrola konzistence souborového systému, mechanismy ochrany před neoprávněným přístupem]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv}}&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;br /&gt;
[[Kategorie:KIV]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Rekurze</id>
		<title>Rekurze</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Rekurze"/>
				<updated>2017-06-07T08:32:04Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: /* Příklady */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rekurzí rozumíme sebevolání, tedy kód, který volá sám sebe či svojí část (přímá rekurze), případně volá kód, který posléze volá kód volající (nepřímá rekurze).&lt;br /&gt;
&lt;br /&gt;
Rekurze je vhodná pro řešení rekurzivních problémů (například výpočet faktoriálu nebo Fibonacciho posloupnosti, fraktály), je však paměťově velmi náročný (každé rekurzivní volání vyžaduje vlastní paměťový prostor), doporučuje se tedy pouze pro vhodné problémy (rekurzivní výpis řetězce na obrazovku je nesmysl).&lt;br /&gt;
&lt;br /&gt;
Rekurze musí mít následující podmínky: &lt;br /&gt;
* musí být konečná, tedy musí existovat vstup, pro který rekurzivní funkce nevolá sama sebe, tedy musí být testována tato konečnost před voláním sebe sama&lt;br /&gt;
* problém se musí rekurzí zjednodušovat, aby rekurze ke koncové podmínce dospěla (případně můžeme definovat maximální počet vnoření jako pojistku)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Typy rekurze ==&lt;br /&gt;
&lt;br /&gt;
* '''Přímá''' - metoda volá sama sebe&lt;br /&gt;
* '''Nepřímá''' - metoda volá metodu, která volá zpětně ji&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Lineární''' - metoda volá pouze jednu svoji kopii (faktorial)&lt;br /&gt;
* '''Stromová''' - metoda volá více svých kopií (Fibonacci, průchod adresářovou strukturou, často Divide &amp;amp; Conquer algoritmy)&lt;br /&gt;
&lt;br /&gt;
Rekurze však často umožňuje zjednodušení kódu a ušetření času při programování. Často lze rekurzivní problémy řešit také čistě iteračním algoritmem, nebo použitím zásobníku.&lt;br /&gt;
&lt;br /&gt;
Příklad: Procházení adresářové struktury.&lt;br /&gt;
Vytvoříme metodu ProjdiAdresář(string cesta);&lt;br /&gt;
&lt;br /&gt;
Iteračně (nesmysl?):&lt;br /&gt;
&lt;br /&gt;
# Vytvoříme ukazatel na položku adresářové struktury ukazující &amp;quot;před?&amp;quot; výchozí adresář a uložíme tuto hodnotu do vedlejší proměnné&lt;br /&gt;
# Posuneme ukazatel na další položku adresáře&lt;br /&gt;
# Je-li pod ukazatelem označená položka, nebo prázdno, vrátíme se na předchozí položku a zpět na 2, nebo ukončíme, pokud jsme na uložené položce &amp;quot;před?&amp;quot;&lt;br /&gt;
# Je-li pod ukazatelem adresář, označíme jej jako zpracovaný (i když je otázka jak) a posuneme ukazatel na jeho první položku&lt;br /&gt;
# Je-li pod ukazatelem soubor, [otevře, vypíše název, zpracuje, přidá do vlastní datové struktury,...], a označíme soubor jako zpracovaný &lt;br /&gt;
# Zpět na bod 2&lt;br /&gt;
&lt;br /&gt;
Zásobníkem: &lt;br /&gt;
&lt;br /&gt;
# Načte obsah adresáře 'cesta' do zásobníku&lt;br /&gt;
# Prochází položky zásobníku:&lt;br /&gt;
## Je - li položka soubor, [otevře, vypíše název, zpracuje, přidá do vlastní datové struktury,...]&lt;br /&gt;
## Je - li položka adresář, načte jeho obsah do zásobníku&lt;br /&gt;
# Opakuje body 2 a 3 dokud není zásobník prázdný&lt;br /&gt;
&lt;br /&gt;
Rekurzivně:&lt;br /&gt;
&lt;br /&gt;
# Načíst obsah adresáře 'cesta' a prochází jednotlivé položky&lt;br /&gt;
# Narazí - li na soubor, [otevře, vypíše název, zpracuje, přidá do vlastní datové struktury,...]&lt;br /&gt;
# Narazí - li na adresář, volá sama sebe na  jeho cestu&lt;br /&gt;
&lt;br /&gt;
Vidíme, že pro rekurzi neimplementujeme vlastní zásobník (viz však níže), a kód je přehlednější (Rekurze cca 5 řádek, iteračně mnohem více)&lt;br /&gt;
&lt;br /&gt;
Pár slov k implementaci rekurze:&lt;br /&gt;
V imperativním programování je většinou rekurze vnitřně řešena jak jinak než na zásobníku, jelikož je stav volající funkce uložen na vnitřní zásobník. Technicky vzato je tedy rekurze nahrazena zásobníkovým způsobem. Pri chybě rekurze (nesplnění koncové podmínky) většina jazyků vyhodí Stack Overflow (přetečení zásobníku) případně Access violation (Chyba přístupu do chráněné paměti), záleží na způsobu vnitřní implementace zásobníku.&lt;br /&gt;
&lt;br /&gt;
// http://www.abclinuxu.cz/clanky/ruzne/komiks-xkcd-244-stolni-rpg pro ty, to ví co je Dungeons &amp;amp; Dragons&lt;br /&gt;
&lt;br /&gt;
== Příklady ==&lt;br /&gt;
&lt;br /&gt;
Výpočet faktoriálu: &lt;br /&gt;
&lt;br /&gt;
 int faktorial(int f) {&lt;br /&gt;
   if (f &amp;lt;= 1) &lt;br /&gt;
     return 1;&lt;br /&gt;
   else &lt;br /&gt;
     return f * faktorial(f - 1);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Fibonacciho posloupnost:&lt;br /&gt;
&lt;br /&gt;
Pozor na tento příklad. Fibonacciho posloupnost je jeden z nejhorších příkladů rekurze. Použitím rekurze u fibonacciho posloupnosti se dostáváte na velmi vysokou exponenciální složitost algoritmu, vedoucí k miliardám volání pro počáteční prvky posloupnosti. 50. prvek posloupnosti, skoro 16 miliard volání funkce fibonacci. Tento příklad nepatří do materiálů, natož ke státnicím!!! (pokud tedy není uváděn jako špatný příklad pro použití rekurze)&lt;br /&gt;
&lt;br /&gt;
 int fibonacci(int n) {&lt;br /&gt;
   if (n &amp;lt;= 2)&lt;br /&gt;
    return 1;&lt;br /&gt;
  else&lt;br /&gt;
    return fibonacci(n - 1) + fibonacci(n - 2);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Halda</id>
		<title>Halda</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Halda"/>
				<updated>2017-05-28T16:39:01Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: /* Vlastnosti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halda je datová struktura, která má následující vlastnosti:&lt;br /&gt;
&lt;br /&gt;
* Jde o strom&lt;br /&gt;
* Pokud C je potomkem P, potom hodnota h(C) &amp;lt;= h(P)&lt;br /&gt;
&lt;br /&gt;
Tato halda se nazývá MaxHeap (maximální halda), protože má v kořeni vždy větší prvek. Existuje také minHeap (minimální halda), které je seřazena opačně. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace ==&lt;br /&gt;
&lt;br /&gt;
Nejjednodušší haldou může být seřazené pole či seznam. Nejčastěji se však používá binární halda, a pojmem halda tuto binární haldu většinou myslíme, existují však i další (binominální, Fibonacciho, měkká ...)&lt;br /&gt;
&lt;br /&gt;
Binární halda má ještě jednu vlastnost, vyváženost (vlastnost tvaru, úplnost stromu). Ta říká, že je halda buď vyvážená (všechny listy jsou na stejné úrovni h) a nebo je plněna zleva do prava.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastnosti ==&lt;br /&gt;
&lt;br /&gt;
Vyhledání nejvyššího prvku v haldě je triviální (jde o kořen haldy, tedy O(1))&lt;br /&gt;
&lt;br /&gt;
Vkládání prvku probíhá tak, že jej vložíme do nejnižší úrovně haldy, co nejvíce doleva. Pokud je tímto porušena vlastnost haldy, vyměníme prvek s jeho rodičem a opakujeme, dokud není vlastnost haldy zcela obnovena.&lt;br /&gt;
&lt;br /&gt;
Mazání prvku je podobné. V binární haldě jej provádíme tak, že najdeme prvek, který je na nejnižší úrovni zcela vlevo (mimochodem, to se dá v poli zařídit indexem, v objektech ukazatelem), vyměníme jej s mazaným prvkem a obnovíme vlastnost haldy. Mazaný prvek z haldy po té samozřejmě vyjmeme.&lt;br /&gt;
&lt;br /&gt;
Implementace na poli:&lt;br /&gt;
Má-li prvek na indexu k v poli potomky, jsou na indexech 2k+1 a 2k+2. Splněním doplňkového pravidla haldy v poli nebudou mezery, a pozice pro vložení prvku či výměnu prvku při mazání je na konci pole&lt;br /&gt;
&lt;br /&gt;
Implementace objektově&lt;br /&gt;
Jako spojová struktura, je však nutné udržovat pointer na rodiče nejnižší úrovně (to může být problematické a pomalé)&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Halda</id>
		<title>Halda</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Halda"/>
				<updated>2017-05-28T16:38:11Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: /* Vlastnosti */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Halda je datová struktura, která má následující vlastnosti:&lt;br /&gt;
&lt;br /&gt;
* Jde o strom&lt;br /&gt;
* Pokud C je potomkem P, potom hodnota h(C) &amp;lt;= h(P)&lt;br /&gt;
&lt;br /&gt;
Tato halda se nazývá MaxHeap (maximální halda), protože má v kořeni vždy větší prvek. Existuje také minHeap (minimální halda), které je seřazena opačně. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace ==&lt;br /&gt;
&lt;br /&gt;
Nejjednodušší haldou může být seřazené pole či seznam. Nejčastěji se však používá binární halda, a pojmem halda tuto binární haldu většinou myslíme, existují však i další (binominální, Fibonacciho, měkká ...)&lt;br /&gt;
&lt;br /&gt;
Binární halda má ještě jednu vlastnost, vyváženost (vlastnost tvaru, úplnost stromu). Ta říká, že je halda buď vyvážená (všechny listy jsou na stejné úrovni h) a nebo je plněna zleva do prava.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vlastnosti ==&lt;br /&gt;
&lt;br /&gt;
Vyhledání nejvyššího prvku v haldě je triviální (jde o kořen haldy, tedy O(1))&lt;br /&gt;
&lt;br /&gt;
Vkládání prvku probíhá tak, že jej vložíme do nejnižší úrovně haldy, co nejvíce doleva. Pokud je tímto porušena vlastnost haldy, vyměníme prvek s jeho rodičem a opakujeme, dokud není vlastnost haldy zcela obnovena.&lt;br /&gt;
&lt;br /&gt;
Mazání prvku je podobné. V binární haldě jej provádíme tak, že najdeme prvek, který je na nejnižší úrovni zcela vlevo (mimochodem, to se dá v poli zařídit indexem, v objektech ukazatelem), vyměníme jej s mazaným prvkem a obnovíme vlastnost haldy. Mazaný prvek z haldy po té samozřejmě vyjmeme.&lt;br /&gt;
&lt;br /&gt;
Implementace na poli:&lt;br /&gt;
Má-li prvek na indexu k v poli potomky, jsou na indexech 2k a 2k+1. Splněním doplňkového pravidla haldy v poli nebudou mezery, a pozice pro vložení prvku či výměnu prvku při mazání je na konci pole&lt;br /&gt;
&lt;br /&gt;
Implementace objektově&lt;br /&gt;
Jako spojová struktura, je však nutné udržovat pointer na rodiče nejnižší úrovně (to může být problematické a pomalé)&lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF</id>
		<title>Problém uvíznutí procesů, graf alokace zdrojů</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Probl%C3%A9m_uv%C3%ADznut%C3%AD_proces%C5%AF,_graf_alokace_zdroj%C5%AF"/>
				<updated>2017-05-26T17:43:07Z</updated>
		
		<summary type="html">&lt;p&gt;Tomiksed: /* Řešení zablokování */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;V množině procesů nastalo uvíznutí, jestliže každý proces množiny čeká na událost, kterou může způsobit pouze jiný proces množiny. Protože všechny čekají, žádný z nich událost nevygeneruje, nevzbudí jiný proces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Podmínky vzniku uvíznutí ==&lt;br /&gt;
(musejí být splněny všechny 4, 1-3 jsou předpoklad pro 4):&lt;br /&gt;
# Vzájemné vyloučení: každý zdroj je buď dostupný, nebo je výhradně přiřazen právě jednomu procesu&lt;br /&gt;
# „hold and wait“: proces držící výhradně přiřazené zdroje může požadovat další zdroje&lt;br /&gt;
# Nemožnost odejmutí: jednomu přiřazené zdroje nemohou být procesu násilně odejmuty&lt;br /&gt;
# Cyklické čekání: musí být cyklický řetězec dvou nebo více procesů, kde každý z nich čeká na zdroj držený dalším členem&lt;br /&gt;
&lt;br /&gt;
Tyto 4 podmínky mohou být modelovány pomocí orientovaných grafů = ''graf alokace zdrojů''.&lt;br /&gt;
&lt;br /&gt;
Graf má 2 typy uzlů:&lt;br /&gt;
* proces - zobrazujeme jako kruh&lt;br /&gt;
* zdroj - zobrazujeme jako čtverec&lt;br /&gt;
Význam hran:&lt;br /&gt;
* od zdroje k procesu: zdroj držen procesem&lt;br /&gt;
* od procesu ke zdroji: proces je blokován čekáním na zdroj&lt;br /&gt;
Cyklus v grafu je nutnou a postačující podmínkou pro vznik uvíznutí&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Alokace-zdroju.jpg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Řešení zablokování ==&lt;br /&gt;
&lt;br /&gt;
# '''Pštrosí algoritmus''' - Zablokování se ani nedetekuje, ani se mu nezabraňuje, ani se neodstraňuje, Uživatel sám rozhodne o řešení (kill). Nespotřebovává prostředky OS - nemá režii ani neomezuje podmínky provozu. (Nejčastější řešení - Unix, Windows)&lt;br /&gt;
# '''Detekce a zotavení''' - Hledá kružnici v orientovaném grafu (hrany vedou od procesu, který čeká, k procesu, který prostředek vlastní), pokud tam je kružnice, nastalo zablokování a je třeba ho řešit:&lt;br /&gt;
#* Odebrání prostředku - dohled operátora, pouze na přechodnou dobu&lt;br /&gt;
#* Zabíjení procesů z cyklu (resp. mimo cyklus vlastnící identický prostředek)&lt;br /&gt;
#* Rollback (OS ukládá stav procesů, při zablokování se některé procesy vrátí do předchozího stavu =&amp;gt; ztracena práce... obdoba u DB)&lt;br /&gt;
# '''Vyhýbání se''' - Bezpečný stav (procesy/prostředky nejsou zablokovány, existuje cesta, jak uspokojit všechny požadavky na prostředky spouštěním procesů v jistém pořadí); Viz bankéřův algoritmus. Nutné je předem znát všechny prostředky, které budou programy potřebovat; OS pak dává prostředky tomu, který je nejblíž svému maximu potřeby a navíc pro který je prostředků dost na dokončení. Dnes se moc nepoužívá.&lt;br /&gt;
# P'''ředcházení (prevence)''' - napadení jedné z Coffmanových podmínek&lt;br /&gt;
# '''Vzájemné vyloučení''' - spooling (prostriedky spravuje jeden systemový proces, ktory dohliada na to, aby jeho stav bol konzistentny (tiskarna) - pozor na místo na disku)&lt;br /&gt;
# '''Drž a čekej''' - žádat o všechny prostředky před startem procesu. Nejprve všechno uvolnit a pak znovu žádat o všechny najednou&lt;br /&gt;
# '''Neodnímatelnost''' - vede k chaosu&lt;br /&gt;
# '''Čekání do kruhu''' - nejvýše jeden prostředek - všechny prostředky jednoznačně očíslovány, procesy mohou žádat o prostředky jen ve vzestupném pořadí&lt;br /&gt;
# '''Dvojfázové zamykání''' - nejprve postupně všechno zamykám (první fáze). Potom se může pracovat se zamčenými prostředky - a na závěr se už jen odemyká (druhá fáze) - viď transakční spracování u databází ((striktní/konzervativní) dvoufázové zpracování)&lt;br /&gt;
&lt;br /&gt;
''Bankéřův algoritmus'': Bankéř má klienty a těm slíbil jistou výšku úvěru. Bankéř ví, že ne všichni klienti potřebují plnou výši úvěru najednou. Klienti občas navštíví banku a žádají postupně o prostředky do maximální výšky úvěru. Až klient skončí s obchodem, vrátí bance vypůjčené peníze. Bankéř peníze půjčí pouze tehdy, zůstane-li banka v bezpečném stavu. &lt;br /&gt;
&lt;br /&gt;
{{fav-kiv-bzinf}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:fav-kiv-bzinf]]&lt;/div&gt;</summary>
		<author><name>Tomiksed</name></author>	</entry>

	</feed>