Bu yazımızda Algoritma Nedir? Niçin Kullanılır? gibi konuları işleyeceğiz. Sonrasında güzel bir algoritma örneği ile devam edeceğiz. Algoritma, bir sorunu çözmek veya bir görevi tamamlamak için bir dizi talimattır. Programlama algoritması, bir bilgisayarın sorunlarını çözmek için kullandığı bir tür reçetedir.
Programlama Algoritması Nedir?
Peki genel tanımı öğrendiğimize göre, gelin programlama algoritmasına yakından bakalım.
Bir programlama algoritmasını, bilgisayarın bir sorunu çözmesi veya bir hedefe ulaşması için gereken adımları tam olarak açıklayan bir tarif olarak düşünebilirsiniz. Hepimiz yemek tarifleri görmüşüzdür – tarif edilen yemeğin nasıl yapılacağına dair gerekli malzemeleri ve bir dizi adımı listelerler. Bilgisayar dilinde, bir tarifin adı prosedürdür ve içeriklere girdi denir. Bilgisayarınız prosedürünüze bakar, harfi harfine takip eder ve çıktı olarak adlandırılan sonuçları görürsünüz. Bir programlama algoritması, bir şeyin nasıl yapılacağını açıklar ve bilgisayarınız bunu her seferinde tam olarak harfi harfine uygulayacaktır.
Ancak, bir programlama algoritmasının bilgisayar kodu olmadığını unutmamak önemlidir. Genelde programcı hangi dilde çalışıyorsa, o dilde algoritmasını kurabilir. Algoritmaların bir başlangıcı, bir ortası ve bir sonu vardır. Bir diğer önemli özelliği ise içinde sadece görevi yerine getirmek için ihtiyacınız olanı içerir. Okuyan birinin merak edebileceği, bilgisayar dilinde genellikle belirsiz olarak adlandırılan, net olmayan hiçbir şey içermez.
Genel. anlamda her zaman bizi bir çözüme götürür ve karşılaştığımız problemler için en verimli çözüm olmaya çalışmaktadırlar. Üzerinde çalışırken adımları numaralandırmak genellikle iyi bir fikir olacaktır. Bazı insanlar ise akış şeması adı da verilen bir diyagram kullanmaktadır.
Programlama Algoritması Örneği
Bir algoritma, metin kullanan adımların bir listesi olarak veya akış şeması adı verilen şekiller ve oklar içeren bir resim olarak yazılabilir. Burada olabildiğince hepsinden kısa örnekler vermeye çalışacağız.

Örneğimizin en üst kısmında, prosedürün tam olarak ne yapmasını istediğimizi (ne daha fazla, ne daha az) belirten, sade bir dil kullanılan adımların yalnızca numaralandırılmış bir listesi olduğuna dikkat edin. Alt kısım aynı algoritmadır ancak bu sefer bir akış şemasında (rota haritası gibi) şekiller ve oklar kullandık, böylece bir okuyucu yolculuğu görselleştirip sistemi aklında daha güzel canlandırabilir. Diagram örneği aşağıdaki gibidir:

Algoritma Türleri
Algoritmalar, bir görevi yerine getirmek için kullandıkları kavramlara göre sınıflandırılır. Birçok algoritma türü olsa da, bilgisayar bilimi algoritmalarının en temel türleri şunlardır:
Algoritma Karmaşıklığı ve Big-O Notasyonu Analizi Notu
Algoritma tasarımında en kritik metrik, veri boyutu
‘e bağlı olarak değişen zaman karmaşıklığıdır (time complexity). Yazılımın ölçeklenebilirliğini ölçmek için kullanılan Big-O Notasyonu, işlem sayısının asimptotik üst sınırını ve algoritmanın büyüme hızını temsil eder.
Temel Karmaşıklık Sınıfları
– Sabit Zaman: Veri setinden bağımsız, doğrudan erişim (Örn: Hash Table lookup).
– Logaritmik Zaman: Veri seti her adımda yarıya iner (Örn: Binary Search).
– Doğrusal Zaman: Veri miktarı ile işlem sayısı doğru orantılıdır.
– Lineerithmic: Verimli sıralama algoritmalarının standardıdır (Örn: Merge Sort, Heap Sort).
– Kvadratik Zaman: İç içe döngüler; veri arttıkça performans hızla düşer (Örn: Bubble Sort).
– Eksponensiyel Zaman: Kombinatoryal problemler ve kaba kuvvet (brute-force) çözümleri.
Gömülü Sistemlerde Pratik Sınırlar
Özellikle kısıtlı kaynaklara sahip mikrokontrolcülerde (Arduino vb.) algoritma seçimi hayati önem taşır. Örneğin, 1000 elemanlık bir veri setinde:
bir algoritma yaklaşık 10 mikrosaniye sürerken,
bir algoritma ~1 milisaniye sürebilir.
Eğer sistemin gerçek zamanlı kontrol döngüsü <10ms ise,
karmaşıklığına sahip bir algoritma ile en fazla 32 eleman işlenebilir; aksi halde sistem gecikmeye girer.
Uzay Karmaşıklığı (Space Complexity)
Zaman kadar kritik bir diğer metrik de bellek kullanımıdır. Örneğin, sadece 2KB RAM kapasitesi olan bir Arduino Uno üzerinde,
ek hafıza gerektiren bir Merge Sort yerine, genellikle
yardımcı alanla (in-place) çalışan QuickSort tercih edilir.
Analiz Türleri: Algoritmalar genellikle Worst Case (En Kötü Durum) senaryosu üzerinden değerlendirilir. Örneğin; İkili arama (Binary Search), sıralı dizilerde
ile çalışırken; veri sıralanmamışsa arama maliyeti
‘e çıkar.
İş Hayatı ve Büyük Veri (Big Data)
Endüstriyel uygulamalarda ve büyük veri setlerinde (
),
karmaşıklığından kaçınmak bir zorunluluktur. Bu seviyedeki veriler için genellikle veriyi hafızaya almadan işleyen Streaming (Online) algoritmalar tercih edilir; çünkü bu yaklaşımlar
zaman ve
veya
alan karmaşıklığı ile optimize edilmiştir.
Böl ve Yönet Algoritmaları
Sorunu aynı türden daha küçük alt problemlere bölün. Bu küçük problemleri çözün ve orijinal problemi çözmek için bu çözümleri birleştirin.
Kaba Kuvvet Algoritmaları
Tatmin edici bir çözüm bulunana kadar tüm olası çözümleri deneyin.
Rastgele Algoritmalar
Soruna bir çözüm bulmak için hesaplama sırasında en az bir kez rastgele bir sayı kullanın.
Açgözlü Algoritmalar
Tüm problem için en uygun çözümü bulma niyetiyle yerel düzeyde en uygun çözümü bulun.
Özyinelemeli Algoritmalar
Bir problemin en düşük ve en basit versiyonunu çözerek orijinal problemin çözümü bulunana kadar problemin giderek daha büyük versiyonlarını çözer.
Geri İzleme Algoritmaları
Sorunu, her biri çözülmeye çalışılabilecek alt problemlere bölün ancak istenen çözüme ulaşılmazsa, onu ileriye taşıyan bir yol bulunana kadar problemde geriye doğru hareket edin.
Dinamik Programlama Algoritmaları
Karmaşık bir problemi daha basit alt problemlerden oluşan bir koleksiyona ayırın, ardından bu alt problemlerin her birini yalnızca bir kez çözerek çözümlerini yeniden hesaplamak yerine ileride kullanmak üzere çözümlerinizi depolayın.
Aslında anlayacağımız üzere günümüzde aktif olarak kullanılan bir sürü algoritma türü bulunmaktadır. Bu noktada probleminizi en iyi şekilde belirlerseniz, bu yöntemlerini her birini kendi projelerinize uygulayabilirsiniz.
IEEE’nin yayınladığı alogirtma standartlarına bu bağlantıdan ulaşabilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
