Herkese merhabalar!! Algoritma ve programlama dünyası serisinde bir önceki olan ilk bölümünde öncelikle bilgisayar dünyasına bir giriş yaptık ve daha sonra programlama dillerini ne işe yaradığını öğrenip, IDE kavramından bahsettik. Bu yazıdan önceki bölüm olan Algoritma ve Programlama Dünyası — Giriş yazısını daha okumadıysanız bu linke tıklayarak ulaşabilirsiniz.
Bu bölümde ise Algoritma Nedir? sorusunun cevabını alacağız. Ayrıca, nasıl algoritma tasarlamamız gerektiğini günlük hayattan örenekle vererek işleyeceğiz. Hadi Başlıyalım!!
Algoritma Nedir?
Temelde algoritmalar, yararlı bir şey yapmak veya bir sorunu çözmek için adım adım izlenen bir dizi talimattır. Diğer bir deyişler algoritma, günlük hayatta yapacağımız işler için hazırladığımız planların, programlama dillerindeki karşılığıdır. Örneğin kek yapmak için kek tarifini günlük hayatta uyguladığımız küçük bir algoritma olarak düşünebilirsiniz.
Programlamada, algoritmalar bilgisayarlara eylemleri tamamlamak için ardışık bir kılavuz sağlar. Bir görevin tam olarak nasıl tamamlanacağını özetleyen kesin bir talimat listesinden oluşurlar.
Bir problemi çözmek için mutlaka kullanabileceğiniz birden fazla yol vardır. Bu durumda en mantıklısı kolay ve kısa yolu seçmek olabilir. Hadi bunu ufak bir örnekle inceleyelim. Mesela arabayla İstanbul’dan İzmir’e gideceğiz ve bunun için birden fazla yol var. Aşağıdaki resimde de görüldüğü gibi Google Maps bize 3 farklı yol öneriyor. Bizim trafiği ve otoyol ücretlerini de hesaba katarak en ucuz ve kısa yolu seçmemiz gerekir.

