<?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=81.201.60.162&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F81.201.60.162</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=81.201.60.162&amp;title=Speci%C3%A1ln%C3%AD%3AP%C5%99%C3%ADsp%C4%9Bvky%2F81.201.60.162"/>
		<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/81.201.60.162"/>
		<updated>2026-10-20T15:46:14Z</updated>
		<subtitle>Z FAV wiki</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>https://www.512.cz/index.php?title=KEE</id>
		<title>KEE</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=KEE"/>
				<updated>2012-02-14T16:19:49Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[KEE/ZBP - Základy bezpečnosti práce]]&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=KEE</id>
		<title>KEE</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=KEE"/>
				<updated>2012-02-14T09:14:45Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[KEE/ZBP - Základy bezpečnosti práce]]&lt;br /&gt;
ll&lt;br /&gt;
u&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=KEE</id>
		<title>KEE</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=KEE"/>
				<updated>2012-02-14T09:13:15Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[KEE/ZBP - Základy bezpečnosti práce]]&lt;br /&gt;
ll&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Vyjmenujte_a_stru%C4%8Dn%C4%9B_popi%C5%A1te_alespo%C5%88_dva_mechanizmy_poru%C5%A1en%C3%AD_kompozitn%C3%ADch_materi%C3%A1l%C5%AF</id>
		<title>Vyjmenujte a stručně popište alespoň dva mechanizmy porušení kompozitních materiálů</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Vyjmenujte_a_stru%C4%8Dn%C4%9B_popi%C5%A1te_alespo%C5%88_dva_mechanizmy_poru%C5%A1en%C3%AD_kompozitn%C3%ADch_materi%C3%A1l%C5%AF"/>
				<updated>2011-09-16T15:39:48Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: Založena nová stránka: Typy porušení  * delaminace - roztržení dvou vrstev kompozitu od sebe  * porušení vláken  ** vláknové přemostění  ** ztráta adheze - praskne jedno vlákno, ale...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Typy porušení &lt;br /&gt;
