Hladový algoritmus

Transkript

Hladový algoritmus
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

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

Více

1. Minimální kostry

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

Více

tisk

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

Více

Grafové algoritmy

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

Více

22 Přirozená čísla, opakování, početní operace

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

Více

Grafové algoritmy

Grafové algoritmy (Minimum Spannig Tree) • Kostra grafu – minimální souvislý podgraf obsahující všechny vrcholy – Nemá žádný cyklus, je tudíž stromem

Více

Postoj k římským katolíkům

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íce

Výpisky z přednášek

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

Více