• Özyinelemeli Algoritmalar (Simple Recursive Algorithms)
• Geri İzlemeli Algoritmalar (Backtracking Algorithms)
• Böl ve Yönet Algoritmaları (Divide and Conquer Algorithms)
• Dinamik Programlama (Dynamic Programming)
• Açgözlü Algoritmalar (Greedy Algorithms)
• Kaba Kuvvet Algoritmaları (Brute Force Algorithms)
Özyinelemeli Algoritmalar (Simple Recursive Algorithms)
Kendisini doğrudan veya dolaylı olarak çağıran algoritmalara özyinelemeli algoritma adı verilir. Bu algoritmalarda, problemler daha küçük ve basit parçalara indirgenir. Küçük parçalar için oluşturulan çözümlerin birleştirilmesiyle ana problemin çözümü elde edilir. Faktöriyel hesabı, özyinelemeli bir algoritma kullanılarak çözülebilecek problemlere güzel bir örnektir.
Geri İzlemeli Algoritmalar (Backtracking Algorithms)
Geri izlemeli algoritmalar, genellikle optimizasyon problemlerinde kullanılan, problem çözümünde tüm olasılıkları deneyen algoritmalardır. Bu algoritmalarda çözüm kademeli şekilde oluşturulur. Algoritma çözüm aşamasında ilerlerken, olası çözüm yollarının hepsini deneyerek bir sonraki adıma geçmeye çalışır. Algoritmanın denediği çözüm yolundan sonuç alınamazsa, algoritma bir önceki adımda bulunan diğer olası çözüm yollarına geri döner. Geri izlemeli algoritmaların kullanımı ile çözülen birçok problem vardır. Bu problemlerin başlıcaları aşağıda listelenmiştir:
• Sudoku
• Sekiz Vezir Problemi
• Sırt Çantası Problemi
Böl ve Yönet Algoritmaları (Divide and Conquer Algorithms)
Böl ve yönet algoritmaları, problemlerin mümkün olan en küçük alt parçalara ayrıldığı,her bir alt parçanın diğerlerinden bağımsız şekilde çözüldüğü algoritmalardır.
Dinamik Programlama (Dynamic Programming)
Dinamik programlama, karmaşık problemleri küçük parçalar halinde çözen, elde edilen sonuçları bilgisayar hafızasında bir veri yapısında saklayan, genel çözümü elde ederken de veri yapılarında saklanan sonuçları kullanan bir programlama yöntemidir. Daha önce özyinelemeli algoritma aracılığıyla çözdüğümüz faktöriyel hesabını dinamik programlama ile de çözebiliriz.
Açgözlü Algoritmalar (Greedy Algorithms)
Bir problem için mümkün olan en doğru çözümü hedefleyen algoritmalara açgözlü algoritmalar adı verilir. Açgözlü algoritmalarda yerel olarak optimum sonuç elde edilirken,
bulunan sonuç her zaman için en iyi çözüme karşılık gelmeyebilir. Bir şehirden yola çıkan gezginin en fazla seyahat edeceği yolu hesaplama problemi, açgözlü bir algoritma ile çözülebilir.
Kaba Kuvvet Algoritmaları (Brute Force Algorithms)
Bir problemin çözümü aşamasında, kabul edilebilir bir çözüm elde edene kadar tüm olasılıkları deneyen algoritmalara kaba kuvvet algoritmaları denir. Kaba kuvvet algoritmaları, genellikle problemin tanımından yola çıkarak en basit çözüm yolunu uygular ve rahatlıkla kodlanır. Fakat bu algoritmalarda çok fazla işlem yapılır ve çözüm yolu optimumdan uzaktır. Problemdeki veri hacmi büyüdükçe, kaba kuvvet algoritması ile çözüm şansı da azalır. Bir liste içerisinde eleman aramak, kaba kuvvet algoritmaların kullanımıyla çözülebilecek problemlere bir örnektir.