Yazılım Kavramları

Algoritma Nedir, Ne İşe Yarar, Nasıl Yazılır?

Algoritma Nedir? Bu makalemizde, önemi büyük fakat anlaşılması biraz kafa karıştırabilen Algoritma konusunu ele aldık. Algoritma mantığını olabildiğince basit, anlaşılabilir ve kapsamlı bir şekilde anlatmaya çalıştık. Programlama kavramıyla yeni tanışıyorsanız eğer, yazılımda ki “Algoritma” kavramının daha iyi anlaşılması adına Programlama Nedir? Programlama Dili Nedir? yazımızı okumanız, “Algoritma Nedir” sorusunun cevabını daha anlaşılır kılacaktır. Dilerseniz şimdi makalemize geçelim.

Bilgisayar Yazılımlarının Genel Amacı

“Algoritma Nedir” sorusundan önce, kendimize sormamız gereken çok önemli başka bir soru var aslında. Algoritma kavramının da temeline inmek, daha iyi anlamak için yardımcı olacak basit bir soru.

Bilgisayar yazılımlarının genel amacı nedir?

Ya da neden kod yazıyoruz biz? Niçin program yazarız? Bu soruya belki birçok farklı cevap gelebilir. Mesleki gereklilikten olabilir. Kendi fikirlerini ortaya çıkarmak yada sadece kod yazmaktan keyif aldığı için bile kişilere göre değişebilen farklı cevaplar olabilir. Ama herkes için ortak olan bir cevap verecek olursak; Bilgisayar yazılımlarının genel amacı, var olan bir probleme çözüm getirmektir, diyebiliriz. Peki nedir bu problem?

Yazılımcı için Problem Nedir?

Bu problem her şey olabilir. İnsan hayatını kolaylaştıran herhangi bir program, alışverişte zaman kazandıran yeni bir uygulama, bir şirketin veri kayıtlarında oluşan bir sıkıntı veya mühendislik alanında kapsamlı bir proje vb. gibi aklınıza gelebilecek her türlü programı buna örnek olarak gösterebiliriz. Yapmak istediğiniz bir oyun fikri bile problemdir aslında. Çünkü oyunda bir programdır ve bu oyun fikrini koda dökmeden önce iyi analiz etmeniz gereklidir. Yani aslında koda dökmek istediğiniz her program fikri sizin için bir problemdir. Bu yüzden algoritma tanımına geçmeden önce dikkat etmemiz gereken en önemli nokta,

Problemin, iyi belirlenmesi ve anlaşılmasıdır.
algoritma nedir
Hmm.. Problem Nedir ? Algoritma Nedir ?

Biz burada problemlere, bir yazılımcının düşünme ve çözme mantığıyla bakmaya çalışacağız. İşte “Algoritma Kavramı” tam da bu noktada karşımıza çıkıyor. Peki algoritma nedir? Hadi gelin artık bu sorunun cevabına bakalım.

Algoritma Nedir?

Algoritma aslında sadece yazılım dünyasına ait olan bir terim değildir. Gündelik hayatımızda karşılaştığımız sorunlarda, hepimizin çoğu zaman farkında olmadan kullandığı bir çözüm yöntemidir.

Algoritma için en basit şekilde, belirli bir problemi çözmek veya bir hedefe ulaşmak için tasarladığımız yol tanımını yapabiliriz. Literatüre uygun başka bir tanım yapacak olursak da; Algoritma, bir problemin çözümü için, adım adım uygulanan kurallar dizisidir diyebiliriz.

Hadi bir örnek verelim. Şuan da aklıma bugün konuştuğum ehliyet almak isteyen bir arkadaşım geldi. Yani örneğimizin problemi, “Ehliyet Nasıl Alınır?” sorusu olucak. “Ehliyetle algoritma ne alaka?” demeyin. Şimdi ilk olarak kendinizi ehliyet almak isteyen biri yerine koyun. Çat diye gidince ehliyeti direk vermiyorlar maalesef. Önce, sırasıyla takip etmemiz gereken adımlar var.

Bizim hedefimiz yani ulaşmak istediğimiz nokta, ehliyetimizi alıp araba sürebilmek. Bu yüzden, ilk olarak yapmamız gereken bir sürücü kursu bulmak değil mi? Ardından sırasıyla,

  • Kurs için gerekli evraklar ve ücreti hazırlar,
  • Kursa kayıt olursunuz.
  • Belirli bir süre teorik eğitim alır,
  • Ardından yazılı sınava girersiniz.
  • Eğer başarılı olursanız direksiyon dersleri başlar.
  • Belirli bir süreç sonra araba sürmeyi öğrenirsiniz.