* delaminace - roztržení dvou vrstev kompozitu od sebe &lt;br /&gt;
* porušení vláken &lt;br /&gt;
** vláknové přemostění &lt;br /&gt;
** ztráta adheze - praskne jedno vlákno, ale ostatní drží. Může dojít k lokální ztrátě adheze - v místě se poruší několik vláken. &lt;br /&gt;
* porušení matrice - dutiny v pojivu &lt;br /&gt;
* tahem - prasknutí pojiva mezi vlákny ve směru kolmém na osu vlákna&lt;br /&gt;
&lt;br /&gt;
{{fav-kme-umm}}&lt;/div&gt;</summary>
		<author><name>81.201.60.162</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>2011-08-25T22:26:57Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: /* 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;
 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;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Anal%C3%BDza_program%C5%AF</id>
		<title>Analýza programů</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Anal%C3%BDza_program%C5%AF"/>
				<updated>2011-08-25T13:12:58Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Analýza programu se zabývá nároky programu na zdroje, tedy čas, paměť, šířka pásma... Máme-li problém, lze pro jeho řešení zpravidla použít více algoritmů, a každý algoritmus může mít několik implementací. Analýza programů se zabývá právě vztahem implementace řešení původního problému vzhledem k požadovanému zdroji.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Časová náročnost ==&lt;br /&gt;
&lt;br /&gt;
Nejčastěji nás zajímá časová náročnost programu. Analyzujeme, jakou dobu bude implementovanému algoritmu trvat výpočet. Tuto dobu ovlivňuje způsob implementace (počet nutně provedených operací) a velikost vstupních dat (počet prvků, které algoritmus zpracovává, případně jejich uspořádání). Definujeme elementární čas pro všechny operace c&amp;lt;sub&amp;gt;operace&amp;lt;/sub&amp;gt; a jejich skádáním počítáme celkový čas potřebný pro provedení algoritmu. &lt;br /&gt;
&lt;br /&gt;
Příklad: Naplnění již alokovaného pole náhodnými čísly (c#)&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0, i &amp;lt; pole.Length; i++)&lt;br /&gt;
 {&lt;br /&gt;
   pole[i] = rand.Next();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
máme pole délky n = pole.Length&lt;br /&gt;
alokace proměnné trvá caloc&lt;br /&gt;
operace přiřazení trvá cpřiřazení&lt;br /&gt;
operace porovnání trvá cporovnání&lt;br /&gt;
operaci inkrementace lze definovat jako Cinkrement = cpřiřazení + csoučet&lt;br /&gt;
řekněme, že generování náhodného čísla trvá konstantní čas Crand&lt;br /&gt;
&lt;br /&gt;
Inicializace cyklu for: alokace + přiřazení = caloc + cpřiřazení&lt;br /&gt;
Běh cyklu: porovnání (i&amp;lt;length) + přiřazení (do pole) + náh.číslo + inkrementace (i++) = cporovnání + cpřiřazení + Crand + Cinkrement&lt;br /&gt;
Cyklus for proběkne n-krát, tedy: n * ( cporovnání + cpřiřazení + Crand + Cinkrement )&lt;br /&gt;
&lt;br /&gt;
Celkem: caloc + cpřiřazení +  n * ( cporovnání + cpřiřazení + Crand + Cinkrement )&lt;br /&gt;
&lt;br /&gt;
Asymptotická složitost:&lt;br /&gt;
Ve většině případů neznáme čas potřebný pro konstantní operace, ale víme, že je velmi malý. Dobu výpočtu předchozího příkladu můžeme tedy přepsat na a + nb, kde a a b jsou doby, které mají určitou délku, která nás však přísliš nezajímá.&lt;br /&gt;
&lt;br /&gt;
Více než doba výpočtu nás tedy zajímá počet operací, které je třeba vykonat (stejně budou operace na každém systému vykonávány jinou dobu (PC vs. mobilní telefon např.)). Složitostí programu myslíme právě počet operací potřebný pro výpočet vzhledem k počtu prvků na vstupu algoritmu, omezený shora a/nebo zdola. Tato složitost se pro libovolný počet prvků asymptoticky blíží k určité funkci. Nás zajímá, ke které.&lt;br /&gt;
Rozlišujeme také složitost algoritmu a složitost problému (ta by měla patřit do otázky PPA1).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Theta notace Θ(f(x)) vyjadřuje A.S., omezenou složitostní funkcí c1,2 * f(x) shora, resp zdola, hledáme tedy 2 konstatnty, pro které je analyzovaná složitost omezena.&lt;br /&gt;
&lt;br /&gt;
Tato notace říká, že algoritmus nebude asymptoticky složitější než c1 * f(x), a nebude rychlejší než c2 * f(x).&lt;br /&gt;
Tato notace říká, že problém lze řešit algoritmem, který nebude asymptoticky složitější než c1 * f(x), a neexistuje řešení lepší než c2 * f(x).&lt;br /&gt;
&lt;br /&gt;
Omikron notace O(f(x)) vyjadřuje A.S. omezenou funkcí c * f(x) pouze shora. Jinými slovy, jde o maximální možnou složitost algoritmu. Jde o první podmínku theta notace. &lt;br /&gt;
&lt;br /&gt;
Omega notace Ω(f(x)) vyjadřuje A.S. omezenou funkcí c * f(x) pouze zdola. Říká, že algoritmus pro alespoň jeden vstup bude této složitosti, respektive že problém nelze řešit jednodušeji, než algoritmem složitosti f(x). Druhá podmínka theta notace.&lt;br /&gt;
&lt;br /&gt;
Pokud platí omikron a omega notace pro stejnou f(x), mluvíme o theta notaci.&lt;br /&gt;
&lt;br /&gt;
Konstanty v notaci zanedbáváme, jelikož vzhledem k většímu n nehrají roli. Sčítáním složitostí tedy nedochází k jejich zhoršení, jsou-li stejného řádu (např n2 + n2 = 2n2 =&amp;gt; n2, 200 operací je asymptoticky stejné jako 100, ale n2 + n3 =&amp;gt; n3 ,  100 * 100 operací je vzhledem k  100 * 100 * 100 zanedbatelné)&lt;br /&gt;
&lt;br /&gt;
Předchozí příklad je tedy složitosti  Θ(n) , jelikož je vždy lineární vzhledem k délce pole (netrvá kratší, ani delsí dobu/počet operací)&lt;br /&gt;
&lt;br /&gt;
Očekávaná složitost:&lt;br /&gt;
Většina algoritmů je asymptoticky omezena pro extrémní případny na vstupu (např. Quicksort je Ω(n) (pole již seřazeno) a O(n2) (pole je seřazeno opačně) ). Chování algoritmu má však očekávanou složitost, která nastává pro většinu případů (jak víme O(n logn) pro QuickSort). Využívá se také Theta/Omikron/Omega notací.&lt;br /&gt;
&lt;br /&gt;
Je-li algoritmus závislý na vstupních datech (resp. na jejich uspořádání), a potřebujeme, aby složitost byla pokud možno vždy očekávaná, lze využít náhodného přeuspořádání dat na vstupu (za předpokladu, že je to možné, např pro řazení ano, pro výpis znaků na obrazovku evidentně ne), Toto přeuspořádání může být konstatní složitosti (např 100x přeházíme vzájemně prvky pole s náhodnými indexy pokud je pole rozumné odpovídající délky), případně lineární, složitost algoritmu tedy neovlivňuje (za předpokladu, že algoritmus samotný není očekávané sublineární časové složitosti)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klasifikace složitosí:&lt;br /&gt;
Polynomiální - složitost O(nc) kde c je konstanta. Polynomiální algoritmy jsou použitelné. Ideální jsou algoritmy rychlejší (lineární, logaritmické,...), ne vždy j však možné takový algoritmus vymyslet&lt;br /&gt;
&lt;br /&gt;
Exponenciální - složitost O(cn). Tyto algoritmy nejsou příliš dobré, a je vhodné se zamyslet a pokusit se vymyslet jiný, polynomiálně složitý algoritmus. Zpravidla algoritmy hrubé síly jsou této složitosti, jelikož procházejí všechny kombinace vstupu a hledají řešení. Pro malé n jsou však použitelné díky menší režii a přípravě, paměťovým nárokům atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Postupy výše lze aplikovat i na složitosti paměťové, šířky pásma, ...&lt;/div&gt;</summary>
		<author><name>81.201.60.162</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>2011-08-24T05:07:06Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &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;
== 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;
# [[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 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. 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;
{{fav-kiv}}&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Komprese_dat,_rozd%C4%9Blen%C3%AD_kompresn%C3%ADch_metod,_princip_kompresn%C3%ADch_metod_(Huffmann,_aritmetick%C3%A9_k%C3%B3dov%C3%A1n%C3%AD,_LZW,_JPG,_frakt%C3%A1lov%C3%A1_komprese)</id>
		<title>Komprese dat, rozdělení kompresních metod, princip kompresních metod (Huffmann, aritmetické kódování, LZW, JPG, fraktálová komprese)</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Komprese_dat,_rozd%C4%9Blen%C3%AD_kompresn%C3%ADch_metod,_princip_kompresn%C3%ADch_metod_(Huffmann,_aritmetick%C3%A9_k%C3%B3dov%C3%A1n%C3%AD,_LZW,_JPG,_frakt%C3%A1lov%C3%A1_komprese)"/>
				<updated>2011-08-23T21:45:44Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: /* Aritmetické kódování */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Algoritmy pro kompresi dat používáme pro snížení velikosti přenášených dat&lt;br /&gt;
