ALGORİTMALARIN SINIFLANDIRILMASI NEDİR?

Algoritmaların sınıflandırılması nedir? Algoritmalar, problemlerin çözümü için uyguladıkları yönteme göre sınıflandırılabilir. Algoritmaların sınıflandırılması prensibinin ana sebebi, problemleri çözmek için farklı metotlar ve yöntemler bulabilmektir.

Şimdi bu birbirinden farklı 6 algoritma sınıfını inceleyelim.

• Ö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, sorunlar daha küçük ve basit parçalara indirgenir. Bu küçük parçaların çözümleri birleştirilerek ana sorunun çözümüne ulaşılır.

Üs alma problemi, özyinelemeli bir algoritma kullanılarak çözülebilecek problemlere güzel bir örnektir. 5 sayısının 5 üssünü hesaplamak istediğimizde 5 sayısını 5 kere çarpmamız gerekir. Bu problemin özyinelemeli bir algoritma ile çözümünü aşağıdaki şekilde gösterebiliriz.

• Algoritmanın çıkış koşulu belirlenir (51 = 5).

• 2 sayısının faktöriyeli hesaplanır (52 = 51 * 5 = 25).

• 3 sayısının faktöriyeli hesaplanır (53 = 52 * 5 = 125).

• 4 sayısının faktöriyeli hesaplanır (54 = 53 * 5 = 625).

• 5 sayısının faktöriyeli hesaplanır (55 = 54 * 5 = 3.125).

• Sonuca ulaşıldığı zaman algoritma sonlandırılır.

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 aşama aşama yapılır. Algoritma çözüm aşamasında ilerlerken, muhtemel çözüm yollarının her birini kontrol ederek bir sonraki adıma geçmeye çalışır. Eğer algoritma denediği çözüm yolundan sonuç alamazsa, algoritma bir önceki adımda bulunan diğer muhtemel çözüm yollarına bakmak için geri döner.

Geri izlemeli algoritmalar ile çözülen birçok problem vardır. Şimdi de bu problemlerden bir örnek verelim.

• Sudoku: 9 x 9’luk bir tablonun her satır ve sütununda 1’den 9’a kadar sayıların olması gerekmektedir. Bazı değerlerin dolu olarak verildiği bulmaca nasıl çözülür.

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. Problemin genel çözümü elde edilirken alt parçalara ait çözümler belirli bir sırayla bir araya getirilir.

Böl ve yönet algoritmaları, üç ana unsurdan meydana gelmektedir:

• Bölme : Problem burada daha küçük parçalara ayrılır. Problem daha alt parçalara bölünemeyecek duruma gelinceye kadar, özyinelemeli bir yaklaşımla bölme işlemi yapılır.

• Yönetme : Problemin alt parçalarının, birbirlerinden bağımsız olarak çözüldüğü aşamadır.

• Birleştirme : Problemin alt parçalarına ait çözümlerin, özyinelemeli bir yaklaşımla birleştirildiği aşamadır.

Dinamik Programlama (Dynamic Programming)

Dinamik programlama, karmaşık problemleri küçük parçalar halinde çözen, elde edilen sonuçları bilgisayar belleğinde bir veri yapısında tutan, genel çözümü bulurken de veri yapılarında tutulan sonuçları kullanan algoritmadır.

Bir problemin dinamik programlama ile çözülebilmesi için problemin alt parçalara ayrılabilmesi ve genel çözümün bu alt parçaların birleştirilerek elde edilmesi gerekir. Dinamik programlama daha çok optimizasyon problemlerinde kullanılır.

Daha önce özyinelemeli algoritma aracılığıyla çözdüğümüz üs alma 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 denir. Açgözlü algoritmalarda yerel olarak en iyi sonuç elde edilirken, bu durum her zaman için geçerli olmayabilir.

Açgözlü algoritmalar ile problem çözümündeki temel yaklaşım, problemin küçük bir alt kümesi için çözüm oluşturmak ve bu çözümü problemin geneline yaymaktır. Algoritma içerisinde yapılan bir seçim, o an için doğru olsa bile sonraki seçimlerde olumsuz etki yapabilir.

Bir şehirden yola çıkan gezginin en fazla seyahat edeceği yolu hesaplama problemi, açgözlü bir algoritma ile çözülebilir. Bu yöntemde, mevcut şehirden gidilebilecek en uzak şehre gidilir. İlk haritada gezgin 7 + 12 + 9 = 28 ile en uzak mesafeyi kat eder ve problemin en iyi çözümünü elde eder. İkinci haritada ise; gezgin yine 7 + 12 + 9 = 28 yolunu kullanır fakat en iyi çözümü elde edemez. Açgözlü algoritmanın yerel optimumda bulamadığı 7 + 10 + 32 = 49 yolu, en fazla seyahat edilen yol olmalıdır.

algoritmaların sınıflandırılması

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 işlem yükü fazla, çözüm ise optimum değildir. Problem büyüdükçe, kaba kuvvet algoritması ile çözümlenmesi de o kadar zayıf olur.

Bir liste içerisinde eleman aramak, kaba kuvvet algoritmaların kullanımıyla çözülebilecek problemlere bir örnektir. Listenin tüm elemanları sırayla kontrol edilerek, aranan elemanın listede olup olmadığına bakılabilir. Listenin eleman sayısı arttıkça, kaba kuvvet algoritmasının çalışma süresi ve yaptığı karşılaştırmalar da artacaktır.

Algoritmaların sınıflandırılması konusunu bu yazımızda gördük. Aşağıdaki linke tıklayarak Algoritma ve Programlama kategorisi altında bir çok içeriğe ulaşarak Algoritma ve Programalama bilginizi artırabilirsiniz. Ayrıca aşağıdaki Instagram logosuna tıklayarak bizi Instagram üzerinden de takip edebilirsiniz.

https://yazilimdelisi.com/category/programlama-dilleri/algoritma-ve-programlama/

Sosyal Medya Hesaplarımız

instagram logo
twitter logo

Son Eklenen Yazılar

Bir Cevap Yazın

%d blogcu bunu beğendi: