ALGORİTMA

Nov 2 / Metin Altun
Algoritma, belirli bir problemi çözmek veya belirli bir görevi gerçekleştirmek için adım adım talimatlar içeren matematiksel veya mantıksal bir işlem dizisidir. Algoritmalar, problemin boyutu veya karmaşıklığı ne olursa olsun, belirli bir sonuca ulaşmak için kullanılır. Algoritmalar, problem çözme sürecini standartlaştırır ve daha anlaşılır hale getirir.

İlk Algoritma

Kaynaklarda, algoritma isminin 780-850 yılları arasında yaşamış Musa el-Harizmi'nin adından geldiği ifade edilmektedir. Antik Yunan'da matematikçi Euclid'in "Öklidyen Algoritması," iki sayının en büyük ortak bölenini bulmak için kullanılan tarihteki ilk algoritma örneklerindendir. Bu algoritmaya bir örnek verelim. Elinizde dikdörtgen şeklinde bir zemin olduğunu düşünün, örneğin bir odanın tabanı... Bu zemini kare şeklinde fayanslarla kaplamak istiyorsunuz. Zeminin boyutlarını kalan bırakmayacak şekilde kaplayan en büyük kareyi bu algoritma ile bulabilirsiniz. Bunun için öncelikle zemini, kenarı dikdörtgenin kısa kenarına eşit olan karelerle kaplayın. Kalan dikdörtgen parçayı da aynı mantıkla karelerle kaplamaya devam edin. Geride kalan her dikdörtgen parçası için aynı algoritma ile devam ettiğinizde, zemini kalan bırakmayacak şekilde kaplayan en büyük kareyi bulmuş olursunuz. Bu algoritma, kesin olarak tanımlanmış bir dizi talimattan oluşan basit ama etkili bir algoritma örneğidir.
Aşağıdaki görselde bu süreci uyguladıktan sonra kırmızı alanı kalan bırakmayacak şekilde kaplayabilecek karenin beyaz renkle görülen karelerin boyutunda olması gerektiği görülmektedir.

Algoritmaların Gelişimi

Algoritmaların gelişimi, binlerce yıl boyunca insanların matematiksel ve mantıksal problemleri çözme ihtiyacından kaynaklanmaktadır. Bu gelişim tarihsel olarak şu önemli dönemlere ayrılabilir:
Antik Dönem ve Yunan Matematiği: Algoritmaların tarihsel gelişimi Antik Yunan'a kadar gitmektedir. Özellikle matematikçi Euclid, M.Ö. 300 civarında yazdığı "Öklidyen Elementler" adlı eserinde, geometrik problemleri çözmek için adım adım yönergeler içeren algoritmalar sunmuştur. Bu eser, özellikle geometrinin temellerini atmış ve algoritmaların erken bir örneğini sunmuştur.

Orta Çağ ve Hint-Arabik Rakamla
rı: Orta Çağ boyunca, Hint-Arabik rakamları Avrupa'ya tanıtıldı. Bu rakamların kullanımı, matematiksel işlemleri daha etkili bir şekilde gerçekleştirmeyi mümkün kıldı ve sayıların daha kolay işlenmesini sağladı.

Rönesans ve Analitik Geometri: Rönesans dönemi matematikçileri, analitik geometriyi geliştirdiler. Bu, cebirsel ifadeleri geometrik şekillerle ilişkilendirerek matematiksel analizde büyük bir adım atmalarını sağladı. Özellikle René Descartes ve Pierre de Fermat bu alanda öne çıkan isimlerdir.

Mekanik Hesap Makineleri:
17. yüzyılda, matematiksel hesaplamaları hızlandırmak için mekanik hesap makineleri geliştirilmeye başlandı. Örneğin, Blaise Pascal'ın Pascaline adlı mekanik hesap makinesi ve Gottfried Wilhelm Leibniz'in hesaplamalara olan katkıları bu dönemde öne çıkan gelişmelerdir.
Alan Turing ve Turing Makinesi: 20. yüzyılın başlarında, İngiliz matematikçi ve bilim insanı Alan Turing, "Turing Makinesi" kavramını geliştirdi. Bu soyut model, matematiksel hesaplamaları daha iyi anlamak için kullanıldı ve bilgisayar biliminin temelini attı.

Bilgisayarlar ve Algoritmalar: İlk bilgisayarlar 20. yüzyılın ortalarında geliştirildi. Bu bilgisayarlar, algoritmaların uygulama alanını genişletti ve karmaşıklıklarıyla başa çıkmalarına yardımcı oldu. Özellikle John von Neumann tarafından geliştirilen von Neumann mimarisi, modern bilgisayarların çalışma prensiplerini temel alır.

Algoritmaların Çeşitlenmesi: Bilgisayarların yaygınlaşması, algoritmaların sayısını ve türünü artırdı. Sayısal analiz, veri işleme, yapay zeka, graf teorisi gibi farklı alanlarda algoritmalar geliştirildi ve kullanıldı.

İnternet ve Büyük Veri:
İnternetin yükselişi, büyük veri analizi ve veri madenciliği gibi alanlarda yeni algoritmaların geliştirilmesine yol açtı. Bu, arama motorlarından sosyal medya platformlarına ve öneri sistemlerine kadar birçok uygulamada kullanılmaktadır.

Algoritmaların gelişimi, matematik, bilgisayar bilimi ve endüstriyel uygulamalarla sıkı bir ilişkilidir. Teknolojinin ilerlemesi, algoritmaların karmaşıklığını artırarak daha büyük ve karmaşık problemleri çözme kapasitesini artırmıştır. Günümüzde, algoritmaların geliştirilmesi ve iyileştirilmesi, birçok alandaki bilimsel ve ticari çalışmaların temelini oluşturmaktadır.

Bazı Örnekler

Algoritmalar adım adım uygulanan basit tariflerdir. Bir problemin çözümüne yönelik algoritma oluşturmak yaratıcılık ister ama onları kullanmak sadece belirli talimatları izlemekle mümkün olur. Bu bakımdan algoritmaların bilgisayarlarla mükemmel bir uyumu vardır. Algoritma bir fikirdir ve bu fikirler belirli bir bilgisayar koduna çevrilebilir.

Bilgisayarlara yönelik yaratılan algoritmaların en önemlilerinden birisi sıralama algoritmalarıdır. Çok çeşitli sayıda sıralama algoritması vardır. Amaca, verinin yoğunluğuna, vb. nedenlere göre birisi tercih edilir. Her birinin bir diğerine göre artıları veya eksileri vardır.

Sıralama algoritmasına bir örnek verelim. Adı "Baloncuk Sıralaması". Burada sıralanacak "şey"ler ikili gruplar halinde incelenir ve buna göre sıraya konulur.
Örneğin aşağıdaki resimde 5 adet sütunu baloncuk sıralama algoritmasına göre sıralayalım.
Bunun için soldan başlayarak sırasıyla önce 1 ve 2, sonra 2 ve 3, sonra 3 ve 4 karşılaştırılarak küçük olan sola alınır.
1 ve 2 karşılaştırılmış ve küçük olan 2 sola alınmıştır. Şimdi yeni sıraya göre 2 ve 3 karşılaştırılacak.
Bu şekilde sıranın sonuna kadar gidelim.
Sıranın sonuna geldiğimizde sıralama tamamlanmamışsa tekrar sol başa dönüp aynı mantıkla devam edeceğiz.
Sıralama tamamlandı.

