67. ročník Matematické olympiády 2017/2018
|
|
- Libor Špringl
- před 6 lety
- Počet zobrazení:
Transkript
1 67. ročník Matematické olympiády 2017/2018 Řešení úloh ústředního kola kategorie P 1. soutěžní den P-III-1 Kapitánka hledá posádku Úlohu lze vyřešit tak, že vyzkoušíme všechny možnosti, jak může Kapitánka sestavit posádku. Pokaždé ověříme, zda je střední pirát v posádce dostatečně šikovný. Posádka musí být souvislým úsekem pirátů, stačí tedy zkoušet jenom souvislé úseky. Takových úseků je O(n 2 ). Pro každý úsek můžeme určit středního piráta tak, že piráty z úseku zkopírujeme do pomocného pole a to uspořádáme. Takové řešení má časovou složitost O(n 3 log n). Na konkrétních schopnostech nezáleží Všimněte si, že na konkrétních schopnostech pirátů příliš nezáleží. Zajímá nás jenom to, zda je daný pirát aspoň tak nadaný, jako Denis. Podmínku o středním pirátovi si zjevně můžeme přeformulovat následovně: Posádka je plavbyschopná, pokud alespoň polovinu jejích členů tvoří piráti aspoň tak dobří, jako Denis. Při vyhodnocování, zda je konkrétní posádka plavbyschopná, proto stačí spočítat v ní dostatečně dobré piráty. Tím zlepšíme výše uvedené řešení na časovou složitost O(n 3 ). Rychlejší řešení Výše uvedené pozorování dokážeme elegantně matematicky popsat. Představme si, že máme jen dvě schopnosti pirátů: všichni horší než Denis mají schopnost 1, všichni aspoň tak dobří jako Denis mají schopnost +1. Po této úpravě můžeme přeformulovat podmínku o plavbyschopné posádce: Posádka je plavbyschopná právě tehdy, když má nezáporný součet schopností. Označíme si upravené pole naplněné hodnotami 1 a +1 jako A. Postupně pro každé i nyní provedeme následující výpočet: Začneme od i-tého piráta. Do posádky postupně přidáváme další piráty (i + 1, i + 2,... ) a průběžně si počítáme součet jejich schopností. Vždy, když je po přidání piráta tento součet nezáporný, máme jednu možnou posádku. Všimněte si, že jsme pokaždé v konstantním čase určili, zda je uvažovaná posádka pro Kapitánku vyhovující. Dostáváme tak řešení s časovou složitostí O(n 2 ). Vzorové řešení Klíčovým nástrojem k získání optimálního řešení jsou prefixové součty. Nechť P [i] je součet prvních i prvků pole A. Hodnoty P [i] spočítáme v lineárním čase: P [0] = 0 a i : P [i + 1] = A[i] + P [i]. Pomocí prefixových součtů umíme v konstantním čase zjistit součet libovolného úseku pole A. Úsek obsahující piráty od indexu a do indexu b 1 včetně má součet P [b] P [a]. Chceme nalézt všechny neprázdné úseky s nezáporným součtem. Zajímá nás tedy, pro kolik dvojic a < b platí P [b] P [a]. Jinými slovy, pro každý prefixový 1
2 součet potřebujeme zjistit, kolik dřívějších prefixových součtů je menších nebo stejně velkých. Jedním možným efektivním řešením je použít intervalový strom, v němž si pro každou hodnotu h budeme pamatovat, kolikrát jsme ji už viděli v poli P. Takto dokážeme postupně pro každý index b v čase O(log n) zjistit, kolik dobrých úseků na něm končí, a následně také v čase O(log n) do stromu přidáme hodnotu právě zpracovaného prvku. Dostáváme tak řešení s celkovou časovou složitostí O(n log n). Existuje ovšem i lineární řešení. Prefixové součty budeme, stejně jako v předchozím řešení, postupně zpracovávat zleva doprava. V pomocné proměnné si budeme udržovat počet dříve zpracovaných prefixových součtů, které jsou menší nebo rovny tomu aktuálnímu. Zároveň budeme mít pomocné pole Q, přičemž v Q[s] si budeme pamatovat počet dosud nalezených prefixových součtů s hodnotou přesně s. Všimněte si, že v naší úloze se sousední prefixové součty (tj. sousední hodnoty v poli P ) liší vždy jen o +1 nebo 1. Když se chceme posunout na další index, umíme proto snadno spočítat počet dříve zpracovaných prefixových součtů, které jsou menší nebo stejné. Stačí zjistit, zda se prefixový součet právě změnil o +1 nebo 1, a podle toho buď přičíst, nebo odečíst příslušný prvek pomocného pole Q. Nakonec ještě musíme pole Q aktualizovat, tedy po spočítání nového prefixového součtu s zvýšit Q[s] o 1. Jelikož se nám prefixové součty mění jenom o 1, zřejmě leží všechny v intervalu n; n, a proto nám stačí pomocné pole velikosti O(n). Výpočet prefixových součtů i druhý průchod s výpočtem odpovědi mají také zjevně časovou složitost O(n). #include <bits/stdc++.h> using namespace std; int main() { int N, D; cin >> N >> D; vector<int> A(N), P(N+1,0); for (int n=0; n<n; ++n) { int a; cin >> a; A[n] = (a>=d? 1 : -1); P[n+1] = P[n] + A[n]; // videl[n+i] udává, kolik již zpracovaných prvků P mělo hodnotu přesně i vector<int> videl(2*n+1,0); // počet již zpracovaných prvků P, které byly <= aktuálnímu prvku int leq = 0; int odpoved = 0; for (int n=1; n<=n; ++n) { // přidáme prvek P[n-1] mezi již viděné prvky a mezi prvky <= než aktuální ++videl[ N+P[n-1] ]; ++leq; // posuneme aktuální prvek na P[n], čímž buď přibudou, // nebo ubydou dříve zpracované prvky <= než aktuální prvek if (P[n] == P[n-1] + 1) leq += videl[ N+P[n] ]; else 2
3 leq -= videl[ N+P[n-1] ]; odpoved += leq; cout << odpoved << endl; return 0; P-III-2 Závaží Základním řešením této úlohy je řešení hrubou silou: vygenerujeme součty všech 2 n podmnožin závaží, v čase Θ(2 n log(2 n )) = Θ(n2 n ) je uspořádáme a vybereme součet na indexu k. Drobným zlepšením je, že místo třídění můžeme k nalezení prvku na indexu k použít lineární algoritmus, který je zobecněním algoritmu na nalezení mediánu postupnosti. Pokud navíc šikovným způsobem generujeme všechny součty podmnožin, dostaneme algoritmus s časovou složitostí Θ(2 n ). Základní polynomiální řešení Pro velká n si už samozřejmě nemůžeme dovolit vygenerovat všech n podmnožin. Je třeba využít skutečnosti, že k je (v porovnání s hodnotou 2 n ) velmi malé. Budeme tedy chtít postupně generovat všechny podmnožiny uspořádané podle jejich součtu. Pomůže nám, když si celou situaci představíme jako orientovaný graf, jehož vrcholy představují jednotlivé množiny závaží přesněji množiny jejich indexů. Jedna možnost, jak může tento graf vypadat, je tato: Z každého vrcholu v = {a 1,..., a i vede pro každé j v hrana do vrcholu v {j. Například z vrcholu vede přesně n hran: do všech možných jednoprvkových množin. Z vrcholu {1 a z vrcholu {2 vede hrana do vrcholu {1, 2. Každé hraně přiřadíme jako její délku hmotnost závaží, které právě přidáváme do množiny. V takto postaveném grafu zjevně platí, že délka cesty z vrcholu do libovolného vrcholu v odpovídá celkové hmotnosti závaží, kterou daný vrchol v představuje. Když nyní chceme postupně generovat všechny množiny závaží uspořádané podle velikosti, stačí na tento graf použít obyčejný Dijkstrův algoritmus na hledání nejkratších cest. Pořadí, v němž budeme vrcholy označovat za zpracované, bude přesně odpovídat pořadí množin uspořádanému podle hmotnosti. Časová i paměťová složitost tohoto algoritmu je zjevně polynomiální vzhledem k n a k, přesně ji odhadnout ale není triviální a konkrétní odhad závisí na detailech zvolené implementace. Řádově platí, že postupně k vrcholů označíme za zpracované, a jelikož z každého z nich vede O(n) hran, dohromady přijdeme do O(nk) vrcholů. Protože každý z nich je nějaká O(n)-prvková množina, bude časová složitost jejich zpracování řádově úměrná O(n 2 k), plus se ještě možná někde objeví nějaký logaritmus navíc. Pozorování o velikosti množin Všimněte si, že všechny množiny, které se nacházejí na prvních k místech uspořádaného pořadí, musí nutně mít málo prvků. Proč? Nechť l = log 2 k. Uvažujme libovolnou (l + 1)-prvkovou množinu M. Tato množina má 2 l+1 1 > k vlastních 3
4 podmnožin a ty jsou všechny v uspořádaném pořadí před ní. Její pořadové číslo je proto určitě větší než k. Všechny množiny, které vygenerujeme, budou tudíž mít O(log k) prvků. Díky uvedenému pozorování dokážeme napsat implementaci výše popsaného řešení, která bude mít časovou složitost O(nk (log k) 2 ) nebo podobnou. (Přesná časová složitost opět závisí na detailech implementace.) Jiné polynomiální řešení Než se dostaneme ke vzorovému řešení, uděláme ještě odbočku a ukážeme si jedno jiné řešení o něco rychlejší a o dost jednodušší než to, které jsme právě popsali. Začneme tím, že zvolíme jeden možný postup, jak vygenerovat hmotnosti všech podmnožin: budeme postupně přidávat závaží. Když nemáme žádné závaží, jediná hmotnost, kterou dokážeme vygenerovat, je nula. Představme si nyní, že už jsme zpracovali nějaká závaží a máme uspořádaný seznam hmotností všech jejich podmnožin. Jak nyní přidáme další závaží m i? Už známe hmotnosti podmnožin, které toto závaží neobsahují. Hmotnosti podmnožin, které ho obsahují, spočítáme jednoduše tak, že ke každé hmotnosti v dosavadním seznamu přičteme m i. Tím dostaneme dva uspořádané seznamy, které nakonec spojíme do jednoho stejným způsobem, jako například při třídění MergeSort. Takové řešení by samozřejmě mělo časovou složitost exponenciální vzhledem k n. My ho ale snadno zlepšíme: po každém zpracovaném závaží si stačí zapamatovat k nejmenších hmotností, všechny ostatní jistě můžeme zahodit, neboť jsou příliš velké. Zpracování každého závaží tedy zvládneme v čase O(k). A protože závaží je n, dostáváme řešení s časovou složitostí O(nk). Vzorové řešení Vrátíme se teď k řešení, které množiny sestrojovalo postupným prohledáváním grafu. Hlavním problémem tohoto řešení je, že máme v grafu zbytečně mnoho hran. Například do vrcholu {3, 4, 7 vede osm různých cest. Jelikož ale všechny mají stejnou délku, nenesou žádnou užitečnou informaci. Stačila by nám jenom jedna cesta. Ideální by bylo, kdybychom místo našeho původního grafu vymysleli nějaký jiný, který bude mít dvě vlastnosti: Do každého vrcholu vede právě jedna cesta, takže žádná hrana není zbytečná. Pro každou hranu u v platí, že v je aspoň tak těžký jako u. Délky hran jsou tedy nezáporné. Na libovolném takovém grafu bude Dijkstrův algoritmus zjevně stále fungovat, neboť když jsme ještě nějaký vrchol v neprohlásili za zpracovaný, tak nás vrcholy, do nichž se jde přes v, zatím nezajímají. Jsou totiž aspoň tak těžké jako vrchol v, a proto také ještě nemají být zpracované. Jak vymyslet konstrukci takovéhoto grafu? Pomůže nám podívat se na problém z opačné strany. V hledaném grafu musí do každého vrcholu (kromě počátečního) 4
5 vést právě jedna hrana. Z opačné strany dostáváme, že z každého vrcholu musí existovat jednoznačná cesta do počátku. Můžeme tedy hledat nějaký snadný deterministický postup, jak libovolnou množinu závaží postupně převést na prázdnou. Jedna taková konstrukce vypadá takto: Primárně se snažíme o 1 snížit největší index v množině, např. z množiny {3, 4, 7 vyrobíme {3, 4, 6. Jestliže to nelze provést, tak největší index jednoduše vyhodíme např. z množiny {1, 6, 7 dostaneme {1, 6 a z množiny {1 dostaneme. Zde je konkrétní příklad, jak z nějaké množiny vznikne opakováním těchto pravidel prázdná množina: {1, 3, 6 {1, 3, 5 {1, 3, 4 {1, 3 {1, 2 {1. Je zjevné, že žádný krok tohoto postupu nezvýší hmotnost množiny buď jedno závaží nahradíme předcházejícím (které je nejvýše stejně těžké), nebo jedno závaží odstraníme. Jak tedy bude vypadat náš graf? Budou v něm tytéž hrany, jenom s opačnou orientací: Z vrcholu vede jediná hrana do vrcholu {1. Z vrcholu v = {a 1,..., a k, v němž a k = n, nevede žádná hrana. Jinak z něho vedou dvě hrany: do vrcholu, v němž do v přibude index a k + 1, a do vrcholu, v němž je ve v obsažen index a k + 1 místo indexu a k. Například jestliže n > 6, pak z vrcholu {1, 3, 6 vedou hrany do vrcholů {1, 3, 6, 7 a {1, 3, 7. Na tento graf použijeme Dijkstrův algoritmus a necháme ho běžet, dokud neprohlásí k vrcholů za zpracované. Jelikož z každého vrcholu vedou nejvýše dvě hrany, dohromady navštívíme a zpracujeme jenom O(k) vrcholů. Jako prioritní frontu můžeme použít obyčejnou haldu. Navíc prvky v ní stačí porovnávat podle vzdálenosti náš graf je stromem a proto nepotřebujeme nijak kontrolovat duplikáty. Protože víme, že každý navštívený vrchol představuje množinu obsahující nejvýše O(log k) čísel, pro každý navštívený vrchol nejpozději v čase O(log k) vygenerujeme jeho množinu a potom také v O(log k) přidáme jeho záznam do prioritní fronty. Celkově má tedy toto řešení časovou složitost O(k log k). Níže uvedená implementace je kvůli lepší čitelnosti trochu pomalejší, její časová složitost je O(k (log k) 2 ). Zlepšit na O(k log k) ji můžeme tím, že do prioritní fronty budeme ukládat jen ukazatele na jednotlivé vrcholy a dodefinujeme pro ně porovnávací funkci, která se bude dívat pouze na vzdálenost (nikoliv na jednotlivé prvky vektoru, v němž je uložen daný vrchol). 5
6 #include <bits/stdc++.h> using namespace std; typedef pair< int, vector<int> > zaznam; int main() { int N, K; cin >> N >> K; if (K == 1) { cout << 0 << endl; return 0; vector<long long> M(N); for (auto &m : M) cin >> m; priority_queue <zaznam, vector<zaznam>, greater<zaznam> > PQ; PQ.push( { M[0], {0 ); for (int k=2; k<=k; ++k) { int d = PQ.top().first; vector<int> v = PQ.top().second; PQ.pop(); if (k == K) cout << d << endl; int vs = v.size(), last = v[vs-1]; if (last == N-1) continue; ++v[vs-1]; PQ.push( { d+m[last+1]-m[last], v ); --v[vs-1]; v.push_back(last+1); PQ.push( { d+m[last+1], v ); P-III-3 Stavebnice funkcí Část A: minimum a maximum Maximum z čísel a a b můžeme definovat takto: jestliže a b, potom maximum je a, jinak je to b. Sestrojíme ho proto pomocí větvení tedy konstrukcí, kterou jsme vymysleli v poslední části soutěžní úlohy krajského kola. Nejsnadnější konstrukcí větvení je postup, v němž každou možnost výstupu vynásobíme predikátem, který říká, kdy chceme tento výstup. Maximum tedy můžeme zapsat následovně: max(a, b) = geq(a, b) a + not(geq(a, b)) b. Tuto konstrukci zrealizujeme pomocí Kompozitoru. Postupně sestrojíme: tmpg 1 K[geq, v 2 1, mul] tmpg 2 K[K[geq, not], v 2 2, mul] max = K[tmpg 1, tmp 2, add] Existují i jiné konstrukce, například pomocí Cyklovače. Při ní můžeme nejprve nastavit výstupní hodnotu na b a potom ji geq(a, b)-krát změnit na a. Minimum sestrojíme analogicky, stačí v konstrukci maxima vyměnit v 2 1 a v 2 2. Případně ještě jednodušší je použít vztah min(a, b) = a + b max(a, b). 6
7 Část B: poslední cifra Jednou z možností bylo sestrojit si obecnou funkci počítající celočíselné dělení, nebo unární funkci počítající celočíselné dělení deseti. Takovou funkci sestrojíme jako pomocnou funkci v řešení části D této úlohy. Nyní si ukážeme jinou konstrukci, která je myšlenkově méně náročná. Vytvoříme si pomocnou funkci, která se na číslech 0 8 chová stejně jako funkce s (successor, tj. následník), ale místo s(9) = 10 bude vracet nulu. (Je nám jedno, jak tato funkce odpoví na vstup větší než 9.) Uvedenou funkci sestrojíme pomocí větvení, tedy podobnou konstrukcí, jako v části A. Jedna možnost vypadá následovně: s 10 (n) = geq(8, n) s(n). Tato funkce vrátí nulu pro libovolný vstup větší než 8. Formálně tuto funkci sestrojíme takto: s 10 K[K[k 1 8, v 1 1, geq], s, mul]. Hledanou funkci last nyní vytvoříme pomocí Cyklovače. Stačí si uvědomit, že hodnotu last(n) můžeme spočítat tak, že na nulu postupně n-krát použijeme funkci s 10. Inicializaci provedeme obyčejnou funkcí z (konstantní nula bez vstupů), jednu iteraci cyklu nám vypočítá funkce, která na svůj druhý vstup (neboli na starou hodnotu tmp) použije funkci s 10. Formálně tedy last C[z, K[v 2 2, s 10 ]]. Část C: dolní celá část odmocniny V této části úlohy použijeme dvě pozorování. Prvním z nich je, že n je největší x takové, že n x 2. Druhým z nich je, že pro dolní celou část odmocniny platí n : n n. Jinými slovy, odmocninu z n můžeme nalézt tak, že projdeme všechna x od 0 do n a vybereme největší z nich, jehož kvadrát je ještě stále menší nebo roven n. To můžeme zapsat pseudokódem: def sqrt ( n ): tmp = 0 for i = 0 to n-1: if (i+1)*(i+1) <= n: tmp = i+1 return tmp Uvedený pseudokód nyní stačí přepsat do formální definice funkce pomocí Cyklovače. Začneme pomocnou funkcí sqrs, pro niž platí sqrs(n) = (n + 1) 2. Tuto funkci vyrobíme Kompozitorem: sqrs K[s, s, mul]. Podmínku (i + 1) 2 n teď zapíšeme následovně: podm K[v 2 2, K[v 2 1, sqrs], geq]. Jednu iteraci cyklu v našem pseudokódu spočítá funkce f, která splňuje vztah f(i, tmp) = podm(i, tmp) s(i) + not(podm(i, tmp)) tmp (Slovně: je-li splněna podmínka, vrátíme i + 1, jinak vrátíme starou hodnotu tmp.) Formálně tedy f K[ K[podm, K[v 2 1, s], mul], K[K[podm, not], v 2 2, mul], add]. Na závěr sqrt C[z, f] a jsme hotovi. 7
8 Část D: Fibonacciho čísla (hlavní myšlenka) Největším problémem při konstrukci Fibonacciho čísel je skutečnost, že na sestrojení následujícího čísla nám nestačí jedno, ale potřebujeme dvě předcházející. Na to náš Cyklovač, alespoň zdánlivě, není připraven při jeho použití musíme následující hodnotu vypočítat z jedné předcházející. Hlavní trik tedy bude spočívat v tom, že do té jedné hodnoty si budeme muset zakódovat obě Fibonacciho čísla. Existuje mnoho způsobů, jak zakódovat dvě přirozená čísla do jednoho samozřejmě tak, abychom je uměli také jednoznačně získat nazpět. Zájemce o toto téma odkážeme na článek function. V našem řešení použijeme následující pozorování: n : F n < 2 n. Platnost dokážeme matematickou indukcí: platí F 0 < 2 0 i F 1 < 2 1, jako indukční krok dostáváme, že n 2 : F n = F n 1 + F n 2 < 2 n n 2 < 2 2 n 1 = 2 n. Jestliže tedy známe číslo n a dostaneme číslo kod(n) = F n+1 2 n + F n, umíme z čísla kod(n) sestrojit čísla F n a F n+1 : číslo kod(n) stačí celočíselně vydělit číslem 2 n, hodnoty F n+1 a F n dostaneme jako podíl a zbytek po dělení. Máme-li hodnotu kod(n) a číslo n, dokážeme snadno spočítat hodnotu kod(n + 1): z hodnoty kod(n) zjistíme F n+1 a F n, z nich vypočítáme F n+2 a z hodnot F n+2 a F n+1 určíme výsledný kód. Funkci kod můžeme zapsat v pseudokódu: def kod ( n ): tmp = 1 # tedy tmp = F_1 * 2^0 + F_0 for i = 0 to n-1: a = tmp mod pow(2,n) b = tmp div pow(2,n) c = a+b tmp = c * pow(2,n+1) + b return tmp Takto definovaná funkce kod vrátí pro každé n hodnotu F n+1 2 n +F n. Samotné Fibonacciho číslo potom sestrojíme tak, že z příslušné hodnoty kod vytáhneme jenom to číslo, které nás zajímá: fib(n) = kod(n) mod 2 n. Část D: Fibonacciho čísla (pomocné konstrukce) Nejprve si sestrojíme několik pomocných funkcí. První z nich bude funkce div, která počítá celočíselné dělení. Přesněji, chceme, aby pra všechna y > 0 platilo div(x, y) = x/y. Postupujeme podobně jako u odmocniny: odpovědí je největší z, pro které platí x yz, a toto z najdeme pomocí Cyklovače (protože víme, že z x, víme také, kolik nejvýše iterací bude třeba). Funkci vid (div s prohozeným pořadím parametrů) zapíšeme v pseudokódu: def vid ( y, x ): tmp = 0 for i = 0 to y-1: if (i+1)*y <= x: tmp = i+1 return tmp 8
9 Přepis této konstrukce do formálního zápisu již přenecháme čtenáři. Funkci div poté sestrojíme z funkce vid tak, že pomocí Kompozitoru vyměníme pořadí vstupů. (Můžete si všimnout, že z naší konstrukce navíc plyne, že x : div(x, 0) = 0. Toto však v dalším řešení nikde nebudeme potřebovat.) Funkci mod (zbytek po celočíselném dělení) nyní sestrojíme snadno: platí mod(x, y) = x y div(x, y). Dále si vytvoříme pomocné funkce prvni a druhy, které pro dané x a n spočítají x div 2 n a x mod 2 n. Pro transformaci opačným směrem si pomocí Kompozitoru složíme funkci dvojice, která pro vstup (x, y, n) vrátí hodnotu x 2 n + y. Část D: Fibonacciho čísla (hlavní konstrukce) Funkci kod, jejíž pseudokód jsme uvedli výše, chceme sestrojit pomocí Cyklovače. Potřebujeme proto vytvořit funkci, která spočítá jednu iteraci cyklu: z hodnot n a tmp (přičemž víme, že tmp = F n+1 2 n + F n ) máme vypočítat novou hodnotu F n+2 2 n+1 + F n+1. Tuto funkci (nazveme ji krok) zapíšeme pomocí již sestrojených pomocných funkcí následovně: krok(n, tmp) = dvojice( prvni(tmp, n) + druhy(tmp, n), prvni(tmp, n), n + 1). Konstrukce funkce krok pomocí Kompozitoru je pracná, ale zjevná. Na závěr už jenom Cyklovačem sestrojíme funkci kod jako C[k 0 1, krok] a následně Kompozitorem vytvoříme funkci fib, která splňuje n : fib(n) = druhy(kod(n), n). 9
67. ročník Matematické olympiády 2017/2018
67. ročník Matematické olympiády 2017/2018 Úlohy ústředního kola kategorie P 1. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Řešení každé úlohy pište na samostatný list papíru. Při soutěži
67. ročník Matematické olympiády 2017/2018
67. ročník Matematické olympiády 2017/2018 Řešení úloh krajského kola kategorie P P-II-1 Trénink Úloha má více různých řešení hrubou silou. Na tři body stačilo samostatně vyzkoušet každý dostatečně dlouhý
Algoritmus pro hledání nejkratší cesty orientovaným grafem
1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval
67. ročník Matematické olympiády 2017/2018
67. ročník Matematické olympiády 2017/2018 Úlohy domácího kola kategorie P Úlohy P-I-1 a P-I-2 jsou praktické, vaším úkolem v nich je vytvořit a odladit efektivní program v jazyce Pascal, C nebo C++. Řešení
67. ročník Matematické olympiády 2017/2018
67. ročník Matematické olympiády 2017/2018 Řešení úloh domácího kola kategorie P P-I-1 Trojice Získat nějaké body v této úloze je snadné: stačí vygenerovat všechny trojice a uspořádat je podle součtu:
68. ročník Matematické olympiády 2018/2019
68. ročník Matematické olympiády 2018/2019 Řešení úloh krajského kola kategorie P P-II-1 Tulipány Budeme řešit o něco obecnější úlohu: dovolíme si předepsat, zda má na n-té pozici být tulipán, a pokud
Digitální učební materiál
Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
Dijkstrův algoritmus
Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované
V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,
[161014-1204 ] 11 2.1.35 Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i, kde i = 0, 1,..., takto: p 0 q právě tehdy, když bud p, q F nebo p, q F. Dokud i+1 i konstruujeme p
68. ročník Matematické olympiády 2018/2019
68. ročník Matematické olympiády 2018/2019 Řešení úloh ústředního kola kategorie P 2. soutěžní den P-III-4 Výlet Abychom našli požadovaný výlet délky 4, stačí najít dvě hvězdy a a b, které mají dva společné
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
67. ročník Matematické olympiády 2017/2018
67. ročník Matematické olympiády 2017/2018 Úlohy krajského kola kategorie P Krajské kolo 67. ročníku MO kategorie P se koná v úterý 23. 1. 2018 v dopoledních hodinách. Na řešení úloh máte 4 hodiny čistého
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
1 Řešení soustav lineárních rovnic
1 Řešení soustav lineárních rovnic 1.1 Lineární rovnice Lineární rovnicí o n neznámých x 1,x 2,..., x n s reálnými koeficienty rozumíme rovnici ve tvaru a 1 x 1 + a 2 x 2 +... + a n x n = b, (1) kde koeficienty
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento
Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
63. ročník Matematické olympiády 2013/2014
63. ročník Matematické olympiády 2013/2014 Úlohy ústředního kola kategorie P 2. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Při soutěži je zakázáno používat jakékoliv pomůcky kromě psacích
Parametrické programování
Parametrické programování Příklad 1 Parametrické pravé strany Firma vyrábí tři výrobky. K jejich výrobě potřebuje jednak surovinu a jednak stroje, na kterých dochází ke zpracování. Na první výrobek jsou
Vzdálenost uzlů v neorientovaném grafu
Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Každá úloha je hodnocena maximálně 25 body. Všechny své odpovědi zdůvodněte! 1. Postavte na stůl do řady vedle
5 Orientované grafy, Toky v sítích
Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost
Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
= je prostý orientovaný graf., formálně c ( u, v) 0. dva speciální uzly: zdrojový uzel s a cílový uzel t. Dále budeme bez
Síť Síť je čtveřice N = ( G, s, t, c) kde G ( V, A) = je prostý orientovaný graf a každé orientované hraně ( u, v) je přiřazeno nezáporné číslo, které se nazývá kapacita hrany ( u, v), formálně c ( u,
1 Soustavy lineárních rovnic
1 Soustavy lineárních rovnic 1.1 Základní pojmy Budeme uvažovat soustavu m lineárních rovnic o n neznámých s koeficienty z tělesa T (potom hovoříme o soustavě m lineárních rovnic o n neznámých nad tělesem
Základní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.
Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty. (A7B01MCS) I. Matematická indukce a rekurse. Indukční principy patří
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
REÁLNÁ FUNKCE JEDNÉ PROMĚNNÉ
REÁLNÁ FUNKCE JEDNÉ PROMĚNNÉ 5 přednáška S funkcemi se setkáváme na každém kroku ve všech přírodních vědách ale i v každodenním životě Každá situace kdy jsou nějaký jev nebo veličina jednoznačně určeny
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??
Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace
Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi
Obr. P1.1 Zadání úlohy v MS Excel
Přílohy Příloha 1 Řešení úlohy lineárního programování v MS Excel V této příloze si ukážeme, jak lze řešit úlohy lineárního programování pomocí tabulkového procesoru MS Excel. Výpočet budeme demonstrovat
Zavedení a vlastnosti reálných čísel
Zavedení a vlastnosti reálných čísel jsou základním kamenem matematické analýzy. Konstrukce reálných čísel sice není náplní matematické analýzy, ale množina reálných čísel R je pro matematickou analýzu
2. Složitost, grafové algoritmy (zapsal Martin Koutecký)
2. Složitost, grafové algoritmy (zapsal Martin Koutecký) Model Ram Při analýze algoritmu bychom chtěli nějak popsat jeho složitost. Abychom mohli udělat toto, potřebujeme nejprve definovat výpočetní model.
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,
(4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74,
1. V oboru celých čísel řešte soustavu rovnic (4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74, kde (n) k značí násobek čísla k nejbližší číslu n. (P. Černek) Řešení. Z první rovnice dané soustavy plyne, že číslo
Vrcholová barevnost grafu
Vrcholová barevnost grafu Definice: Necht G = (V, E) je obyčejný graf a k N. Zobrazení φ : V {1, 2,..., k} nazýváme k-vrcholovým obarvením grafu G. Pokud φ(u) φ(v) pro každou hranu {u, v} E, nazveme k-vrcholové
Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?
Kapitola 9 Matice a počet koster Graf (orientovaný i neorientovaný) lze popsat maticí, a to hned několika různými způsoby. Tématem této kapitoly jsou incidenční matice orientovaných grafů a souvislosti
12. Lineární programování
. Lineární programování. Lineární programování Úloha lineárního programování (lineární optimalizace) je jedním ze základních problémů teorie optimalizace. Našim cílem je nalézt maximum (resp. minimum)
Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague
1 / 23 Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague 2 / 23 biologové často potřebují najít často se opakující sekvence DNA tyto sekvence bývají relativně krátké,
Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.
1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste
Standardní algoritmy vyhledávací.
Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární
Jan Pavĺık. FSI VUT v Brně 14.5.2010
Princip výškovnice Jan Pavĺık FSI VUT v Brně 14.5.2010 Osnova přednášky 1 Motivace 2 Obecný princip 3 Příklady Světové rekordy Turnajové uspořádání Skupinové hodnocení Rozhledny 4 Geografická výškovnice
ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ
ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ Parametrické vyjádření přímky v rovině Máme přímku p v rovině určenou body A, B. Sestrojíme vektor u = B A. Pro bod B tím pádem platí: B = A + u. Je zřejmé,
PQ-stromy a rozpoznávání intervalových grafů v lineárním čase
-stromy a rozpoznávání intervalových grafů v lineárním čase ermutace s předepsanými intervaly Označme [n] množinu {1, 2,..., n}. Mějme permutaci π = π 1, π 2,..., π n množiny [n]. Řekneme, že množina S
NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší
Dynamické programování
ALG 11 Dynamické programování Úloha batohu neomezená Úloha batohu /1 Úloha batohu / Knapsack problem Máme N předmětů, každý s váhou Vi a cenou Ci (i = 1, 2,..., N) a batoh s kapacitou váhy K. Máme naložit
Minimalizace KA - Úvod
Minimalizace KA - Úvod Tyto dva KA A,A2 jsou jazykově ekvivalentní, tzn. že rozpoznávají tentýž jazyk. L(A) = L(A2) Názorně lze vidět, že automat A2 má menší počet stavů než A, tudíž našim cílem bude ukázat
TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
TOKY V SÍTÍCH II Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 010/011, Lekce 10 Evropský sociální fond Praha & EU: Investujeme do vaší
TGH06 - Hledání nejkratší cesty
TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 26. března 2013 Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa
DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3
DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),
1.3. Číselné množiny. Cíle. Průvodce studiem. Výklad
1.3. Cíle Cílem kapitoly je seznámení čtenáře s axiomy číselných oborů a jejich podmnožin (intervalů) a zavedení nových pojmů, které nejsou náplní středoškolských osnov. Průvodce studiem Vývoj matematiky
12. Aproximační algoritmy
12. Aproximační algoritmy (F.Haško,J.enda,.areš, ichal Kozák, Vojta Tůma) Na minulých přednáškách jsme se zabývali různými těžkými rozhodovacími problémy. Tato se zabývá postupy, jak se v praxi vypořádat
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky
fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu http://akademie.ldf.mendelu.cz/cz (reg. č. CZ.1.07/2.2.00/28.
Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C
Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat
Řešení 1b Máme najít body, v nichž má funkce (, ) vázané extrémy, případně vázané lokální extrémy s podmínkou (, )=0, je-li: (, )= +,
Příklad 1 Najděte body, v nichž má funkce (,) vázané extrémy, případně vázané lokální extrémy s podmínkou (,)=0, je-li: a) (,)= + 1, (,)=+ 1 lok.max.v 1 2,3 2 b) (,)=+, (,)= 1 +1 1 c) (,)=, (,)=+ 1 lok.max.v
Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,
Stromové rozklady Zdeněk Dvořák 25. října 2017 Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom, β je funkce přiřazující každému vrcholu T podmnožinu vrcholů v G, pro každé
6 Ordinální informace o kritériích
6 Ordinální informace o kritériích Ordinální informací o kritériích se rozumí jejich uspořádání podle důležitosti. Předpokládejme dále standardní značení jako v předchozích cvičeních. Existují tři základní
Prohledávání do šířky = algoritmus vlny
Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé
Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno
12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,
Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:
3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...
Úlohy krajského kola kategorie C
67. ročník matematické olympiády Úlohy krajského kola kategorie C 1. Najděte nejmenší přirozené číslo končící čtyřčíslím 2018, které je násobkem čísla 2017. 2. Pro celá čísla x, y, z platí x 2 + y z =
p 2 q , tj. 2q 2 = p 2. Tedy p 2 je sudé číslo, což ale znamená, že
KAPITOLA 1: Reálná čísla [MA1-18:P1.1] 1.1. Číselné množiny Přirozená čísla... N = {1,, 3,...} nula... 0, N 0 = {0, 1,, 3,...} = N {0} Celá čísla... Z = {0, 1, 1,,, 3,...} Racionální čísla... { p } Q =
Funkční objekty v C++.
Funkční objekty v C++. Funkční objekt je instance třídy, která má jako svou veřejnou metodu operátor (), tedy operátor pro volání funkce. V dnešním článku si ukážeme jak zobecnit funkci, jak používat funkční
1. Toky, řezy a Fordův-Fulkersonův algoritmus
1. Toky, řezy a Fordův-Fulkersonův algoritmus V této kapitole nadefinujeme toky v sítích, odvodíme základní věty o nich a také Fordův-Fulkersonův algoritmus pro hledání maximálního toku. Také ukážeme,
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }
Pole Kdybychom v jazyce C++chtěli načíst větší počet čísel nebo znaků a všechny bylo by nutné všechny tyto hodnoty nadále uchovávat v paměti počítače, tak by bylo potřeba v paměti počítače alokovat stejný
Funkce a lineární funkce pro studijní obory
Variace 1 Funkce a lineární funkce pro studijní obory Autor: Mgr. Jaromír JUŘEK Kopírování a jakékoliv další využití výukového materiálu je povoleno pouze s uvedením odkazu na www.jarjurek.cz. 1. Funkce
3. Prohledávání grafů
3. Prohledávání grafů Prohledání do šířky Breadth-First Search BFS Jde o grafový algoritmus, který postupně prochází všechny vrcholy v dané komponentě souvislosti. Algoritmus nejprve projde všechny sousedy
LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25
Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem
Iterační výpočty Projekt č. 2
Dokumentace k projektu pro předměty IUS & IZP Iterační výpočty Projekt č. 2 Autor: Jan Kaláb (xkalab00@stud.fit.vutbr.cz) Úvod Úkolem bylo napsat v jazyce C program sloužící k výpočtům matematických funkcí
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
5. Lokální, vázané a globální extrémy
5 Lokální, vázané a globální extrémy Studijní text Lokální extrémy 5 Lokální, vázané a globální extrémy Definice 51 Řekneme, že f : R n R má v bodě a Df: 1 lokální maximum, když Ka, δ Df tak, že x Ka,
VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu
VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti
Kapitola 5 Vektorové prostory V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti operací sčítání a násobení
Elegantní algoritmus pro konstrukci sufixových polí
Elegantní algoritmus pro konstrukci sufixových polí 22.10.2014 Zadání Obsah Zadání... 3 Definice... 3 Analýza problému... 4 Jednotlivé algoritmy... 4 Algoritmus SA1... 4 Algoritmus SA2... 5 Algoritmus
Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem
Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel
Časová složitost / Time complexity
Časová složitost / Time complexity Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 24 Složitost algoritmů Algorithm complexity Časová a paměťová složitost Trvání výpočtu v závislosti
Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008
Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování študenti MFF 15. augusta 2008 1 15 Základy lineárního programování Požadavky Simplexová metoda Věty o dualitě (bez důkazu)
e-mail: RadkaZahradnikova@seznam.cz 1. července 2010
Optimální výrobní program Radka Zahradníková e-mail: RadkaZahradnikova@seznam.cz 1. července 2010 Obsah 1 Lineární programování 2 Simplexová metoda 3 Grafická metoda 4 Optimální výrobní program Řešení
Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy
Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Lukáš Havrlant Univerzita Palackého 10. ledna 2014 Primární zdroj Jiří Adámek: Foundations of Coding. Strany 137 160. Na webu ke stažení, heslo:
Náhodný vektor. Náhodný vektor. Hustota náhodného vektoru. Hustota náhodného vektoru. Náhodný vektor je dvojice náhodných veličin (X, Y ) T = ( X
Náhodný vektor Náhodný vektor zatím jsme sledovali jednu náhodnou veličinu, její rozdělení a charakteristiky často potřebujeme vyšetřovat vzájemný vztah několika náhodných veličin musíme sledovat jejich
Klauzurní část školního kola kategorie A se koná
56. ročník matematické olympiády Úlohy klauzurní části školního kola kategorie 1. rčete všechna reálná čísla s, pro něž má rovnice 4x 4 20x 3 + sx 2 + 22x 2 = 0 čtyři různé reálné kořeny, přičemž součin
Přednáška 3: Limita a spojitost
3 / 1 / 17, 1:38 Přednáška 3: Limita a spojitost Limita funkce Nejdříve je potřeba upřesnit pojmy, které přesněji popisují (topologickou) strukturu množiny reálných čísel, a to zejména pojem okolí 31 Definice
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově
Přílohy. Příloha 1. Obr. P1.1 Zadání úlohy v MS Excel
Přílohy Příloha 1 Řešení úlohy lineárního programování v MS Excel V této příloze si ukážeme, jak lze řešit úlohy lineárního programování pomocí tabulkového procesoru MS Excel 2007. Výpočet budeme demonstrovat
Dynamické programování
Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)
9 Kolmost vektorových podprostorů
9 Kolmost vektorových podprostorů Od kolmosti dvou vektorů nyní přejdeme ke kolmosti dvou vektorových podprostorů. Budeme se zabývat otázkou, kdy jsou dva vektorové podprostory na sebe kolmé a jak to poznáme.
Binární soubory (datové, typované)
Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i
Interpolace Uvažujme třídu funkcí jedné proměnné ψ(x; a 0,..., a n ), kde a 0,..., a n jsou parametry, které popisují jednotlivé funkce této třídy. Mějme dány body x 0, x 1,..., x n, x i x k, i, k = 0,
NPRG030 Programování I, 2018/19 1 / :03:07
NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr
Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)