Hladový algoritmus
Transkript
Hladový algoritmus. 24.2.2005 UIN009 Efektivní algoritmy 1 Hladový algoritmus - motivační příklad Motivační problém: Obnos o nominální hodnotě n rozměnit na minimální počet mincí o denominacích 1,5,10,25. Přímočaré řešení: Vyzkoušet všechny možnosti. Efektivní algoritmus: V každém kroku zvolím minci o maximální denominaci, jejíž hodnota je ≤ než obnos, který ještě zbývá rozměnit. Dostanu tak vždy optimální řešení? 24.2.2005 UIN009 Efektivní algoritmy 2 Hladový algoritmus - obecný popis Optimalizační problém: hledá se max/min jisté veličiny Typická strategie: posloupnost kroků, v každém konečně mnoho pokračování. Hladový algoritmus: zvolím tu možnost, která se v daném stavu jeví jako nejlepší. lokální optimum globální optimum 24.2.2005 UIN009 Efektivní algoritmy 3 Příklad: Plánování úloh Vstup: množina úloh S={1,…, n} úloha i probíhá v čase 〈zi, ki) Výstup: M ⊆ S s max |M| splňující i,j ∈ M, i ≠ j ⇒ 〈zi, ki) ∩ 〈zj, kj) = ∅ Algoritmus Uspořádej prvky S tak, aby k1≤ k2≤ … ≤ kn M := {1} ; j := 1 for i :=2 to n do if zi ≥ kj then M := M ∪ {i} j := i fi od return M. 24.2.2005 UIN009 Efektivní algoritmy 4 Důkaz korektnosti V každém kroku hladového algoritmu existuje optimální řešení M* takové, že M⊆M*. I. M := {1}. Buď M* lib. optimální řešení. Buď u ∈ M* úloha s min. ku. Pak M* \ u ∪ {1} je též optimální řešení. II. M := {1,...,i+1}. Předpokládejme, že ∃ optimální řešení M* ⊇ {1,...,i}. Pak M* \ {1,...,i} je optimální řešení problému plánování pro množinu úloh S´ = {u ∈ S | zu ≥ ki}. 24.2.2005 UIN009 Efektivní algoritmy 5 Charakterizace problémů, které lze řešit hladovým algoritmem Obecný popis není znám Pravidlo hladového výběru: lokálně optimální krok (globálně) optimální řešení Buď S množina úloh, u úloha, která končí nejdříve pak ∃ optimální řešení M ⊆ S takové, že u ∈ M. Optimální podstruktura: Optimální řešení problému obsahuje optimální řešení podproblémů Buď u úloha v optimálním řešení M, která skončí nejdříve pak M-{u} je optimální řešení pro S’ = {i ∈ S | zi ≥ ku}. 24.2.2005 UIN009 Efektivní algoritmy 6 Plánování úloh - další příklady Uvažte modifikaci hladového algoritmu pro problém plánování úloh, při níž je v každém kroku vybrána ta úloha, která se nepřekrývá s již naplánovanými a • trvá nejkratší dobu, nebo • překrývá se s co nejmenším počtem zbylých přednášek. Naleznou tyto algoritmy vždy optimální řešení? Je dána množina přednášek, pro každou je známa doba jejího konání (začátek, konec). Navrhněte hladový algoritmus, který naplánuje přednášky do co nejmenšího počtu učeben. 24.2.2005 UIN009 Efektivní algoritmy 7 Minimalizace průměrného času, který úloha stráví v systému server (procesor, benzínová pumpa, pokladník v bance) n zákazníků čeká ve frontě, čas k obsloužení i-tého zákazníka je ti. Chceme minimalizovat T = Σi (čas v systému pro i-tého zákazníka). Příklad: n=3, t1 = 5, t2 = 10, t3 = 3. pořadí celkový čas T 123 5+(5+10)+(5+10+3)=38 132 5+(5+3)+(5+3+10)=31 213 10+(10+5)+(10+5+3)=43 ... Zobecnění: s serverů 24.2.2005 UIN009 Efektivní algoritmy 8 Určení minimální kostry - Kruskal Souvislý graf G=(V,E) s hranovým ohodnocením w: E → R. Kostra - podgraf T splňující V(T)=V, který je stromem. Minimální kostra - minimalizuje w(T)= Σe∈E(t) w(e) Kruskalův algoritmus (1958) uspořádej hrany tak, aby w(e1)≤ w(e2) ≤ ... ≤ w(em) E(T) := ∅ ; i := 1. while |E(T)| < |V| - 1 do if E(T) ∪ {ei} neobsahuje kružnici then přidej ei do E(T) fi i++ od. 24.2.2005 UIN009 Efektivní algoritmy 9 Určení minimální kostry - Jarník Jarníkův algoritmus (Jarník 1930, Prim 1957) E(T) := ∅ ; V(T):={lib. vrchol v ∈V}; while V(T)≠V do vyber v {{x,y}∈E | x∈V(T),y∉V(T)} hranu e={u,v} minimální váhy V(T):=V(T) ∪ {v}; E(T):=E(T) ∪{e} do. Borůvkův algoritmus (Otakar Borůvka, 1928) Zobecnění: hladový algoritmus pro matroidy 24.2.2005 UIN009 Efektivní algoritmy 10
Podobné dokumenty
tisk
Definice. Paměťovou náročnost výpočtu k-páskového
Turingova stroje se vstupem a výstupem definujeme jako
k-1
Σi=2
|wiui| , kde kn = (p,w1,u1,...,wk,uk) je poslední
konfigurace výpočtu.
Turingův str...
1. Minimální kostry
přidáváme nejlehčí z hran, které vedou mezi vrcholy stromu a zbytkem grafu. Takto
pokračujeme, dokud nevznikne celá kostra.
Algoritmus Jarník
Vstup: Souvislý graf s unikátními vahami
1. v0 ← libovo...
tisk
nezáporné ohodnocení hran c: E→R 0+
s ∈V
Výstup: d(v), π(v) pro každý vrchol v∈V
d(v)= δ(s,v)
π(v)= předchůdce vrcholu v na nejkratší cestě z s
do v
Grafové algoritmy
– V mezi[i,j] je index vrcholu k, přes který se má jít. Pokud k není 1(null) podívám se do mezi na nejkratší cestu mezi i,k a k,j
– Toto opakuji rekurzivně dokud nenajdu mezi[i,j] == -1 null).
Cest...
22 Přirozená čísla, opakování, početní operace
1) Zapiš největší jednociferné číslo
2) Zapiš číslo hned za 499
3) Zapiš nejmenší dvouciferné liché číslo
4) Zapiš největší trojciferné sudé číslo
5) Zapiš číslo, které má pět jednotek a osm desíte...
Grafové algoritmy
(Minimum Spannig Tree)
• Kostra grafu
– minimální souvislý podgraf obsahující všechny
vrcholy
– Nemá žádný cyklus, je tudíž stromem
Postoj k římským katolíkům
Adventisté sedmého dne usilují o pozitivní přístup k jiným vyznáním. Náš
prvořadý úkol je kázat evangelium o Ježíši Kristu v kontextu Ježíšova brzkého
příchodu a ne vyzdvihovat nedostatky v ostatní...
Výpisky z přednášek
Když má i uzel omezenou kapacitu, tak tento rozdělím na dva spojené hranou s touto kapacitou. Do jednu přivedu všechny
hrany, které do původního vstupovali a do druhého všechny, které z něj vystupo...