2. Složitost, grafové algoritmy (zapsal Martin Koutecký)



Podobné dokumenty
Časová složitost / Time complexity

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Složitost Filip Hlásek

Algoritmy I, složitost

Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Digitální učební materiál

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Složitost. Teoretická informatika Tomáš Foltýnek

Digitální učební materiál

ALGORITMY A DATOVÉ STRUKTURY

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Algoritmy I. Číselné soustavy přečíst!!! ALGI 2018/19

Různé algoritmy mají různou složitost

10. Složitost a výkon

Digitální učební materiál

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.

Polynomy nad Z p Konstrukce faktorových okruhů modulo polynom. Alena Gollová, TIK Počítání modulo polynom 1/30

Definice 9.4. Nedeterministický algoritmus se v některých krocích může libovolně rozhodnout pro některé z několika možných různých pokračování.

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

Určování složitosti algoritmů. Základy diskrétní matematiky, BI-ZDM

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Lineární algebra : Násobení matic a inverzní matice

Dijkstrův algoritmus

Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie

Rekurentní rovnice, strukturální indukce

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Lineární algebra : Násobení matic a inverzní matice

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Rekurentní rovnice, strukturální indukce

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

COMPLEXITY

Vzdálenost uzlů v neorientovaném grafu

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

NPRG030 Programování I, 2018/19 1 / :25:37

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

Příklad 1. Řešení 1a Máme vyšetřit lichost či sudost funkce ŘEŠENÉ PŘÍKLADY Z M1A ČÁST 3

Fz =a z + a z +...+a z +a z =

4 Počítání modulo polynom

Časová složitost algoritmů

Úvod do problematiky

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

Funkce jedné reálné proměnné. lineární kvadratická racionální exponenciální logaritmická s absolutní hodnotou

Tato tematika je zpracována v Záznamy přednášek: str

Vektorové podprostory, lineární nezávislost, báze, dimenze a souřadnice

Od Turingových strojů k P=NP

Cvičení Programování I. Stručné poznámky ke cvičení ze

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

Úvod do programování 7. hodina

Elegantní algoritmus pro konstrukci sufixových polí

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:


for (int i = 0; i < sizeof(hodnoty) / sizeof(int); i++) { cout<<hodonoty[i]<< endl; } cin.get(); return 0; }

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

1. Úvodní příklady, definice RAM

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

Zimní semestr akademického roku 2015/ ledna 2016

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Výpočetní složitost algoritmů

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM:

NP-úplnost problému SAT

. je zlomkem. Ten je smysluplný pro jakýkoli jmenovatel různý od nuly. Musí tedy platit = 0

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Základy algoritmizace, návrh algoritmu

5 Orientované grafy, Toky v sítích

Funkce Arcsin. Předpoklady: Některé dosud probírané funkce můžeme spojit do dvojic: 4 je číslo, jehož druhá mocnina se rovná 4.

Stromy, haldy, prioritní fronty

Složitost problémů. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 25. dubna / 23

Cvičné texty ke státní maturitě z matematiky

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Úvod do informatiky. Miroslav Kolařík

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

8. Geometrie vrací úder (sepsal Pavel Klavík)

MIDTERM D. Příjmení a jméno:

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Programovací jazyk Pascal

oddělení Inteligentní Datové Analýzy (IDA)

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Soustavy lineárních rovnic

DMA Přednáška Rekurentní rovnice. takovou, že po dosazení odpovídajících členů do dané rovnice dostáváme pro všechna n n 0 + m pravdivý výrok.

11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST

1 Polynomiální interpolace

Návrh asynchronního automatu

Lingebraické kapitolky - Počítání s maticemi

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

kuncova/, 2x + 3 (x 2)(x + 5) = A x 2 + B Přenásobením této rovnice (x 2)(x + 5) dostaneme rovnost

13. cvičení z PSI ledna 2017

IB111 Úvod do programování skrze Python

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

1. Èasová a prostorová slo¾itost