Burada araba sürmeyi öğrenmenizde ayrı bir algoritma aslında ama bunu da bu makaleden sonra kendiniz oluşturmayı deneyebilirsiniz. Devam edersek;
  • Araba sürmeyi öğrendikten sonra, direksiyon sınavına girip,
  • Başarılı olduğunuz takdirde ehliyet almaya hak kazanırsınız.
  • Son olarak yine evrak işlerini vs. tamamlayıp ehliyetinizi alabilirsiniz.

İşte algoritma, gündelik hayattan örnekle en basit şekilde bu aslında. Ehliyet almak bizim ulaşmak istediğimiz nokta.

Bunu başarmak içinde uyguladığımız adımlar kümemizde bizim algoritmamız oluyor. Peki bu adımlar kümesini nasıl yazabiliriz? Hadi hemen basitçe ehliyet alma algoritmasını oluşturalım.

Ehliyet Alma Algoritması

  1. Başla.
  2. Sürücü kursu ara.
  3. Kursun şartları uyuyorsa 4. Adıma git. Uymuyorsa 2. Adıma dön.
  4. Evrakları ve ücreti hazırla.
  5. Evraklar ve ücret hazır mı? Hazırsa 6. Adıma, değilse 4. Adıma git.
  6. Kursa kayıt ol.
  7. Derse git.
  8. Dersler bitti mi? Bittiyse 9. Adıma git. Bitmediyse 7. Adıma dön.
  9. Yazılı sınav için başvuru yap. Eğer 5. başvurun ise 2. Adıma dön.
  10. Sınava gir.
  11. Puanın 70 üzeriyse 12. Adıma git. 70 altındaysa 9. Adıma dön.
  12. Direksiyon dersine git.
  13. Direksiyon dersleri bitti mi? Bittiyse 14. Adıma, bitmediyse 12. Adıma git.
  14. Direksiyon sınavına başvuru yap. Eğer 5. başvurun ise 2. Adıma dön.
  15. Direksiyon sınavına gir.
  16. Başarılı olduysan 17. Adıma git. Başarısız olduysan 12. Adıma dön.
  17. Ehliyet almak için gerekli evrakları hazırla.
  18. Evraklar hazır mı? Hazırsa 19. Adıma, değilse 17. Adıma git.
  19. Ehliyet almak için gerekli yerlere müracaat et.
  20. Ehliyetin hazırlanmasını bekle.
  21. Ehliyetin hazırlandı mı? Hazırsa 22. Adıma, değilse 20. Adıma git.
  22. Ehliyetini alabilirsin, geçmiş olsun 🙂
  23. Dur

İşte en basit haliyle gündelik bir işin algoritmasını bu mantıkta oluşturabiliriz. Yani bilgisayarın çözmesini istediğimiz problemleri, bilgisayara bu mantığı kullanarak, adım adım anlatacağız aslında. Birde belirtmek gerekirse, ilk ve son adımda bulunan “Başla – Dur” komutlarını, yazdığımız programın sınırlarını belirtmek için bilgisayara verdiğimiz emirler olarak düşünebilirsiniz.

algoritma mantigi
Algoritma Nedir? Algoritma Nasıl Oluşturulur?

Bu anlattıklarımızdan da çıkarabileceğimiz üzere, “Algoritma” dediğimiz kavram aslında, belirli bir problem üzerine üretilen bir çözüm yoludur”.

Peki kendimiz nasıl algoritma yazarız? Yazarsak dikkat etmemiz gerekenler nelerdir? Hadi gelin biraz da “Algoritma Nasıl Yazılır?” sorusu üzerine konuşalım.

Algoritma Nasıl Yazılır?

Algoritma kavramı, algoritma yazmak, şimdiye kadar size korkutucu ve karmaşık gelmiş olabilir. Ama aslında işin temel mantığı çok basittir. Bu temel mantığa iyi hakim olmadan, ileri seviye algoritmaları anlamaya çalışırsanız işte o zaman algoritma konusu başınızın belası olabilir. O yüzden olduğunca basit örnekler ile pratik yaparak kendi algoritmalarınızı, çözüm yollarınızı oluşturmanız en sağlıklısı olacaktır.

Benim çözüm yolumla sizin çözüm yolunuz aynı olmayabilir. Aynı problem üzerine siz daha detaylı ya da daha sade bir algoritma çıkarabilirsiniz. Örneğin bir rubik küpü farklı farklı yollarla çözebilirsiniz.

