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...