* z paměťových důvodů&lt;br /&gt;
* ušetření šířky pásma&lt;br /&gt;
* urychlení přenosu a zkrácení doby odezvy&lt;br /&gt;
* archivace dat, zálohy&lt;br /&gt;
* obrana proti virům&lt;br /&gt;
* distribuce software&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
'''Kvalita komprese''' - úrověň zmenšení, poměr komprese = před/po. Symetrické metody potřebují stejný čas ke komprimaci jako k dekomprimaci&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozdělení kompresních metod ==&lt;br /&gt;
&lt;br /&gt;
* '''Bezztrátová''' - po komprimaci a dekomprimaci je výsledek k nerozeznání od originálu, 100% shoda. Metody jsou méně efektivní. Použijeme na text, obecné soubory&lt;br /&gt;
* '''Ztrátová''' - po komprimaci a dekomprimaci je výsledek rozdílný, cílem je však aby byl co nejvíce podobný. Více efektivní. Použijeme na zvuk, obraz, video.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Metody komprese ==&lt;br /&gt;
&lt;br /&gt;
* '''Jednoduché''' - založené na kódování opakujících se posloupností znaků (Run-Length Encoding - RLE)&lt;br /&gt;
* '''Statistické''' - založené na četnosti výskytu znaků v komprimovaném souboru (Huffmanovo kódování, Aritmetické kódování)&lt;br /&gt;
* '''Slovníkové''' - založené na kodování všech vyskytujících se posloupností (Lempel-Ziv-Welch - LZW)&lt;br /&gt;
* '''Transformační''' - založené na ortogonálních popř. jiných transformacích (JPEG, waveletová komprese, fraktálová komprese)&lt;br /&gt;
&lt;br /&gt;
== RLE ==&lt;br /&gt;
&lt;br /&gt;
RLE (Run Length Encoding) – kódování délkou běhu&lt;br /&gt;
&lt;br /&gt;
Nejjednodušší komprimační algoritmus, nahrazuje opakující se znaky jedním znakem a číslem vyjadřujícím počet okpakování (AAAAABBBBBCCD -&amp;gt; 5A5B2C1D)&lt;br /&gt;
Pro text k ničemu, pro obraz celkem dobrá komprese (zvláště obrazy používající malou paletu barev)&lt;br /&gt;
Problém: pokud se znak neopakuje, dochází k expanzi (ABC -&amp;gt; 1A1B1C) - Řešení pomocí escape sekvencí (označíme si, co je délka a co ne) a poté komprimujeme pouze opakující se znaky. Escape znak nesmí být obsažen v původním textu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Komprese-rle.png|frame|center|Ukázka komprese bitového souboru pomocí RLE. Ukládáme vždy počet nul a jedniček v řadě.]]&lt;br /&gt;
&lt;br /&gt;
== Huffmanovo kódování ==&lt;br /&gt;
&lt;br /&gt;
Statistická metoda. Vyhledáme četnosti všech znaků v řetězci a tyto znaky podle četnosti zakódujeme tak, aby nejkratší kód odpovídal nejčastějšímu znaku. Kódy jsou binární, nejčastější znak bude tedy reprezentován 1 bitem na rozdíl od 8(16) bitů potřebných pro uložení ASCII(UTF) znaku. Jená se o prefixový kód, takže žádný znak není prefixem jiného znaku -&amp;gt; kódy pro jednotlivé znaky mají různou délku a není potřeba označovat jejich konec (každý znak kreprezentuje jeden list stromu).&lt;br /&gt;
&lt;br /&gt;
Kódy vytvoříme Huffmannovým stromem:&lt;br /&gt;
&lt;br /&gt;
* Jednotlivé znaky označíme jako listy stromu&lt;br /&gt;
* Tyto listy uložíme do seznamu S (S obsahuje uzly stromu, na začátku tedy pouze listy)&lt;br /&gt;
* Seznam S seřadíme podle četnosti&lt;br /&gt;
* Vybereme z S dva prvky M,N s nejnižšími četnostmi m, n, m &amp;lt; n&lt;br /&gt;
* Vytvoříme uzel p, kde vlevo je M a vpravo je N, a jeho četnost bude m+n&lt;br /&gt;
* Vložíme p do S a zpět na bod 3 dokud v S není jen jeden uzel&lt;br /&gt;
&lt;br /&gt;
Strom samozřejmě musíme přenášet spolu s komprimovanými daty. Strom můžeme reprezentovat řetězcem tak, že jej projdeme DFS algoritmem a pro haždý vrchol uložíme 0 a pro každý list 1 a znak tohoto listu. Při načítání čteme nuly a vytváříme uzly (směrem doleva). Pokud narazíme na 1, zapíšeme písmeno a vrátíme se do nejbližšího pravého uzlu (pravý uzel rodiče, případně nejvíce levý prvek podstromu - u rodiče vpravo)&lt;br /&gt;
&lt;br /&gt;
Při dekompresi procházíme strom a rekonstruujeme zprávu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Huffman.png]]&lt;br /&gt;
&lt;br /&gt;
== Aritmetické kódování ==&lt;br /&gt;
&lt;br /&gt;
Také statistická metoda. &lt;br /&gt;
Aritmetické kódování na rozdíl od jiných metod nepracuje na principu nahrazování vstupního znaku specifickým kódem. Místo toho se kódovaný vstupní proud znaků nahradí jediným reálným číslem z intervalu &amp;lt;0,1).&lt;br /&gt;
&lt;br /&gt;
Na základě pravděpodobnosti výskytu jednotlivých symbolů vstupní abecedy je každému symbolu přiřazena odpovídající poměrná část intervalu &amp;lt;0,1). Při kódování je pak celý interval &amp;lt;0,1) postupně omezován z obou stran na základě postupně přicházejících symbolů (Interval ořízneme jen na tu část, které odpovídá pravděpodovnost písmene v textu, a tento interval opět rozdělíme podle pravděpodobností pro další písmeno). &lt;br /&gt;
&lt;br /&gt;
Kódovaná hodnota se reprezentuje libovolným reálným číslem, které leží ve výsledném intervalu získaném po přečtení všech vstupních symbolů. Vzhledem k tomu, že z takto reprezentované hodnoty nelze při dekódování určit konec zprávy, je třeba navíc ke zprávě přidat zpeciální znak označující konec, případně musí být uložena i délka původní posloupnosti. &lt;br /&gt;
&lt;br /&gt;
Příklad: kódujeme zprávu 'abaabcda'&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Aritmeticke-kodovani.jpg]] &lt;br /&gt;
&lt;br /&gt;
Co z toho číst?&lt;br /&gt;
* První řádka ukazuje pravděpodovnosti písmen (ty vypočteme jako četnost písmene / písmen celkem)&lt;br /&gt;
* Dále vidíme, jak bude interval (a podintervaly) rozdělený. 'a' jako nejpravděpodobnější písmeno dostane největší část intervalu atd...&lt;br /&gt;
* A dále už kódujeme. Jdeme zleva do prava. Přijde písmeno 'a', vybereme tedy spodní interval. Tento opět rozdělíme na stené části jako interval původní a přijde 'b'. Opět vybereme odpovídající interval, který rozdělíme atd.&lt;br /&gt;
* Zvýrazněná část intervalu se na obrázku vždy zazoomuje ;) (jsou tam šipky).&lt;br /&gt;
* Na konci máme jen jeden interval, vybereme tedy číslo , které do něj patří. Zpráva je zakódována v desetinné části tohoto čísla (a ano, celá zpráva je reprezentována jedním číslem)&lt;br /&gt;
&lt;br /&gt;
== LZW ==&lt;br /&gt;
&lt;br /&gt;
Z přednášek, doplněno:&lt;br /&gt;
Slovníkový algoritmus. Využívá skupin znaků označených kódy a přenos kódů, které mají menší velikost než původní skupiny.&lt;br /&gt;
Princip:&lt;br /&gt;
Jednoprůchodová metoda (nevyžaduje předběžnou analýzu souboru. Ve výsledku se jen posunujeme po souboru jedním ukazatelem.)&lt;br /&gt;
Vyhledávání opakujících se posloupností znaků, ukládání těchto posloupností do slovníku pro další použití a přiřazení jednoznakového kódu těmto posloupnostem.&lt;br /&gt;
Kódy musí mít délku (počet bitů) větší než délka původních znaků (např. pro ASCII znaky (8 bitů) se obvykle používá délka kódu 12 bitů popř. větší. Na osmi bitech kódu by se dal uložit pouze slovník o 256 slovech(posloupnostech znaků), což odpovídá pouze počtu písmen, což je k ničemu.)&lt;br /&gt;
Při průchodu komprimovaným souborem se vytváří slovník (počet položek slovníku odpovídá hodnotě 2(počet bitů kódu), kde prvních 2(počet bitů původních znaků) položek jsou  znaky původní abecedy a zbývající položky tvoří posloupnosti znaků obsažené v komprimovaném souboru (používáme tedy i kódy z již komprimovaného souboru k vytvýření nových kódů).&lt;br /&gt;
Při dekompresi procházíme kódy, a podle tabulky je rozebíráme na menší a menší, až se dostaneme na elementární znaky, které vypíšeme.&lt;br /&gt;
&lt;br /&gt;
Aby to celé fungovalo, musíme slovník na dekomprimační straně &amp;quot;naučit&amp;quot; slova od menších po větší. Musíme proto na začátku souboru definovat elementární znaky, a z nich poté skládat slovník. Pro ASCII tedy prvních 256 znaků tabulky může odpovídat 1:1 ASCII abecedě, až poté následuje slovník. Pokud při dekompresi narazíme na neznámý kód, víme, že je složen z předchozích 2 kódů. Proto se jej naučíme, a příště už víme, co zapsat (případně jak jej rozložit). Tabulka na obou stranách tedy je stavěna stejně, jen používána z jiné strany (při komprimaci ukládáme kódy, pri dekomprimaci jejich znaky)&lt;br /&gt;
&lt;br /&gt;
Pro obrázky viz přednášky z PT, jsou celkem snadno pochopitlené, i když místo &amp;quot;kód&amp;quot; občas autor používá &amp;quot;znak&amp;quot; či &amp;quot;nový znak&amp;quot;, což je trochu matoucí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== JPG ==&lt;br /&gt;
&lt;br /&gt;
V současné době patří mezi nejvíce používané komprese u obrázků&lt;br /&gt;
Je vhodná pro komprimaci fotek, nevhodná pro např. technické výkresy (čarové výkresy) - dochází k viditelnému rozmazání (na webové aplikace pomalu převlédá png (zejména kvůli neztrátovosti a průhlednosti))&lt;br /&gt;
&lt;br /&gt;
Princip:&lt;br /&gt;
části obrazu se transformují do frekvenční oblasti (výsledkem je matice „frekvenčních“ koeficientů, bezztrátový převod)&lt;br /&gt;
z matice koeficientů se odstraní koeficienty odpovídající vyšším frekvencím ( rychlejší změny jasu - např. hrany v obraze, zde jsou ztáty)&lt;br /&gt;
zbývající koeficienty se vhodným způsobem zkomprimují (huffman, aritmeticky)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[Soubor:Jpg-1.jpg]]&lt;br /&gt;
[[Soubor:Jpg-2.jpg]]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fraktálová komprese ==&lt;br /&gt;
&lt;br /&gt;
Fraktál je obraz, který je matematicky popsatelný a tím jej lze libovolně přibližovat a oddalovat bez stráty informace. Také lze fraktál popsat jako soubor matematicky popsaných sebepodobných částí, jejichž spojováním dostáváme také sebepodobný obraz ve větším detailu (jako když děláme koláž z fotek, které dohromady a z dálky vypadají jako fotka)&lt;br /&gt;
&lt;br /&gt;
Toho lze využít pro kompresi. Pokud se podíváme na libovolný obrázek, často zjistíme, že některé jeho části jsou si podobné&lt;br /&gt;
 &lt;br /&gt;
