Açgözlü Algoritmalar


Açgözlü algoritma, nihai çözümün küresel anlamda optimal olacağı beklentisiyle her adımda optimal (mevcut adım içinde) değişkeni seçen bir algoritmadır.

Küçük örnek:
Farklı mezheplerden sınırsız sayıda madeni paramız olduğunu ve S miktarını toplamamız gerektiğini varsayalım. Her birini açgözlü bir algoritma ile çözmeye çalışacağımız iki özel durumu ele alalım.
Yani, şu şekilde hareket edeceğiz: her adımda, kalan miktarı aşmayan en yüksek değerde (adımdaki en iyi seçenek) bir madeni para alacağız.

a) Madeni paraların kupürleri 1, 5 ve 10 ve S = 27 olsun.
1) 10, S: 27 alın -> 17
2) 10, S: 17'yi al -> 7
3) 5'i al, S: 7 -> 2
4) 1, S: 2'yi al -> 1
5) 1 al, S: 1 -> 0
Sonuç olarak, beş jeton miktarını attılar. Bağımsız olarak (örneğin, kaba kuvvet) 4 jeton veya daha azı için 27 puan alamayacağınızdan emin olabilirsiniz.

b) Madeni paraların kupürleri 1, 5 ve 7 ve S = 24 olsun.
1) 7'yi al, S: 24 -> 17
2) 7, S: 17'yi al -> 10
3) 7'yi al, S: 10 -> 3
4) 1, S: 3 al -> 2
5) 1, S: 2 al -> 1
6) 1 al, S: 1 -> 0.
Altı madeni parayla puan aldık, ancak dört madeni parayla S puanı alabildik - ikisinin nominal değeri 7 ve ikisinin nominal değeri 5.

Örnekten de görülebileceği gibi, açgözlü bir algoritma ile problem çözmek her zaman mümkün değildir. Ancak genel olarak optimal bir cevaba götürürse, genellikle dinamik programlama veya diğer yöntemleri kullanmaktan daha kolay olacaktır.