Algoritma

Algoritmalara Giriş

Selam dostlarım. Bugün sizlere, bildiğim araştırdığım kadarıyla algoritmaları tanımlayacağım. Belki birkaç ufak soru da çözeriz. Bir algoritma nasıl oluşturulur? Adım adım göstereceğim ve bunları nasıl gösterebileceğimizi anlatacağım. Başlarda basit gelebilir. Zaten biz de bunu hedefliyoruz. Fakat ya bu benim ne işime yarayacak, tamam işte bu basit, bunun kodlama ile ne alakası var diyebilirsiniz. Haksız sayılmazsınız basit, anlaşılır ve her insana anlatsanız anlayabileceği kadar açıklayıcı bir anlatımla, bir problemi çözmeyi öğreneceğiz. Unutmadan söyleyeyim, bilgisayarı kafanızda hep ufak bir çocuk gibi hayal edin. Ona en ince ayrıntısına kadar bir konuyu anlatmanız gerekir. Bir hocam bilgisayar hakkında şunu der: “Bilgisayarlar, aptal varlıklardır. Ona her şeyi anlatmanız gerekir.”. Biz de onu yapacağız. Algoritmanın ne olduğu hakkında hadi birlikte bakalım.

Algoritma nedir? Yakından tanıyalım

İlk önce ufak bir teorik tanımını verelim. Geeksforgeeks’ e göre;

Algoritma, beklenen sonuçları elde etmek için bir işin nasıl yürütüleceğini adım adım tanımlayan bir dizi kural/talimat anlamına gelir. 

Gayet başarılı tanım fakat biliyorum kitaplardan teorik bilgilerden sıkıldık. Ulan ben bunu aklımda mı tutacağım der gibisiniz. Yani, ben derdim ?  Aslında şöyle açıklamak istiyorum. Legoları bilirsiniz. Kutudan, Legolar ve bir de el kitapçığı çıkar. Biz bir maket uçak yapacak olacak olursak açarız kitapçığı, bakarız neyi nereye nasıl takacağız. Şimdi Lego’dan uçak yapmayı, problem olarak ele alırsak ve bu problemi çözmek için baktığımız, o el kitapçığı da bizim algoritmamız olurdu. Adım adım, başlangıcı ve sonu olan, doğru sonuç veren ve de tekrar bozup tekrar yaptığımızda hep aynı sonucu aldığımız, harika bir algoritmadır. Algoritmalar, sadece yazılımda kullanılmaz. Günlük hayatımızın içindedirler. Algoritmalar size düşünmeyi öğretir. Bu konuyla ilgili Steve Jobs’ ın  şu sözünü sizlerle paylaşayım.

Kendilerini saygıyla anıyoruz. Asla vazgeçmemeyi ondan öğrenebilirsiniz. Çok dağılmadan devam edelim. Size yine Taner hocamın bir problem anlatımıyla da kafanızda iyice canlanmasını istiyorum.

Odanızdaki ışığı açmak için ne yapmanız gerekir?

Gayet basit bir sorudur. Cevabınız gidip tuşa basmak olurdu değil mi? Doğru fakat eksik. Beyninize kulak verin. Unutmayın adım adım olacak. Cevabı okumadan kendinize bununla ilgili bir algoritma oluşturmaya çalışın.

Bekliyorum…

Pekala denediğinizi varsayıyorum. Gelin adımları nelermiş bakalım.

1- Başla.

2- Işık benim için yeterli mi? Işık yetersiz. Işığı açmak istediğimiz andan itibaren bir dizi işlemler başlıyor. Çok detaya inmeyeceğim genel adımları vereceğim.

3- Ayağa kalk.

4- Anahtara doğru yürü.

5- Kolunu kaldır.

6- Işığın düğmesine bas.

7- Işık yandı mı? Evet yandı.

Her oturan kişi ışık açmak istediğinde bunları yapacaktır. Adımlar tekrarlanabilir. Ve lamba çalıştığı sürece bu algoritma doğrudur. Peki lamba patlamış olsaydı? Bu algoritma doğru sonuç verir mi? 

Sorunumuzu çözmüyorsa bu algoritma demektir ki yanlıştır. Yani algoritmaları oluştururken her durumu göz önünde bulundurmalıyız. Hadi, algoritmamızı geliştirelim. Bu algoritmaya bir şey daha ekleyelim. Işık yandı mı sorusunun cevabına hayır yanmadı dersek.

7- Işık yandı mı? Hayır yanmadı.

8- Kapıdan çık

9- Markete git

10- Lamba al.

11- Eve dön.

12- Kapıdan gir.

13- Lambayı çıkar.

14- Yenisini tak.

15- Düğmeye yürü.

16- Işığı aç.

17- Işık yandı mı? Yandı. Eğer yanmadıysa markete git işleminden itibaren tekrar edecek ta ki o ışık yanana kadar.

Artık algoritmamız bu problem için her durumda çalışacaktır. Hadi bir de bunu herkesin anlayacağı bir gösterimle ifade edelim. Akış diyagramlarını duymamış olabilirsiniz. Akış diyagramları, algoritmaları ifade etmek için, şekillerle temsil edilen bir gösterim türüdür. Sizlere şöyle bir açıklamaları ile bir görsel bırakayım. Buradan şekillerin anlamlarına bakabilirsiniz. Hatta bunları kağıda not alabilirsiniz.

Şimdi bu şekilleri kullanarak nasıl algoritmamızı anlatacağımıza bakalım. İlk yapmanız gerek “Başla” ve “Bitir” ifadelerini yerleştirmektir (Terminator). Daha sonrasında yazdığımız işlem adımlarına göre eğer karar (decision) varsa baklava dilimini ve eğer işlem(Process) varsa o kurulacaktır.

Bakalım bizim basit algoritmamız neye benziyor. Bunu kendi kendinize çözmeye çalışın. Daha sonra bakalım. Problemimiz ışığı açmak olsun ve ne olursa olsun ışığın yanacağından eminiz. Yani patlama gibi bir durumu değerlendirmiyoruz.


Algortima’ nın tanımını hatırlayalım ve akış diyagramımıza bakalım. Probleme göre, zaten ışığın yanmama durumu olmayacaktır. O halde, inceleyelim. Adım adım çözümler belirtilmiş mi? Sonuca ulaşılmış mı? Yine tekrarlanabilir mi? Her tekrarda doğru sonuca ulaşıyor mu? Problemin tüm isterlerini karşılıyor mu? Cevaplarımız evet ise bu algoritma doğrudur. İlerde bu algoritmaları inceleyeceğiz. Algoritmalar arasında en optimize olanı bulmaya çalışacağız.

0 Yorum
Yorum Yap
Batuhan Önder
Merhaba, Ben Batuhan Önder

Her zaman ilk olmak gibi bir zorunluluğumuz yoktur. Fakat en iyisi olmak gibi bir hedefimizin olması zorunluluktur.

Son Paylaşımlar
Bizi takip edin!

Gelişmelerden daha hızlı haberdar olmak için sosyal medya hesaplarımızı takip edin.