Google ilk yıllarında arama motoru için oluşturduğu "PageRank" ile çok güçlü bir algoritma geliştirmiştir. Bu algoritma aslında bir sıralama algoritmasıdır ve temelde iki veriyi esas almaktadır. Sıralama, bir web sayfasına başka sayfalardan gelen bağlantıları ve bu başka sayfaların ne kadar önemli olduğunu esas alarak sayfalar arasında bir sıralama oluşturur. Bunu bir futbol takımında oyuncular arasında gerçekleştirilen pas alma/verme sürecine benzetebiliriz. Bir futbolcuya diğer oyunculardan gelen pas ne kadar çoksa, o oyuncu o kadar "önemlidir", ya da "PageRank" sıralamasında üste çıkar. Aynı zamanda bu "önemli" oyuncu pas verirken hangi futbolculara daha çok pas veriyorsa o futbolcunun da "PageRank" sıralaması olumlu etkilenir. Bunun bir örneği aşağıda verilmiştir.
Kaynak: Cambridge University Press: Using the PageRank Algorithm to Rank Football Players in a Game

Burada 5 futbolcu arasında 3 kez gerçekleşen etkileşim sonrasında "PageRank" sıralamasın nasıl oluştuğunu görülmektedir.  Futbolcu E, üçüncü etkileşim sonrasında 16/40 etkileşim puanıyla 1'inci sıraya yerleşmiştir.

Bir başka algoritma örneği de sosyal medya akışı üzerinden verilebilir. Sosyal medya platformları, kullanıcıların oluşturdukları profil, takip ettikleri içerik, etkileşimde bulunduğu kişi ya da sayfalarla ilgili verileri sıralamak için algoritmalar kullanır. Sosyal medya algoritmaları, kullanıcı deneyimini kişiselleştirmenin yanı sıra, platformlar için gelir oluşturmanın bir yolu olarak kullanılır.
Bunlara ek olarak GPS ve harita uygulamaları, tomografi ve MR görüntüleme teknikleri, otonom sürüş teknolojisi, hava tahminleri, video oyunları gibi yaşamın bir çok alanında algoritmalar kullanılmaktadır.

Algoritma Oluşturma

Algoritma oluşturma teknikleri, belirli bir problemi çözmek veya bir görevi yerine getirmek için mantıklı bir sıra ve işlem dizisi oluşturmanıza yardımcı olur.
Problem Analizi: İlk adım, çözmeniz gereken problemi net bir şekilde ortaya koymaktır. Problemin gereksinimlerini ve sınırlarını anlamak, algoritma oluşturmanın temelidir. Problemi tanımlayın, girdi ve çıktı gereksinimlerini belirleyin.

Akış Diyagramları: Problem çözme sürecinizi anlamak ve görselleştirmek için akış diyagramları kullanabilirsiniz. Bu diyagramlar, işlemleri ve kararları temsil eden şekilleri ve bağlantıları içerir. Akış diyagramları, algoritmanın yapısını anlamada yardımcı olur.

Örnek: Basit bir problemin çözümü aşağıdaki gibi bir akış diyagramı yoluyla ifade edilebilir. Örneğin, "Televizyon Çalışmıyor" probleminin olası çözümü için bir akış diyagramı şu şekilde olabilir:
Mantıksal Adımlar: Algoritma oluştururken mantıksal adımları belirlemek önemlidir. Problemi küçük ve işlenebilir adımlara bölmek, daha karmaşık bir görevi yönetilebilir hale getirir.

Mantıksal Operatörler: Algoritmanızda "EĞER-DEĞİLSE" ifadeleri ve mantıksal operatörler (VE, YA DA, DEĞİL) kullanarak karar noktalarını ve koşulları tanımlayabilirsiniz. Bu, farklı durumlarda farklı işlemlerin uygulanmasını sağlar.

Döngüler: Problemi tekrarlayan işlemlerle çözmek için döngüler kullanabilirsiniz. Bu döngüler belirli bir işlemi belirli bir sayıda veya belirli bir koşul sağlandığı sürece tekrarlamak için kullanılır.

Toplama ve Saklama: Algoritmada geçici değişkenler kullanarak bilgi toplama ve saklama işlemleri yapabilirsiniz. Bu, geçici sonuçları ve verileri geçici olarak saklamak için kullanılır.

Yapay Zeka Algoritmaları

