Yapay zeka, makine öğrenmesi, derin öğrenme, oyunlar, mobil uygulamalar, web siteleri bir çok konuda bir şeyler programlıyoruz, kodluyoruz ve hepsinde algoritma denen şeyden faydalanıyoruz. O zaman ilk önce algoritma nedir? Hangi türleri vardır bunu öğrenmeliyiz.
Ne peki bu algoritma? Hangi çeşitleri var? Sadece kodlama yaparken mi kullanılır?
Algoritma nedir?
“Algoritma; özellikle bir bilgisayarın bir problemin çözümüne veya bir amaca ulaşmak için adım adım izlediği yol Merriam Webster’ a göre. Oxford English Dictionary e göre ise “Özellikle bir bilgisayar tarafından, hesaplamalarda veya diğer problem çözme işlemlerinde uyulması gereken bir süreç veya kurallar kümesi. Bana göre ise farklı olarak herhangi bir şeyi yapabilmemiz için adım adım ilerlememiz gereken yol. Çünkü aslında en zorlu problemlerden gündelik hayattaki en kolay işlerimize kadar algoritma kullanıyoruz. Yabancı birine verdiğimiz yol tarifi, pasta tarifi, hatta kişisel gelişim kitapları gibi belirli tanımlamaları olan sıralı yönergelerinin hepsi birer algoritmadır. Ancak bu terim yine de pek böyle kullanılmaz. Adım adım amaca ulaştırmaya çalışan algoritmalar genellikle matematiksel bir sonuca vardırır. Mantık, cebir, olasılık gibi birçok matematiksel işlem gerçekleştirir ve sonucunu koda çevirir. Bugün birçok işlemi otomatik bir şekilde bilgisayarlarımızda gerçekleştirmemizi ve bilgisayarların kendi kendine üretmesi hatta belki de ileride tehlikeli bir boyuta ulaşmasına yol açacak olan da algoritmalardır. Algoritma bir işin nasıl yapıldığının dışında yapılış sırasını da belirtir ve bu oldukça önemlidir. Örneğin ceketinizden sonra tişörtünüzü iç çamaşırınızdan önce pantolonunuzu giyseniz ne olurdu.
Algoritma Çeşitleri
Algoritmalar neredeyse sayılamayacak kadar çok çeşide sahip olabilirler. Birbirinden farklı birçok sorun için birçok farklı algoritma yazabiliriz. Her birinin kendine ait özellikleri, sorunları, garip ama yetenekli tarafları vardır. Ben en popüler olanlardan 6 tanesini açıkladım.
Buyurun;
1. Basit Özyinelemeli (Simple Recursive) Algoritma
Sorunu kendi kendine çözer. Çözüme ulaşana kadar her seferinde daha küçük bir değerle kendini çağırıp çözüme ulaşır. Yani sorunu küçük parçalara ayırıp daha küçük sorunlar haline getirir. Ve en küçük haline kadar devam eder. En küçük halinde sorun çözülünce genel sorunun çözümüne ulaşılmış olunur. Aynı tipte olan ve parçalara ayrılabilen durumlar için kullanılır. Sürekli kendini küçülten ve kendi içinde tekrar eden bir yapıda olduğu için karışık bir algoritmadır.
Örneğin; Hanoi kuleleri, İnorder/Postorder ağaç dolaşımları

Hanoi kuleleri 3 çubuk ve belli bir sayıda diskten oluşan matematik oyunudur. Amacı ilk çubuktaki diskleri son çubuğa taşımaktır. Ancak bu oyunda bazı kurallar vardır. Asla iki diski aynı anda taşıyamazsınız ve büyük diski küçük diskin üzerine koyamazsınız. Oyunun bir diğer amacı ise en az hamleyi yapmaktır. 3 diskle yapılabilecek en iyi hamle sayısı 7’dir. Fakat bu oyunun çıktığı zamanlarda 64 diskle oynanması için hazırlanmış. Ancak sizin de tahmin ettiğiniz ve 64 diskli oyunu üretenlerin de bildiği üzere bunu yapmak en az iyi bir tahminle 500 milyar yıl sürüyor. O yüzden bu oyunun bittiği zaman kıyametin kopacağı söyleniyor.
2. Böl Ve Fethet (Divide & Conquer) Algoritması
Özyineleme algoritmasına benzer yapıdadır. Bu algoritma sorunu önce ikiye böler ve daha sonra tekrardan ikiye böler. Böylece sorun çözülene kadar tekrar tekrar daha küçük parçalara bölüp en küçük hale geldiği zaman çözmeye çalışır. Sorunun genel çözümü için ise bütün parçalar tekrardan birleştirilir ve çözüm elde edilir.
Örneğin; hızlı sıralama, sıralama birleştirme