rubik küp algoritma
Rubik Küp ve Algoritma

Sizin algoritma oluştururken dikkat etmeniz gereken en önemli husus, probleminizde ki her ihtimalin düşünülmüş olması. Yani yazdığınız algoritmada sonucu belirsiz bir adım olmamalıdır. Bu yüzdende problemde karşınıza çıkabilecek her ihtimali düşünmeniz gereklidir.

Şimdi buna örnek verirsek, 9. ve 14. adımımızda  “5. başvurun ise 2. adıma dön” diye bir koşul var. Şuan da bildiğim kadarıyla ehliyet sınavlarının her birinde 4 defa girme hakkı bulunmakta. Eğer ki siz böyle bir program yazarken bu ihtimali göz önünde bulundurmayıp atlarsanız; sınava başvuru yapan kişi, başarısız olma sayısına bakılmaksızın, defalarca sınava girebilecektir. Haliyle bu da bizim istemediğimiz bir durum olur.

Algoritmaların en önemli özelliği, problemdeki her ihtimalin düşünülerek sonuca gidilmesidir.

Konuyla ilgili internette bulup tekrar düzenlediğim bir algoritma örneği var. Paylaşmazsam olmaz.

algoritma örnek, algoritma kavramı
Alarm Çaldı Algoritması (Mizahi)

Evett.. Biraz güldük, eğlendik. Şimdi devam edelim.

Baktığımızda algoritmanın bize sağladığı en büyük fayda, programları daha kolay ve daha sağlıklı bir şekilde oluşturabilme imkanıdır.

Algoritmayı şekiller kullanarak, yani akış şeması yöntemiyle yada ehliyet örneğimizde olduğu gibi konuşma diliyle de ifade edebiliriz. Konuşma diliyle yazdığımız algoritmalar da matematiksel ve mantıksal ifadelerde yer alabilir. Hemen en klişe örneklere bakalım.

İki Sayının Toplamı Algoritması

  1. Başla
  2. X değerini gir.
  3. Y değerini gir.
  4. Toplam = + Y
  5. Toplam değerini ekrana yaz.
  6. Dur

Sanırım verilebilecek en basit algoritma örneğini vermiş olduk. Birde sıkça karşılaşılan üniversite derslerinin harf notunu hesaplama algoritmasının örneğine bakalım. Vize notunu %40, Final notunu %60 olarak alacağım. Harf aralığını kafama göre belirleyeceğim. Hadi yapalım.

Harf Notu Hesaplama Algoritması

  1. Başla
  2. Vize notunu gir.
  3. Final notunu gir.
  4. Ortalama = (Vize * 0.4) + (Final * 0.6)
  5. Ortalama >= 80 ise harfNotu = “AA” 13. Adıma git.
  6. Ortalama >= 75 ise harfNotu = “BA” 13. Adıma git.
  7. Ortalama >= 70 ise harfNotu = “BB” 13. Adıma git.
  8. Ortalama >= 65 ise harfNotu = “CB” 13. Adıma git.
  9. Ortalama >= 60 ise harfNotu = “CC” 13. Adıma git.
  10. Ortalama >= 55 ise harfNotu = “DC” 13. Adıma git.
  11. Ortalama >= 50 ise harfNotu = “DD” 13. Adıma git.
  12. Ortalama <= 50 ise harfNotu = “FF” 13. Adıma git.
  13. harfNotu değerini ekrana yaz.
  14. Dur

Son olarak aklıma gelen basit ama tatlı bir algoritma örneği daha. Problemimiz, “sadece rakamlardan oluşturulmuş, 4 haneli bir şifreyi kırmak.” Nasıl bir algoritma yazarız?

  • Hemen cevaba bakmayın. “Siz olsanız nasıl bir algoritma yazarsınız?” bunun üzerine düşünün biraz. Farklı ama doğru çözüm yollarını kabul ettiğimi de unutmayın.

İpucu İçin Tıklayın.

  • Bulmamız gereken şifre sadece rakamlardan oluşan ve 4 haneli bir şifre. Dolayısıyla buradan da kırmak istediğimiz sistemin şifresinin “0000” ile “9999” değer aralığında olduğunu çıkarabiliriz.
  • Bu yüzden başlangıç değeri 0000 olan x isimli bir değişken tanımlayabiliriz.
  • Sistemin şifresi ile x değerini karşılaştırarak eşitliği kontrol eden ve x değeri şifreye eşit olasıya kadar birer sayı arttıran bir yapı kurulabilir.