Transkript:

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. Výpočetních modelů je více, my vybereme jeden poměrně blízký skutečným počítačům: Definice: Random Access Machine(Ram) Ram počítá jen s celými čísly znaky, stringy a podobně reprezentujeme čísly, jejich posloupnostmi atd. Paměť je tvořena buňkami, které obsahují čísla. Paměťové buňky jsou adresované taktéž čísly. A program samotný je konečná posloupnost instrukcí následujících druhů: Aritmetickéalogické: X<- Y Z, {+,,,div,mod,&,, <<, >>} Řídící:gotolabel,halt Podmínky: pro libovolnou nepodmíněnou instrukci můžu použít if X< Y ==>instrukce Poznámka(operandy): Složitost Konstanty(1,2,...) Adresované přímo M[konst.] budeme používat písmena A-Z jako aliasy pro buňky paměti 1 až 26, které nazýváme registry.(tedy A=M[-1]) Adresované nepřímo M[M[konst.]] budeme používat zkratku [[konst.]] Samotný výpočet probíhá takto: 1. Do smluvených buněk umístíme vstup, obsah zbylých paměťových buněk není definován. 2. Provádíme program postupně po instrukcích, dokud nedojdeme k haltu nebo konci programu. 3. Pokud se program nezacyklil, tedy pokud skončil, ze smluvených buněk přečteme výstup. Jak dobře popsat složitost? 1. Ram s jednotkovou cenou: čas #instrukcí, prostor maximální číslo buňky minus minimální číslo buňky použité při výpočtu. Toto není moc dobrý nápad, protože není nijak penalizována například práce s velmi dlouhými čísly pořád je to jedna instrukce, takže cena je stejná, ale počítače se tak přece nechovají. Velikost čísel ale omezit nesmíme, protože bychom omezili paměť(čísly ji adresujeme). 1 2011-05-23

2. Ram s logaritmickou cenou: cena instrukce #bitů zpracovávanýchčísel,prostor #bitůvšechpoužitýchbuněk.tojeteoreticky přesné, ale dost nepraktické(ve všech složitostech by byly logaritmy). 3. Ram s omezenými čísly: jednotková cena instrukcí, ale čísla omezíme nějakým polynomem P(n). Tím zmizí paradoxy prvního modelu, ale můžeme adresovat jen polynomiální prostor(to nám ovšem obvykle nevadí). Nadále tedy budeme předpokládat třetí zmíněný model. Definice: Časběhualgoritmu t(x)provstup xměřímejakosumučasůprovedených operací, které program provedl při zpracování vstupu x. Prostor běhu algoritmu s(x) je analogicky počet paměťových buněk spotřebovaných při výpočtu se vstupem x. Časová složitost(v nejhorším případě) je: T(n):=max{t(x); xjevstupdélky n}. Prostorová složitost(v nejhorším případě) je: S(n):= max{s(x); x je vstup délky n}. Nyní zkusíme zanalyzovat nějaký konkrétní algoritmus. Vezměme například řazení pomocí přímeho výběru(selection sort). Na vstupu dostaneme počet čísel n (vregistrun),vbuňkách1,...,njenesetříděnáposloupnostčísel.tapaktřídíme následujícím algoritmem zapsaným v pseudokódu: 1.Pro i=1do n: 2. j i 3. Pro k=ido n: 4. Je-li[k] <[j] j k 5. [i]prohodímes[j]. Jak by takový algoritmus vypadal zapsaný v instrukcích Ram? Budeme muset použít návěští a goto místo cyklů, jména registrů místo proměnných a třeba prohození musíme provést přes třetí proměnnou. Nějak takto: I <- 1 LOOP: J <- I M <- I MIN: IF [J]>=[M] ==> GOTO NEXT M <- J NEXT: J <- J+1 IF J<=N ==> GOTO MIN X <- [I] 2 2011-05-23

[I] <- [M] [M] <- X I <- I+1 IF I<=N ==> GOTO LOOP Pojďme se podívat, jaká je časová složitost jednotlivých částí algoritmu. Cyklus MINprovedezaprůchod3nebo4instrukce,alezajímánásnejhoršípřípad,takže4. Zavoláse(N I+1)-krát,tedycelkemprovede4 (N I+1)instrukcí. MimocykluMINjevLOOPještě7instrukcí,tedycelýLOOPprovede4 (N I+ 1)+7=4(N 1)+11instrukcí. Celkově se dostáváme k součtu N 1+( 4(N I)+11)=1+11N+4 I=1 N(N 1) 2 =2N 2 +9N+1. Na multiplikativních konstantách ale nezáleží Na reálných strojích se ceny jednotlivých(pro nás jednotkových) instrukcí stejně liší, takže nemá cenu se multiplikativními konstantami zabývat(alespoň při prvním přiblížení k problému). 2N 2 +9N+1 N 2 + N Navíc asymptoticky pomalejší funkce nakonec pro velké N vždy prohraje. Tím pádem nezáleží ani na členech nižších řádů: N 2 + N N 2 Když už toto víme, můžeme zanedbávat konstanty průběžně: N cyklů po Nkrocích N 2 kroků.tonásvedekzavedenítzv.asymptotickénotace: Asymptotická notace Definice:Profunkce f, g:æ Ê+ řekneme,že fje O(g)právětehdy,když c > 0: n Æ:f(n) c g(n).zde n Æjezkratkaza n 0 Æ: n n 0,tedy provšechna nažnakonečněmnohovýjimek. Poznámka: O-notace tedy vyjadřuje, že funkce f je skoro všude menší nebo nejvýše rovná nějakému reálnému násobku funkce g. Ačkoliv zápis vypadá jako rovnost, rozhodněnenísymetrický:napříkladplatílog n=o(n),aleneplatí n=o(log n). Formálněbybylolepšípovažovat O(g)zatřídufunkcí,prokteréplatí,žesedají shoraodhadnoutkladnýmnásobkemfunkce g,apsáttedy f O(g),alezvykje bohužel železná košile. Příklady:2,5n 2 = O(n 2 ),2,5n 2 +30n=O(n 2 ). Také platí: O(f)+O(g) O(f+ g), čímžmyslíme,žepokudvezmemelibovolnou f = O(f)ag = O(g),bude f + g = O(f+g).Toplatí,jelikožskorovšudeje f cf, g dg,atedy f +g cf+dg (c+d)(f+ g). 3 2011-05-23

