Greedy Algorithm (Açgözlü Algoritma)

Açgözlü algoritma, her adımda yerel olarak en iyi seçimi yaparak global bir hedefe ulaşmaya çalışan, geri dönüş yapmayan bir problem çözme yaklaşımıdır.

Açgözlü algoritma (Greedy Algorithm), bir problemi çözerken her adımda o anki duruma göre yerel olarak en iyi görünen kararı veren ve bu kararları geri almadan ilerleyen bir algoritma tasarım paradigmasıdır. "Açgözlü" adı, algoritmanın şu anın en iyi seçimini yaparken gelecekteki sonuçları göz ardı etmesinden kaynaklanmaktadır. Temel mantığı şudur: Her karar noktasında mevcut bilgilerle alınabilecek en iyi seçimi yap, bu kararı kesin kabul et ve bir sonraki adıma geç. Geri dönüş (backtracking) ya da yeniden değerlendirme yapılmaz. Bu özellik açgözlü algoritmaları genellikle çok hızlı kılar, ancak her zaman global optimum sonucu garantilemez. Açgözlü algoritmaların doğru çalışabilmesi için iki matematiksel koşulun sağlanması gerekir: Açgözlü Seçim Özelliği (Greedy Choice Property) — her adımdaki yerel optimal seçim, global optimum çözümün bir parçasıdır; ve Optimal Alt Yapı (Optimal Substructure) — problemin optimal çözümü, alt problemlerin optimal çözümlerini içerir. Bu koşullar sağlandığında açgözlü algoritmalar kusursuz çalışır: Kruskal ve Prim algoritmaları ile Minimum Yayılan Ağaç (MST) bulma, Dijkstra algoritması ile en kısa yol hesaplama, Huffman kodlaması ile kayıpsız veri sıkıştırma ve çizelgeleme problemleri bunların en bilinen örnekleridir. Yapay zeka ve makine öğrenmesinde açgözlü yaklaşım yaygındır. Karar ağaçlarında her düğüm için en bilgi kazandıran özelliği seçme, greedy decoding ile büyük dil modellerinde her adımda en yüksek olasılıklı token üretme ve nöral mimari arama süreçlerinde açgözlü stratejiler kullanılır. Özellik seçimi (feature selection) aşamasında da açgözlü ileri seçim (greedy forward selection) sık tercih edilir. Açgözlü algoritmaların dezavantajı, yerel optimuma takılıp global optimumu kaçırabilmesidir. Örneğin gezgin satıcı probleminde açgözlü yaklaşım iyi ama çoğunlukla optimal olmayan sonuçlar verir. Bu sınırlamayı aşmak için simüle tavlama (Simulated Annealing), genetik algoritmalar veya dinamik programlama tercih edilebilir. Beam search ise açgözlü decoding ile kapsamlı arama arasında bir denge kurar.