Yapay zeka (Artificial Intelligence - AI) algoritmaları, insan zekasını taklit etmeye veya görevleri otomatikleştirmeye yönelik tasarlanmış algoritmalar grubunu ifade eder. Yapay zeka algoritmaları, karmaşık problemleri çözmek, veri analizi yapmak, kararlar vermek ve öğrenme gibi görevleri yerine getiren bilgisayar programlarıdır. Bu algoritmalar, genellikle büyük miktarda veriyi işleyebilme, karmaşıklığı yönetebilme ve öğrenebilme yeteneği ile bilinirler.

Yapay zeka algoritmalarının bazı temel türleri şunlardır:

Makine Öğrenmesi (Machine Learning):
Makine öğrenmesi, algoritmaların veri analizi yaparak öğrenmesine ve sonuçları iyileştirmesine olanak tanır. Örnekler aracılığıyla desenleri tanımak, tahminlerde bulunmak ve kararlar almak gibi işlevleri yerine getirebilir.

Derin Öğrenme (Deep Learning): Derin öğrenme, yapay sinir ağlarını kullanarak karmaşık problemleri çözmek için geliştirilen bir makine öğrenme alt dalıdır. Ses tanıma, görüntü tanıma, doğal dil işleme ve otomatik sürüş gibi alanlarda büyük başarılar elde etmiştir.

Genetik Algoritmalar (Genetic Algorithms): Genetik algoritmalar, biyolojik evrimi temel alarak problemleri optimize etmek için kullanılır. Bu algoritmalar, popülasyonlar oluşturur, çaprazlar, mutasyonları simüle eder ve en iyi çözümleri seçer.

Destek Vektör Makineleri (Support Vector Machines): Bu algoritma, veri madenciliği ve sınıflandırma problemlerinde kullanılır. İki sınıf arasındaki ayrımı en iyi şekilde bulmaya çalışır.

Karar Ağaçları (Decision Trees): Karar ağaçları, kararlar vermek ve sınıflandırmak için kullanılır. Veri madenciliği ve sınıflandırma görevlerinde yaygın olarak kullanılırlar.

Doğal Dil İşleme (Natural Language Processing - NLP): NLP algoritmaları, metin ve konuşma verilerini işlemek, anlamak ve yorumlamak için kullanılır. Metin madenciliği, dil çevirisi ve konuşma tanıma gibi uygulamalarda kullanılırlar.

Örüntü Tanıma (Pattern Recognition): Örüntü tanıma algoritmaları, görüntü ve ses verilerindeki desenleri tanımak ve sınıflandırmak için kullanılır.

Yapay zeka algoritmaları, genellikle büyük miktarda veriye dayalı olarak öğrenme yeteneğine sahiptirler. Bu algoritmalar, verileri analiz eder, desenleri tanır ve gelecekteki kararları bu öğrenilen bilgilere dayalı olarak verir. Yapay zeka, otomasyon, veri madenciliği, nesnelerin interneti, sağlık hizmetleri ve daha pek çok alanda kullanılmaktadır. Bu algoritmaların başarısı, veri kalitesi, eğitim süreçleri ve tasarımı gibi faktörlere bağlıdır.

Algoritmalar, bilgisayar biliminden matematik ve günlük yaşamın pek çok yönüne kadar geniş bir alanda hayatımızın ayrılmaz bir parçasıdır. Her gün kullandığımız teknolojilerden, bilimsel araştırmalara, iş süreçlerinden oyun geliştirmeye kadar birçok alanda algoritmalar kullanılır. Algoritmalar, karmaşıklığı yönetilebilir adımlara dönüştürme, problemleri etkili bir şekilde çözme ve verileri işleme konusunda güçlü araçlardır. Bilgisayarlar ve dijital sistemler, algoritmaların doğru ve hızlı uygulanmasını gerektirir, bu nedenle algoritmaların önemi giderek artmaktadır. Algoritmaların anlaşılması ve tasarlanması, bilgisayar bilimcileri, mühendisler ve matematikçiler için temel bir beceridir ve gelecekteki teknolojik gelişmelerin de temelinde mutlaka bulunacaklardır.