[[Soubor:Fraktalova-komprese.jpg]]&lt;br /&gt;
&lt;br /&gt;
Tyto malé kousky (frakce) lze pomocí rotace, změny velikosti a posunu otočit tak, že si budou velmi podobné (nebo dokonce budou stejné). V obrazu tedy můžeme na takový kousek mít pouze jednu, a v ostatních výskytech pouze uložit tyto operace.&lt;br /&gt;
&lt;br /&gt;
V praxi obrázek rozřežeme na shluky 2x2 pixely (range bloky), a pak hledáme, kde jinde v obrazu je můžeme najít (domain bloky). Domain bloky se mohou překrývat, range bloky se nepřekrývají. Postupujeme tak, že Domain blok vytvoříme jako dvojnásobek range bloku, a v obrazu postupujeme zleva do prava. V bloku uděláme průměr hodnot pixelů pod ním tak, abychom získali blok velikosti range bloku, a poté hledáme, kterému range bloku je takto zmenšený domain blok podobný. Uložíme si operace, které s domainblokem musíme udělat, aby byl range bloku podobný (rotace, překlopení, posun...) Pokud je domainblok složen z domainbloků, postupujeme rekurzivně. Tím, pomocí podobnosti, získáme komprimovaný obraz.&lt;/div&gt;</summary>
		<author><name>81.201.60.162</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>2011-08-09T17:28:43Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &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;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Grafy_a_jejich_implementace</id>
		<title>Grafy a jejich implementace</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Grafy_a_jejich_implementace"/>
				<updated>2011-08-08T16:09:58Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Graf je reprezentován množinou vrcholů (uzlů) V, které mohou být spojeny určitým počtem hran H. Graf je poté definován jako G(V,H)&lt;br /&gt;
