Algoritmaya Giriş #1 - Algoritma Nedir?
Yazılım dünyasının yapıtaşı diyebileceğimiz kavramlardan birisi olan "algoritma" kavramı, 9. yüzyılda yaşamış bir matematikçi olan El-Harezmi'nin isminden türemiştir. Kelime anlamı olarak "bir sorunun parçalara ayrılan çözüm yolu" demektir. Algoritma kavramı genel olarak yazılımda kullanılsa da, yazılıma aslında hayatımızın içinden girdiğini söylemek mümkündür. Yazılım da bir nevi matematikten türediğine göre, hayatımızdan önce matematiğe, daha sonra da yazılıma geçmiştir gibi bir önermede bulunulabilir.
Bir kutuyu yerden alıp daha yüksek bir yere koymak istediğinizi düşünün. Bunun için yapacağınız şeyler sırayla şunlardır:
- Kutunun önünde durup uygun pozisyonda* yere çömelirsiniz.
- Ellerinizi kutunun altına konuşlandırırsınız (kutunun kaldırdığınızda düşmemesini sağlayacak şekilde)
- Kutuyu tutarken bacaklarınızı kullanarak ayağa kalkarsınız.
- Eğer koyacağınız yer sizden yüksekse kutuyu koymak istediğiniz yere gider, kutuyu kollarınızla yükselterek yerine koyarsınız.
Günlük hayatta bu tür bir problemle karşılaştığımızda "algoritma" kavramı aklımızdan geçmez bile, ancak bir kutuyu yerden kaldırıp bir yere koyma probleminin "algoritma"sı tam olarak budur.
Matematikteki cebir problemleri, fonksiyon problemleri de algoritmalarla çözülür. Lisede karşılaştığınız karmaşık bir köklü sayı problemini düşünün. Bu problemi çözmek için o ifade üzerinde işlem yapmanız gerekti, ama kafanızda ama kağıt üstünde. Yani o problemin algoritmasını yazdınız.
Yazılıma başladıktan sonra yapacağınız programların da benzer şekilde bir algoritması olacak. O programdan bir şey yapmasını isteyeceksiniz ve o programa onu nasıl yapacağını anlatacaksınız. İşte "algoritma yazma" işlemi tam olarak budur.
Yani yazılımda algoritma yazma işlemi, kısaca bir yazılıma veya o yazılımın bir parçasına (ileride fonksiyon veya metot olarak göreceğiniz yapılar) neyi nasıl yapacağını anlatmaktan ibarettir. Sizden yol soran birine yol tarifi vermek gibi düşünebilirsiniz bu olayı.
Algoritmanın ne olduğunu anladı iseniz bir algoritmanın niteliklerine geçebiliriz artık.
Bir algoritmanın olmazsa olmazı olan iki şey vardır, bunlar girdi ve çıktıdır. Girdi, yazdığınız algoritmaların kullanacağı verileri ifade eder, bunlar yazılım dünyasında genel olarak "değişken" ve "sabit" olarak ikiye ayrılır. Kavram aşinalığı olması açısından bir insanın yaşı bir değişkenken, pi sayısı ise bir sabittir. Çıktı ise bu değişkenleri bir şekilde kullanarak elde ettiğiniz şeydir. Çıktıya bir örnek sizin bir matematik problemi çözdükten sonra elde ettiğiniz sonuçtur.
Algoritmanın girdisi ve çıktısı arasında gerçekleşen işlemlerin sahip olması gereken üç nitelik vardır; bunlar belirlilik, sonluluk ve etkililik. Belirlilik, bir problemin nasıl çözüleceğinin kesin olarak tanımlanmış olmasıdır. Yukarıda verdiğim bir kutuyu yerden kaldırma örneği belirli bir algoritmadır, çünkü ne yapılması gerektiği açıkça bellidir. Yani algoritmanızda işlemin hangi parçasının nasıl yapılacağı kesin olarak belli olmalıdır. Sonluluk ise, algoritmanın sonlu sayıda adıma sahip olmasıdır. Etkililik ise, bir işlemin mümkün olduğunca az adımda, az kaynak kullanılarak yapılmasıdır, örneğin ağır bir kutuyu yukarıdaki şekilde kaldırmak etkili bir çözümdür, fazla yormaz ve kutuyu kaldırdıktan sonra oluşabilecek ağrıları en aza indirir.
Çalışan tüm algoritmalar doğal olarak belirli ve sonludur, bunun tek büyük istisnası "sonsuz döngü" denilen durumdur, ki bunu da ilerideki yazılarda da anlatacağım. Ancak çalışan tüm algoritmalar etkili değildir. Bu durumda algoritmayı yazanın bu işi ne kadar iyi yaptığı devreye girer. Ancak Algoritmaya Giriş serimde işin bu kısmıyla ilgilenmeyeceğim, bunu bir başka seriye ve sizin ileride edineceğiniz deneyimlere saklamış olalım.
Yani kısaca algoritma, sizin bilgisayara tarif ettiğiniz yoldur. Bu yolun girdileri (belli sokaklar, binalar vb.) ve çıktısı veya çıktıları (varılacak yer(ler)) var ve bu çıktıya belirli ve sonlu sayıda adımda ulaşılıyor. Asıl önemli olan nokta sizin yolu nasıl, ne kadar anlaşılır şekilde tarif ettiğiniz.
Serinin diğer yazılarında görüşmek üzere👋
*Bel sağlığı için ufak bir kamu spotu geçmiş oldum :)
Eğer bu seriyi faydalı bulduysan yeni yazılar geldiğinde haberdar olmak için buradan blogumu takibe alabilirsin.
Yorumlar
Yorum Gönder