Şifre Kırma Algoritması

  1. Başla
  2. x = 0000
  3. Sisteme x değerini gönder.
  4. Eğer x değeri şifreye eşit ise 6. Adıma git.
  5. x <= 9999 ise (x = x + 0001) işlemini yap. 3. Adıma dön.
  6. x değerini ekrana yaz.
  7. Dur

Burada mesela sistemin şifresi “9000” ise, programımız 9000. denemede şifreyi bulacaktır. Şuan ki günümüz bilgisayarları için bu değerde bir işlem, yani 9000 adım çok hızlı bir şekilde çözülebilir. Fakat sayımız 4 basamaklı değilde 8-10 basamaklı olsaydı, bu işlemi süper bilgisayarlar olmadan, aynı algoritmayla çözmek herhalde bir ömür alırdı. İşte algoritmanın önemi tam da bu noktada ortaya çıkıyor.

Algoritma Çeşitleri Nelerdir?

Az önce ki örneğimiz basit ve sayı aralığımız küçük olduğundan, programlamada kullandığımız kontrol yapıları veya döngüler ile bu programı rahatlıkla yazabiliriz. Biz bu örnekte 9999 farklı ihtimalden bir tanesini bulmaya çalıştık. Yani bir nevi arama yaptık. Fakat az önce söylediğim gibi, 8-10 basamaklı bir örnekte bu aramayı yapmak çok uzun zaman alacağından, ihtiyaca göre algoritma çeşitleri geliştirilmiş ve hala geliştirilmektedir.

Algoritma konusunda ilerledikçe, algoritmaların maliyeti, performansı gibi kavramlar ve farklı algoritma çeşitleri karşınıza çıkacaktır. Şimdilik ön bilgi olması açısından bu algoritma çeşitlerinden sıkça kullanılan bazılarına örnek vermek gerekirse;

  • Arama Algoritmaları,
  • Sıralama Algoritmaları,
  • Veri tabanı Algoritmaları,
  • Sıkıştırma Algoritmaları,
  • Dinamik Programlama Algoritmaları,
  • Şifreleme Algoritmaları,
  • Optimizasyon Algoritmaları

gibi algoritma çeşitlerinden söz edebiliriz. Algoritma türleri biraz sonraki bir konu olduğu için, bu makalemizde fazla değinmek istemedim. Ama ilerleyen zamanlarda bu konu üzerine yeni yazılarımız gelecektir.

Tavsiyeler

Ufaktan yazımızın sonuna gelmiş bulunmaktayız. Bence güzel bir giriş yapmış olduk algoritma konusuna. “Peki daha daha? Yok mu şöyle bu işe yeni başlayanlar için tavsiyen falan” derseniz, tabi ki var. Olmaz olur mu?

1- Basitte olsa bir programı yazmak için hemen klavyeye hücum etmeyin!

Program yazmadan önce yazacağınız programlarda koda direk başlamanız, yani sadece yazarken düşünmeniz, hatalara ve yavaş kod yazmanıza sebep olabilir. Bu yüzden;

2- Plan Yapın!

Yani direk klavye başına geçip kodlamaya başlarsanız, yazdığınız kodda bütünlüğü sağlamakta sıkıntı yaşayabilirsiniz. O yüzden kod yazmaya geçmeden önce, programda hangi değişkenlerin olacağı, programın hangi işlemleri yapacağı gibi planlamaları yapmanız yani algoritmayı kurmanız ortaya daha kaliteli bir kod çıkaracaktır.

3- Pratik!

İlk iki maddeyi anlamlı kılan ise “Pratik” yapmak. Sanırım bunun için çok fazla açıklamaya gerek yok. Zamanla, kodlama yaptıkça algoritma yeteneğiniz gelişecektir.

Elimden geldikçe anlaşılır örneklerle birlikte “Algoritma Nedir” sorusuna cevap vermeye çalıştım. Algoritma kavramı, bir bilgisayar ya da yazılım mühendisi için çok önemli bir konu. Bu yüzden olabildiğince detaylı araştırıp, basit seviyeden ileri seviyeye doğru olan algoritmaları inceleyip ve de her zaman ki gibi bol bol pratik yapmanız, güzel sonuçlar almanızı sağlayacaktır. Yeni bir makaleye dek kendinize iyi bakın! İyi Çalışmalar!

Önümüzdeki iki yılda karşımıza çıkacak fırsatları abartır, 10 yıl sonra çıkacakları ise küçültürdük. Kendinizi kandırmayın; zamanında yapmanız gerekenleri yapın, hareketsiz kalmayın. -Bill Gates

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Kapalı