&lt;br /&gt;
* '''Neorientovaný graf''': Hrany grafu nejsou orientované, tedy pokud vede hrana z uzli 1 do uzlu 5, vede i z uzlu 5 do uzlu 1 a platí tedy (u1, u2) = (u2, u1)&lt;br /&gt;
* '''Orientovaný graf''': Hrany grafu jsou orientované (jednosměrné), tedy pokud vede hrana z uzli 1 do uzlu 5, nevede z uzlu 5 do uzlu 1 a platí tedy (u1, u2) != (u2, u1)&lt;br /&gt;
* '''Ohodnocený graf''': Vednotlivé vrcholy či hrany mohou být ohodnoceny, graf tedy poté lze převést na množinu reálných čísel G(V, H) -&amp;gt; R&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace grafu pomocí spojového seznamu (seznam sousednosti) ==&lt;br /&gt;
&lt;br /&gt;
Máme seznam vrcholů a pro každý z nich máme seznam vrcholů, se kterými sousedí. Lze tak implementovat všechny 3 typy grafů (v obousměrných budou sousednosti v seznamech obou vrcholů sdílejících hranu, ohodnocení vrcholů je uloženo v seznamu vrcholů, ohodnocení hran je v seznamu sousednosti)&lt;br /&gt;
&lt;br /&gt;
Problém metody je v složitosti hledání existence hrany, jelikož musíme procházet seznamy sousednost (Pro velké grafy pomalé, na druhou stranu pro řídké grafy méně pamětově náročné)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace grafu pomocí matice sousednosti ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Stejný graf jako v předchozím případě&lt;br /&gt;
&lt;br /&gt;
Vytvoříme matici v*v prvků, kde v je počet vrcholů a hrany reprezentujeme jedničkami, zbytek matice jsou nuly.&lt;br /&gt;
&lt;br /&gt;
Vidíme, že neorientovaný graf produkuje symetrickou matici, je tedy možné horní polovinu zanedbat a ušetřit tak paměť. Věškeré operace jsou O(1) (pokud použijeme 2rozměrné pole), paměťově je však tato implementace náročnější, jelikož alokujeme paměť i pro místa, kde hrany nejsou. Tato metoda je tedy vhodná pro časté vyhledávání ve větších grafech.&lt;br /&gt;
&lt;br /&gt;
Ohodnocení lze provést uložením hodnoty místo jedniček, na diagonále lze ohodnotit vrcholy.&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program</id>
		<title>Problém, algoritmus, program</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program"/>
				<updated>2011-08-03T19:32:48Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: /* Algoritmus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problém ==&lt;br /&gt;
&lt;br /&gt;
'''Problém:''' Otázka či stav, pro jejíž zodpovězení hledáme řešení, případně existenci řešení. Takovýto stav je nežádoucí a je tedy na nás jej změnit (problém vyřešit)&lt;br /&gt;
&lt;br /&gt;
'''Postup:''' Zjistíme, že problém nastal (nelze situaci zvládnout známými postupy), zadefinujeme problém (vstupy a výstupy), nalezneme způsob žešení, zjistíme, zda je způsob řešení efektivní a případně optimalizujeme způsob žešení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dělění problémů ==&lt;br /&gt;
&lt;br /&gt;
Rozhodovací problémy lze dělit do tříd složitosti&lt;br /&gt;
* P (polynomiální) - problém je řešitelný pomocí (deterministického) [http://cs.wikipedia.org/wiki/Turing%C5%AFv_stroj Turingova stroje]  v polynomiálním čase (např problém řazení), lze dokázat, že všechny problémy P jsou podmnožinou problémů skupiny NP (NP problém s jednou větví, NP problém bez hádání či nápovědy)&lt;br /&gt;
* NP (nedeterministicky polynomiální)  - Polynomiální čas, ale nedeterministický Turingův stroj (takový, který může rozvětvit program v libovolném kroku na více větví, ve kterých hledá řešení současně (zcela paralelně), případně lze mluvit o stroji, který &amp;quot;uhodne&amp;quot; kterou větví se vydat, případně mu něco &amp;quot;napoví&amp;quot; kudy se má vydat, aby řešení bylo správné. Také lze mluvit o problémech, jejichž řešení lze ověřit  v polynomiálním čase (zpětný postup, zjištění, zda je nalezené řešení opdpovídající problému), níkoliv jej získat  - pokud bychom všechny větve umístili řekněme do zásobníku (zásobníkový Touringův stroj), čas pro nalezení řešení by nutně nebyl polynomiální. Je otázkou, zda lze pro NP problémy najít P řešení.&lt;br /&gt;
* NP-těžké - Problémy, na které lze v polynomiálním čase převést všechny problémy NP, nemusí však nutně v NP samy o sobě být (nemusí být ani rozhodovací)&lt;br /&gt;
* NP-úplné - NP-těžké problémy, které jsou ve třídě NP, jde tedy o nejtěžší NP úlohy&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Pro zasmání: http://www.abclinuxu.cz/clanky/komiks-xkcd-287-np-uplnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Algoritmus ==&lt;br /&gt;
&lt;br /&gt;
'''Algoritmus:''' Obecný postup pro nalezení řešení, ověřený že funguje. Jde o konečnou sekvenci známých operací (některé definice říkají, že tyto operace musí být elementýrní) které vedou k vyřešení problému.&lt;br /&gt;
&lt;br /&gt;
* Každý bod algoritmu musí být jednoznačně určen a musí být proveditelný (pochopitelný strojem)&lt;br /&gt;
* Algoritmus musí mít konečný počet kroků, tedy musí skončit po konečném počtu operací (x Výpočetní metoda)&lt;br /&gt;
* Algoritmus má 0 - N vstupů&lt;br /&gt;
* Algoritmus má 1 - N výstupů&lt;br /&gt;
&lt;br /&gt;
== Výpočetní metoda ==&lt;br /&gt;
&lt;br /&gt;
'''Výpočetní metoda:''' &amp;quot;Algoritmus&amp;quot;, který není konečný (event-driven systémy jako třeba automat na kávu, snímače JIS karet, digitální hodinky...)&lt;br /&gt;
&lt;br /&gt;
'''Program:''' Výpočetní metoda (interaktivní aplikace) či algoritmus (dávkové aplikace) zapsaný v souladu s pravidly programovacího jazyka tak, aby bylo možné algoritmus přenést a použít na počítači či jiném stroji. Programovací jazyk je nástroj programátora pro snazší programování, převede se na strojový jazyk, kterému počítač rozumí. Součástí programu může být i popis použitých datových struktur, se kterými algoritmus či výpočetní metoda pracuje.&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program</id>
		<title>Problém, algoritmus, program</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program"/>
				<updated>2011-08-03T19:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problém ==&lt;br /&gt;
&lt;br /&gt;
'''Problém:''' Otázka či stav, pro jejíž zodpovězení hledáme řešení, případně existenci řešení. Takovýto stav je nežádoucí a je tedy na nás jej změnit (problém vyřešit)&lt;br /&gt;
&lt;br /&gt;
'''Postup:''' Zjistíme, že problém nastal (nelze situaci zvládnout známými postupy), zadefinujeme problém (vstupy a výstupy), nalezneme způsob žešení, zjistíme, zda je způsob řešení efektivní a případně optimalizujeme způsob žešení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dělění problémů ==&lt;br /&gt;
&lt;br /&gt;
Rozhodovací problémy lze dělit do tříd složitosti&lt;br /&gt;
* P (polynomiální) - problém je řešitelný pomocí (deterministického) [http://cs.wikipedia.org/wiki/Turing%C5%AFv_stroj Turingova stroje]  v polynomiálním čase (např problém řazení), lze dokázat, že všechny problémy P jsou podmnožinou problémů skupiny NP (NP problém s jednou větví, NP problém bez hádání či nápovědy)&lt;br /&gt;
* NP (nedeterministicky polynomiální)  - Polynomiální čas, ale nedeterministický Turingův stroj (takový, který může rozvětvit program v libovolném kroku na více větví, ve kterých hledá řešení současně (zcela paralelně), případně lze mluvit o stroji, který &amp;quot;uhodne&amp;quot; kterou větví se vydat, případně mu něco &amp;quot;napoví&amp;quot; kudy se má vydat, aby řešení bylo správné. Také lze mluvit o problémech, jejichž řešení lze ověřit  v polynomiálním čase (zpětný postup, zjištění, zda je nalezené řešení opdpovídající problému), níkoliv jej získat  - pokud bychom všechny větve umístili řekněme do zásobníku (zásobníkový Touringův stroj), čas pro nalezení řešení by nutně nebyl polynomiální. Je otázkou, zda lze pro NP problémy najít P řešení.&lt;br /&gt;
* NP-těžké - Problémy, na které lze v polynomiálním čase převést všechny problémy NP, nemusí však nutně v NP samy o sobě být (nemusí být ani rozhodovací)&lt;br /&gt;
* NP-úplné - NP-těžké problémy, které jsou ve třídě NP, jde tedy o nejtěžší NP úlohy&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Pro zasmání: http://www.abclinuxu.cz/clanky/komiks-xkcd-287-np-uplnost&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Algoritmus ==&lt;br /&gt;
&lt;br /&gt;
'''Algoritmus:''' Obecný postup pro nalezení řešení, ověřený že funguje. Jde o konečnou sekvenci známých operací (některé definice říkají, že tyto operace musí být elementýrní) které vedou k vyřešení problému.&lt;br /&gt;
&lt;br /&gt;
Každý bod algoritmu musí být jednoznačně určen a musí být proveditelný (pochopitelný strojem)&lt;br /&gt;
Algoritmus musí mít konečný počet kroků, tedy musí skončit po konečném počtu operací (x Výpočetní metoda)&lt;br /&gt;
Algoritmus má 0 - N vstupů&lt;br /&gt;
Algoritmus má 1 - N výstupů&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výpočetní metoda ==&lt;br /&gt;
&lt;br /&gt;
'''Výpočetní metoda:''' &amp;quot;Algoritmus&amp;quot;, který není konečný (event-driven systémy jako třeba automat na kávu, snímače JIS karet, digitální hodinky...)&lt;br /&gt;
&lt;br /&gt;
'''Program:''' Výpočetní metoda (interaktivní aplikace) či algoritmus (dávkové aplikace) zapsaný v souladu s pravidly programovacího jazyka tak, aby bylo možné algoritmus přenést a použít na počítači či jiném stroji. Programovací jazyk je nástroj programátora pro snazší programování, převede se na strojový jazyk, kterému počítač rozumí. Součástí programu může být i popis použitých datových struktur, se kterými algoritmus či výpočetní metoda pracuje.&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program</id>
		<title>Problém, algoritmus, program</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Probl%C3%A9m,_algoritmus,_program"/>
				<updated>2011-08-03T19:21:09Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Problém:''' Otázka či stav, pro jejíž zodpovězení hledáme řešení, případně existenci řešení. Takovýto stav je nežádoucí a je tedy na nás jej změnit (problém vyřešit)&lt;br /&gt;
&lt;br /&gt;
'''Postup:''' Zjistíme, že problém nastal (nelze situaci zvládnout známými postupy), zadefinujeme problém (vstupy a výstupy), nalezneme způsob žešení, zjistíme, zda je způsob řešení efektivní a případně optimalizujeme způsob žešení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dělění problémů ==&lt;br /&gt;
&lt;br /&gt;
Rozhodovací problémy lze dělit do tříd složitosti&lt;br /&gt;
* P (polynomiální) - problém je řešitelný pomocí (deterministického) [http://cs.wikipedia.org/wiki/Turing%C5%AFv_stroj Turingova stroje]  v polynomiálním čase (např problém řazení), lze dokázat, že všechny problémy P jsou podmnožinou problémů skupiny NP (NP problém s jednou větví, NP problém bez hádání či nápovědy)&lt;br /&gt;
* NP (nedeterministicky polynomiální)  - Polynomiální čas, ale nedeterministický Turingův stroj (takový, který může rozvětvit program v libovolném kroku na více větví, ve kterých hledá řešení současně (zcela paralelně), případně lze mluvit o stroji, který &amp;quot;uhodne&amp;quot; kterou větví se vydat, případně mu něco &amp;quot;napoví&amp;quot; kudy se má vydat, aby řešení bylo správné. Také lze mluvit o problémech, jejichž řešení lze ověřit  v polynomiálním čase (zpětný postup, zjištění, zda je nalezené řešení opdpovídající problému), níkoliv jej získat  - pokud bychom všechny větve umístili řekněme do zásobníku (zásobníkový Touringův stroj), čas pro nalezení řešení by nutně nebyl polynomiální. Je otázkou, zda lze pro NP problémy najít P řešení.&lt;br /&gt;
* NP-těžké - Problémy, na které lze v polynomiálním čase převést všechny problémy NP, nemusí však nutně v NP samy o sobě být (nemusí být ani rozhodovací)&lt;br /&gt;
* NP-úplné - NP-těžké problémy, které jsou ve třídě NP, jde tedy o nejtěžší NP úlohy&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;http://www.abclinuxu.cz/clanky/komiks-xkcd-287-np-uplnost&amp;gt; :D&lt;br /&gt;
&lt;br /&gt;
Algoritmus: Obecný postup pro nalezení řešení, ověřený že funguje. Jde o konečnou sekvenci známých operací (některé definice říkají, že tyto operace musí být elementýrní) které vedou k vyřešení problému.&lt;br /&gt;
&lt;br /&gt;
Každý bod algoritmu musí být jednoznačně určen a musí být proveditelný (pochopitelný strojem)&lt;br /&gt;
Algoritmus musí mít konečný počet kroků, tedy musí skončit po konečném počtu operací (x Výpočetní metoda)&lt;br /&gt;
Algoritmus má 0 - N vstupů&lt;br /&gt;
Algoritmus má 1 - N výstupů&lt;br /&gt;
&lt;br /&gt;
Výpočetní metoda: &amp;quot;Algoritmus&amp;quot;, který není konečný (event-driven systémy jako třeba automat na kávu, snímače JIS karet, digitální hodinky...)&lt;br /&gt;
&lt;br /&gt;
Program: Výpočetní metoda (interaktivní aplikace) či algoritmus (dávkové aplikace) zapsaný v souladu s pravidly programovacího jazyka tak, aby bylo možné algoritmus přenést a použít na počítači či jiném stroji. Programovací jazyk je nástroj programátora pro snazší programování, převede se na strojový jazyk, kterému počítač rozumí. Součástí programu může být i popis použitých datových struktur, se kterými algoritmus či výpočetní metoda pracuje.&lt;/div&gt;</summary>
		<author><name>81.201.60.162</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>2011-08-03T15:12:22Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: /* PT */&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;