Görseldeki örnekte problem önce adım adım parçalara ayrılmış ve hepsi çözülmüş. Daha sonra tersine bir işlem gerçekleştirilip parçalar uygun sırayla birleştirilmiş.
3. Dinamik Programlama (Dynamic Programming) Algoritması
Bu algoritma geçmiş çalışmaların sonuçlarını hatırlar ve bunları yeni sonuç bulmak için kullanır. Dinamik programlama algoritması sorunu basit alt sorunlara indirger ve bunları çözer. Daha sonra bu cevapları kullanmak için depolar.
Örneğin; Fibonacci dizisi

Fibonacci dizisinin mantığı her sayının kendinden bir önceki ve iki önceki ile toplanıp bulunmasıdır. Algoritma her sayıyı kurala uygun toplar, bulur ve hafızada saklar. Diziyi göstermesi gerektiği zaman çözümü gösterir.
4. Açgözlü (Greedy) Algoritma
Bu algoritma parça parça sonuca yaklaşır ve anında fayda sağlayabileceği yani çözüme en yakın sonuçları seçer. Çözüme giden seçeneklerden en iyi olanın seçilip sorunun genel anlamda en iyi çözümünün bulunması amaçlanır. Seçim yapılırken en iyi seçim olup olmadığına bakılmaksızın çözüme en yakın seçim yapılır. Dolayısıyla bu seçim her zaman en iyi çözüm olmayabilir.
Örneğin; Huffman kodlaması, Dijkstra algoritması

Dijkstra algoritmasının temel amacı en kısa yolu bulmaktır. Başlangıçtan itibaren yerel seçimlerden en iyisi seçilirse problemin genel seçiminin de en iyi olacağı varsayılır. Ancak her zaman seçilen yollar doğrultusunda en kısa yol bulunmaz.
5. Kaba Kuvvet (Brute Force) Algoritması
En basit algoritmalardan biridir. Özellikle de özyinelemeli algoritmayla kıyaslayacak olursak. Adından da anlaşılacağı üzere sorunu çözene kadar tüm yolları sonuna kadar dener ve çözümü bulmayı umar. Bu tarz algoritmalar tüm çözüm yolları denendiği için en iyi çözümü bulmak içinde kullanılabilir. Aynı zamanda tüm çözüm yolarını denediği için uzun bir çözüm yoludur.
Örneğin; sıralı arama
Veri güvenliğindeki en basit saldırı yöntemlerinden biridir. Mesela tüm harfler ve rakamlar kullanılarak yapılabilecek bir şifre düşünelim. 29 harf ve 10 rakam ile oluşabilecek herhangi bir şifreyi, her kombinasyonu deneyerek çözmeyi amaçlar. Tüm olasılıkları denediği için uzun saatlerde sürse algoritma sonunda şifreyi bulmayı başaracaktır. Tabi bulduğu şifre (iyimser bir bakış açısıyla) şuan ki güvenlik önlemlerinde nasıl kullanılır orasını bilemem.
6. Geri İzleme (Backtracking) Algoritması
Geri izleme algoritması sorunları adım adım çözer ve eğer herhangi bir adımı yanlış çözerse o adımı geri gelir ve o adım için başka bir yol dener. Burada birçok yol arasından en doğru yol bulunması amaçlanır. Bu algoritmada en iyi yolun bulunacağı garantisi yoktur. Çünkü algoritma tüm yolları denemez sadece yanlış olan adımdaki yoldan geri dönüp başka bir yol dener. Tüm adımlar en iyi seçenek olmasını amaçlayarak seçildikten sonra sonuca ulaşılır.
Örneğin; Queens sorunu, sudoku

Labirentler bu algoritmaya çok uygun örneklerdir. Çünkü yanlış yoldan gidildiği zaman aynı yolu bir adım geri almanız gerekir.
Bilimle kalın. Sevgilerle
KAYNAKÇA
- https://www.geeksforgeeks.org/fundamentals-of-algorithms/
- https://www.includehelp.com/data-structure-tutorial/algorithm-and-its-types.aspx
- https://www.educba.com/types-of-algorithms/
- Eğer hanoi kuleleri hakkındaki efsaneyi ve farklı versiyonlarını okumak isterseniz detaylar için bkn. http://www.towerofhanoi.org/the-legend.php