greedy algorithm (tsz. greedy algorithms)
A greedy algorithm (mohó algoritmus) egy egyszerű és hatékony megközelítés optimalizálási problémák megoldására, amely minden lépésben az aktuálisan legjobbnak tűnő döntést választja – abban a reményben, hogy ezzel a globálisan legjobb megoldást is megtalálja.
Egy mohó algoritmus lépésről lépésre építi a megoldást, mindig az aktuálisan legnagyobb (vagy legkisebb) nyereséggel járó döntést választva, visszalépés vagy újratervezés nélkül.
Ha ezek nem teljesülnek, a mohó megoldás nem garantálja az optimálist.
Probléma | Leírás |
---|---|
Activity selection | Válassz maximum számú nem átfedő intervallumot |
Hátizsák (fractional) | Válassz a legjobb érték/tömeg arány szerint |
Prim algoritmus | Minimális feszítőfa építése gráfban |
Kruskal algoritmus | Minimális feszítőfa élhozzáadásos módon |
Dijkstra algoritmus | Legrövidebb út nem negatív súlyokkal |
Huffman-kódolás | Minimális hosszú prefixkód-fát épít |
def fractional_knapsack(values, weights, capacity):
ratio =
ratio.sort(reverse=True)
total_value = 0
for r, v, w in ratio:
if capacity >= w:
capacity -= w
total_value += v
else:
total_value += r * capacity
break
return total_value
values =
weights =
capacity = 50
print("Max value:", fractional_knapsack(values, weights, capacity))
✅ Előnyök | ❌ Hátrányok |
---|---|
Egyszerű implementáció | Nem mindig optimális |
Gyors (általában ) | Néha nagyon rossz megoldást ad |
Kevés memóriaigény | Problémafüggő, működése nem univerzális |
Példa: 0-1 hátizsákprobléma
Fogalom | Leírás |
---|---|
Greedy algoritmus | Mindig a helyileg legjobb lépést választja |
Működése | Egyszerű, gyors, determinisztikus |
Előnye | Hatékony, ha a probléma szerkezete engedi |
Korlátozása | Nem mindig globálisan optimális |
Példák | Prim, Kruskal, Dijkstra, Huffman, aktivitásválasztás |