Hladový algoritmus: Porovnání verzí

Z Wikipedie, otevřené encyklopedie
Smazaný obsah Přidaný obsah
Koroner (diskuse | příspěvky)
m →‎Související články: přidán odkaz na prohledávání stavového prostoru
Dinybot (diskuse | příspěvky)
m robot: typografické a kódové korekce a náhrady přesměrování podle specifikace
Řádek 1: Řádek 1:
'''Hladový algoritmus''' ([[anglicky]] Greedy search) je jedním z možných způsobů řešení [[optimalizace|optimalizačních]] úloh v [[informatika|informatice]]. V každém svém kroku vybírá ''lokální'' minimum, přičemž existuje šance, že takto nalezne minimum ''globální''. Hladový algoritmus se uplatní v případě, kdy je třeba z [[množina|množiny]] určitých objektů vybrat takovou podmnožinu, která splňuje jistou předem danou vlastnost a navíc má minimální (případně maximální) ohodnocení. ''Ohodnocení'' je obvykle [[reálné číslo]] ''w'', přiřazené každému objektu dané množiny, ohodnocení množiny ''A'' je definováno jako <math>\mathit{w(A)} = \sum_{a \in A} w(a)</math>.
'''Hladový algoritmus''' ([[angličtina|anglicky]] Greedy search) je jedním z možných způsobů řešení [[optimalizace|optimalizačních]] úloh v [[informatika|informatice]]. V každém svém kroku vybírá ''lokální'' minimum, přičemž existuje šance, že takto nalezne minimum ''globální''. Hladový algoritmus se uplatní v případě, kdy je třeba z [[množina|množiny]] určitých objektů vybrat takovou podmnožinu, která splňuje jistou předem danou vlastnost a navíc má minimální (případně maximální) ohodnocení. ''Ohodnocení'' je obvykle [[reálné číslo]] ''w'', přiřazené každému objektu dané množiny, ohodnocení množiny ''A'' je definováno jako <math>\mathit{w(A)} = \sum_{a \in A} w(a)</math>.


== Algoritmus ==
== Algoritmus ==
Řádek 11: Řádek 11:
== Příklady ==
== Příklady ==
Hladové algoritmy se uplatňují například v následujích úlohách:
Hladové algoritmy se uplatňují například v následujích úlohách:
*hledání [[kostra grafu|minimální kostry]] [[Graf (teorie grafů)|grafu]] &mdash; [[Kruskalův algoritmus]], [[Jarníkův algoritmus]] a [[Borůvkův algoritmus]]
*hledání [[kostra grafu|minimální kostry]] [[Graf (teorie grafů)|grafu]] [[Kruskalův algoritmus]], [[Jarníkův algoritmus]] a [[Borůvkův algoritmus]]
*[[problém obchodního cestujícího]]
*[[problém obchodního cestujícího]]
*[[problém batohu]]: máme dáno ''n'' předmětů. Pro každý předmět <math>i = 1, \ldots, n</math> máme dánu hmotnost W[i] a cenu P[i]. Je dána kapacita C. Úkolem je najít takovou podmnožinu množiny úkolů, pro niž platí <math>\sum_{i = 1}^{n} x[i]\cdot W[i] \le C</math> a zároveň je celková cena batohu <math>\sum_{i = 1}^{n} x[i]\cdot P[i]</math> je co největší (''x'' je [[vektor]]; je-li x[i] = 1, pak i-tý předmět do dané podmnožiny patří, je-li x[i] = 0, pak do ní nepatří). Pro řešení této úlohy pomocí hladového algoritmu stačí setřídit předměty podle rostoucího [[poměr]]u cena/hmotnost, podmínka na množinu je, že součet hmotností předmětů musí být menší nebo roven C.
*[[problém batohu]]: máme dáno ''n'' předmětů. Pro každý předmět <math>i = 1, \ldots, n</math> máme dánu hmotnost W[i] a cenu P[i]. Je dána kapacita C. Úkolem je najít takovou podmnožinu množiny úkolů, pro niž platí <math>\sum_{i = 1}^{n} x[i]\cdot W[i] \le C</math> a zároveň je celková cena batohu <math>\sum_{i = 1}^{n} x[i]\cdot P[i]</math> je co největší (''x'' je [[vektor]]; je-li x[i] = 1, pak i-tý předmět do dané podmnožiny patří, je-li x[i] = 0, pak do ní nepatří). Pro řešení této úlohy pomocí hladového algoritmu stačí setřídit předměty podle rostoucího [[poměr]]u cena/hmotnost, podmínka na množinu je, že součet hmotností předmětů musí být menší nebo roven C.

Verze z 15. 12. 2007, 21:44

Hladový algoritmus (anglicky Greedy search) je jedním z možných způsobů řešení optimalizačních úloh v informatice. V každém svém kroku vybírá lokální minimum, přičemž existuje šance, že takto nalezne minimum globální. Hladový algoritmus se uplatní v případě, kdy je třeba z množiny určitých objektů vybrat takovou podmnožinu, která splňuje jistou předem danou vlastnost a navíc má minimální (případně maximální) ohodnocení. Ohodnocení je obvykle reálné číslo w, přiřazené každému objektu dané množiny, ohodnocení množiny A je definováno jako .

Algoritmus

  1. všechny prvky původní množiny setřídíme do posloupnosti podle rostoucí nebo klesající váhy podle toho, zda chceme výsledek minimalizovat nebo maximalizovat
  2. položíme
  3. postupně procházíme posloupnost a vytváříme množiny
    • splňuje-li množina danou podmínku, položíme
    • jinak
  4. projdeme-li takto celou původní množinu, obsahuje množina prvky, splňující danou vlastnost, a to takové, že součet jejich ohodnocení je minimální (maximální)

Příklady

Hladové algoritmy se uplatňují například v následujích úlohách:

  • hledání minimální kostry grafuKruskalův algoritmus, Jarníkův algoritmus a Borůvkův algoritmus
  • problém obchodního cestujícího
  • problém batohu: máme dáno n předmětů. Pro každý předmět máme dánu hmotnost W[i] a cenu P[i]. Je dána kapacita C. Úkolem je najít takovou podmnožinu množiny úkolů, pro niž platí a zároveň je celková cena batohu je co největší (x je vektor; je-li x[i] = 1, pak i-tý předmět do dané podmnožiny patří, je-li x[i] = 0, pak do ní nepatří). Pro řešení této úlohy pomocí hladového algoritmu stačí setřídit předměty podle rostoucího poměru cena/hmotnost, podmínka na množinu je, že součet hmotností předmětů musí být menší nebo roven C.

Související články