== 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;
# [[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 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. 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;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Hlavn%C3%AD_strana</id>
		<title>Hlavní strana</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Hlavn%C3%AD_strana"/>
				<updated>2011-07-31T20:07:07Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki pro všechny studenty FAV&lt;br /&gt;
&lt;br /&gt;
== Jednotlivé předměty roztříděné podle fakult ==&lt;br /&gt;
&lt;br /&gt;
[[KFY]]&lt;br /&gt;
&lt;br /&gt;
[[KIV]]&lt;br /&gt;
&lt;br /&gt;
[[KMA]]&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Hlavn%C3%AD_strana</id>
		<title>Hlavní strana</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Hlavn%C3%AD_strana"/>
				<updated>2011-07-31T20:06:31Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki pro všechny studenty FAV&lt;br /&gt;
ff&lt;br /&gt;
test&lt;br /&gt;
== Jednotlivé předměty roztříděné podle fakult ==&lt;br /&gt;
&lt;br /&gt;
[[KFY]]&lt;br /&gt;
&lt;br /&gt;
[[KIV]]&lt;br /&gt;
&lt;br /&gt;
[[KMA]]&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	<entry>
		<id>https://www.512.cz/index.php?title=Hlavn%C3%AD_strana</id>
		<title>Hlavní strana</title>
		<link rel="alternate" type="text/html" href="https://www.512.cz/index.php?title=Hlavn%C3%AD_strana"/>
				<updated>2011-07-31T19:42:47Z</updated>
		
		<summary type="html">&lt;p&gt;81.201.60.162: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki pro všechny studenty FAV&lt;br /&gt;
&lt;br /&gt;
test&lt;br /&gt;
== Jednotlivé předměty roztříděné podle fakult ==&lt;br /&gt;
&lt;br /&gt;
[[KFY]]&lt;br /&gt;
&lt;br /&gt;
[[KIV]]&lt;br /&gt;
&lt;br /&gt;
[[KMA]]&lt;/div&gt;</summary>
		<author><name>81.201.60.162</name></author>	</entry>

	</feed>