Cvičení: Ukažte, že: O(f) O(g)=O(f g), O(f+ g)=o(max(f, g)), O(n 2 )+O(n)=O(n 2 + n)=o(n 2 ). O-notace popisuje horní odhad asymptotického chování funkce. Mnohdy však potřebujeme také odhadnout funkci zespodu(chceme-li říci, že algoritmus potřebuje alespoň nějaké množství času nebo paměti), případně z obou stran: Definice: f=ω(g) c >0: n Æ:f(n) c g(n). Ω-notacetedyříká,žehodnotafunkce fjevždystejnánebovyšší nežnějaký c-násobekfunkce g,atedy g= O(f). f=θ(g) f= O(g) f=ω(g) nebo výřečněji: f=θ(g) c 1, c 2 >0: n Æ:c 1 g(n) f(n) c 2 g(n)to znamená,žeexistujínezápornéreálnékonstanty c 1, c 2 takové,žese funkce f(n)dáohraničit c 1 -ac 2 -násobkemfunkce g(n). Poznámka: Ona rovnost je dost zavádějící. Není to totiž rovnost, není to symetrické. Jiný, možná rozumnější pohled, je zavedení O(g) jako množiny. Pak by se dalo psát f O(g),nebotřeba O(n) O(n 2 ). Porovnání růstu funkcí:(aneb jak moc máme algoritmy rádi podle jejich chování od nejlepších k nejhorším) Θ(1)... funkce zespoda i shora ohraničené konstantami Θ(log(log n)) Θ(log n)...logaritmická Θ(n ε ), ε (0,1)...sublineární Θ(n)...lineární Θ(n 2 )...kvadratická Θ(n k )...polynomiální Θ(2 n )...exponenciálnípřizákladu2 Θ(3 n )...exponenciálnípřizákladu3 Θ(k n )...exponenciálnípřizákladu k >1 Θ(n!)...faktoriálová Θ(n n )... nekonečněmnohodalšíchtříd(imezitěmivýšeuvedenými) Poznámka: Pokud se v odhadu složitosti vyskytne logaritmus(jinde než v exponentu), nezáleží na tom, jaký má základ, protože platí: log k n= log c n log c k = 1 log c k log c n, 4 2011-05-23

kde1/log c kjejenkonstanta,takžejimůžeme schovatdo O. Příklad: Select sort(rozebraný výše): Když jej pustíme na n čísel, pak časová složitost je T(n)=Θ(n 2 )aprostorová S(n)=Θ(n). Úvod do grafových algoritmů Další důležitou a zajímavou kapitolou jsou grafové algoritmy. Například následující příklady lze(i když to tak občas na první pohled nevypadá) řešit nějakým grafovým algoritmem: Mámmapkusilničnísítě,vnímísta(vrcholy)označená Doma a Škola.Dostanusedoškoly(ležívestejnékomponentěsouvislosti)?Dostanusedoškoly,kdyžvziměnapadnehodněsněhua některé cesty budou neprůjezdné? A jaký nejkratší úsek cest musí silničáři prohrnout, aby byla všechna místa na mapě dostupná? Mějmehlavolam Lloydovadevítka krabičku3 3sečtverečky označenými čísly od jedné do osmi a jednou mezerou, čtverečky jsou zamíchané a naším úkolem je správně je seřadit pomocí přesouvání čtverečků sousedících s mezerou do této mezery. Jak to udělat? Koliknejméněkrokůnámnatostačí?Jdetovůbecsezadáním,které jsme dostali? Jaké je nejkratší(kladné, celé) číslo v desítkové soustavě zapsané jen číslicemi 1, 0, které je dělitelné třinácti? Nakreslíme orientovaný grafsvrcholy0až12ahranami(x, y), y=10 xmod13ay= (10 x+1) mod 13(z každého vrcholu vychází jedna hrana za přidání číslice 1 a další za číslici 0). Hledané číslo existuje právě tehdy, když graf obsahuje orientovaný sled z 1 do 0. Jakým algoritmem takový sled najdeme? Podobné a další úlohy budeme řešit v následujících kapitolách. 5 2011-05-23