Bu durum algoritma için de geçerlidir. Aynı problemi çözebilen belki 2 belki daha fazla algoritma olabilir. Bu durumda yapılması gereken hangi algoritmanın daha hızlı ve verimli çalıştığını tespit etmek olmalıdır.
Şunu söylemeliyim ki; bir programlama dilinin tüm özelliklerini bilebilirsiniz. Fakat nerede ne yapacağınızı, hangi sırayı izleyeceğinizi bilmiyorsanız, yani bir problemi çözmek için algoritma adımlarını çıkartmadan, bu bilgiyi uygulamaya dökmeden kod yazmana başlarsanız oldukça güç ve zaman kaybedeceksiniz.
Algoritma Tasarımı
Bir problemin çözülmesi için öncelikle algoritmanın tasarlanması gerektiğinin öneminden yukarıda bahsekmiştik. Algoritmalar sıralı adımlardan oluşurlar. Her bir adım alt alta yazılmalı ve yukarıdan aşağı doğru ilerlemelidir. İlk adım Başla adımı son adıma ise Bitti adımıdır ve bu adımda program sona erer.
Algoritmaları çeşitli şekillerde ifade edebiliriz. Bu çeşitleri birazdan görücez fakat ifade şekli nasıl olursa olsun, algoritma daima özdeş ve kararlı olmalıdır.
Bir algoritmanın genel görünüşü aşağıdaki gibidir:
- Başla
- Tanımlamalar
- Yapılıcak işlemler
- Çıktıların sunumu
- Bitti
Yukarıda da belirtidiği gibi, program Başla ile başlıyor Bitti ile bitiyor.
Örneğin, iki sayının çarpılacağı bir algoritma tasarlayacak olalım. Bu hesaplamada çarpılacak iki sayıya ve sonucun aktarılacağı başka bir sayıya ihtiyacımız vardır. Algoritmanın başlıyacağı yer bildirildikten sonra çözüm için ihtiyacımız olan toplamda üç sayı, ikinci adımda tanımlanır. Üçüncü adımda ise ilk iki sayı çarpılır ve sonuç üçüncü sayıya aktarılır ve tüm hesaplama işlemi bitmiş olur. Dördüncü adımda ise çıkan sonucu kullanıcıya gösteririz. Son olarak algoritmanın bittiği yer bildirilir.
Günlük Hayattan Örnekler:
Kahvaltılık Mısır Gevreği Hazırlamanın Algoritması — Sabahları işe veya okula yetişme derdiyle hızlı bir şekilde hazırlayıp yediğimiz kahvaltılık gevreği hazırlamak için bir algoritma tasarlayalım. Önce bir düşünelim bizim hangi malzemelere ihtiyacımız var.
- Kase
- Süt
- Mısır Gevreği
- Kaşık
Hadi şimdi algoritmayı tasarlayalım.
- Kase ve mısır gevreğini al.
- Kasenin içine mısır gevreğini boşalt.
- Sütü al.
- Sütü mısır gevreğiyle dolu olan kaseye doldur.
- Kaşığı al ve yemeğe başla.
Her adım olabildiğince kısa, öz ve anlaşılır yazıp uygulamaya dökülmesi için hazır hale getirdik. Herkes muhakkak kahvaltılık mısır gevreği hazırlayabilir. Fakat bizim amacımız, olabildiğince okuyan insanların, o algoritma hakkında hiçbir fikri olmamasına rağmen anlayabilir olmasıdır.
Şimdi de iki sayının çarpımını algortimasını tasarlayalım:
- Başla
- Birinci sayıyı oku (A) → Tanımlama-1
- İkinci sayıyı oku (B) → Tanımlama-2
- İki sayıyı çarp (A*B) → Yapılıcak işlem
- Sonucu ekrana yazdır → Çıktının sunumu
- Bitti
Dikkat ederseniz, mısır gevreği örneğinde olmayan en başta Başla ve en sonda Dur olarak iki adet adımımız oldu. Bu iki adımın amacı nerde başlayıp nerde bitirdiğimizi görmektir ve bundan sonraki tasarlayacağımız tüm algoritmalarda bu iki adımı ekliyeceğiz.
Problem Çözme Teknikleri:
Algoritmanın ne olduğunu ve birkaç çok basit örnek üzerinden nasıl tasarlamamız gerektiğini öğrendik. Şimdi ise problem çözerken uygulamamız gereken unsurlardan bahsedeceğiz.
Probleme hakimiyet — Bir algoritma hazırlıyorsak ortada bir problem var demektir. Bu problemi çözüme kavuşturmaya başlamadan önce en önemli unsur probleme her yönüyle hakim olmaktır. Bu hakimiyeti sağlayamazsak ileride ciddi aksaklıklar ile karşılaşırız. Üstelik, çalıştırma ortamında yazım hatası olmadığından dolayı kod çalışacaktır fakat çeşitli mantık hataları ile karşılaşırız.
İhtiyaçların tespiti — Elbette algoritma hazırlarken çeşitli formül ve değişkenlere ihtiyacımız olacaktır. Eğer bu ihtiyaçların eksikliğini programın ortasında farkedersek birçok kod satırını silmek durumunda kalabiliriz. Bunu önlemek ve daha anlaşılır bir algoritma tasarlamak için gereksinimler önceden tespit edilmeli ve algoritma ona göre tasarlanmalıdır.
Alternatif algoritmaların farkındalığı — Daha önce de vurguladığım gibi bir problemin birden fazla çözüm yolu vardır. Bunları farkedip bizim için en verimli algoritma tespit edilmeli ve çözüm için uygulamaya koyulmalıdır.
Kodlamaya geçiş — Tasarladığımız algoritmanın verimli ve eksiksiz olduğunu düşünüyorsak artık kodlama aşamasına geçilmeli. Bu aşamada büyük ihtimal çeşitli hatalar alınacaktır. Bu hatalar giderilmeli ve algoritma ile yazılan kodun uyumluluğu kontrol edilmelidir.
Kod iyileştirme — Kod uygulamaya alındıktan sonra bazı gereksiz unsurlar farkedilebilir. Bu unsurlar silinip bellek ve işlemcinin gerektiğinden fazla kullanıldığı durumlar analiz edilir ve çeşitli iyileştirmeler yapılır.
Eğer bol bol problem çözerseniz, algoritma tasarlarsanız zamanla yukarıdaki kavramlar farkında olmadan yaptığınız şeyler haline gelecektir.
Algoritma İfade Çeşitleri:
Algoritmalar temelde 3 farklı şekilde ifade edilebilir.
- Metin ile ifade
Teknik terimlerin çok kullanılmadığı, konuşma diline yakın bir şekilde tasarlanan ifade çeşitidir. Mısır gevreği ve iki sayının çarpımı algoritması örneklerinde tasarladığımız algoritmalar bu ifade şekline örnektir.
- Pseudo Code (Kaba Kod) ile ifade
Konuşma diliyle birlikte teknik terimlerin de kullanıldığı ifade şeklidir. Algoritma tasarımında yaygın olarak kullanılır. Kullanılması zor kodlar ya da terimler yerine Yazdır, Oku gibi kelimeler kullanılabilir.
Terimlerin ve operatörlerin kullanılmasına izin veren bu model sayesinde zor matematiksel hesaplamalar kolaylıkla ifade edilebilir.

- Akış diyagramı ile ifade
Algoritma tasarımını şekiller ve oklar ile ifade edilerek anlatıldığı tasarım şeklidir. Her bir işlem için kendine özel şekiller vardır. Bu şekiller arasında akışı gösteren oklar mevcuttur. Bu diyagramın hazırlanması zor olsada problemin çözümünü anlamayı çok daha kolay hale getiriyor.

Akış diyagramları konusunu ilerleyen bölümlerde daha detaylı ele alacağız.
Bu yazıda algoritma nedir ve nasıl tasarlanır sorularının örneklerle cevabını verdik. Vakit ayırıp okuduğunuz için teşekkür ederim. Serinin bir sonraki bölümünde görüşmek üzere.
Kaynak: Medium