Bu yazımızda, bilgisayar biliminin en temel kavramlarından biri olan algoritmalar hakkında bilgi vermeye çalışacağız. Algoritma sözcüğü, 9. yüzyılda yaşamış ünlü matematikçi el Harezmi'den gelmektedir. Cebir ve algoritmalarla ilgili dünyanın ilk kitabını yazan el Harezmi (Al-Khwārizmī)'nin adı, batılılar tarafından algorizma şeklinde telaffuz edilmiş ve daha sonra bu kavrama isim olarak verilmiştir.
Dilerseniz, detaylı bir açıklama yapmadan önce, sözcüğün kısa bir tanımı ile başlayalım. Görüş birliğine varılmış kesin bir tanımı olmamakla beraber, algoritmayı, belli bir sonuca ulaşmak için tasarlanmış, sistematik işlemler dizisi olarak ifade edebiliriz.
Verdiğimiz tanımdan yola çıkarak şunları söyleyebiliriz: Bir algoritma, içinde bulunduğumuz bir başlangıç durumundan, hedefimiz olan bir bitiş durumuna ulaşmamız için kullanılır. Bize ne yapılması gerektiğini adım adım ve açık bir biçimde anlatması gerekir ve çeşitli yöntemlerle ifade edilebilir. Şimdi, bir algortimanın neye benzediğini daha iyi anlayabilmek için somut örnekler verelim.
Gündelik Hayatta Algoritmalar
Gündelik hayatımızda, belli bir amaca ulaşmak için yaptığımız işlerde bilerek ya da bilmeyerek çeşitli "algoritmalar" uygularız. Örneğin, bir omlet yapmak istediğimizi varsayalım. Elimizde yumurta, peynir, yağ, tuz ve diğer malzemelerimiz var. Bu içinde bulunduğumuz durum. Ulaşmamız gereken durumda ise pişmiş bir yumurtamız olsun istiyoruz. Algoritmamızı açıklayabilmek için, başlangıç durumundan bitişe kadar yapmamız gereken işlemleri adım adım tarif etmemiz gerekiyor. Bu adımları aşağıdaki gibi gösterebiliriz.
- İki adet yumurtayı bir kabın içine kır
- Yumurtayı birkaç saniye çırp
- Yumurta homojen hale gelmişse 4. adıma geç. Yoksa 2. adıma geri dön
- Çırpılmış yumurtaya tuz ve peynir ekle
- Karışık omlet isteniyorsa, yumurtaya sosis de ekle
- Tavaya yağ dök ve ocağa koy
- Çırpılmış yumurtayı tavaya koy
- Yumurtayı bir miktar pişir
- Yumurta katılaştıysa 10. adıma geç. Yoksa 8. adıma geri dön
- Pişen yumurtayı tabaklara servis et
Örnekte görüldüğü gibi, algoritma, yapılacak işi adım adım açıklıyor. Normalde sırayla giden adımlar, belli durumlarda değişiklik gösterebiliyor. Bu değişiklik, koşul cümleleri ve döngüler ile gerçekleştiriliyor. Örneğin, beşinci adımdaki "karışık omlet istenmesi" koşulu gerçekleşirse, "yumurtaya sosis ekleme" işlemi yapılıyor. Yoksa bu adım atlanıyor. Ayrıca, 2-3 ve 8-9 adımları döngü olarak gösterilebilir. Örneğin, "yumurtayı gereği kadar pişirmek" için 8. adım sürekli olarak tekrar ediliyor. Bu döngüden çıkabilmek için de bulunduğumuz durum, 9. adımdaki koşul cümlesiyle kontrol ediliyor.
Bilgisayar Dünyasında Algoritmalar
Algoritmalar, çeşitli şekillerde uygulama alanı bulurlar. Örneğin, bir önceki örnekte olduğu gibi insanlar tarafından uygulanabilirler. Algoritmaların insan beyni tarafından kullanılması, biyolojik sinir ağlarında kullanımına örnektir. Bunun yanısıra bir algoritmayı uygulayarak belli bir işi yapan elektronik devreler ve mekanik cihazlar da geliştirilebilir.
Algoritmaların hayat bulduğu en önemli alan ise bilgisayar yazılımlarıdır. Bilgisayarlara istediğimiz bir işi yaptırabilmek için, yapılacak işin basamaklarını net bir biçimde tarif etmemiz gerekir. Bu tarif etme işlemi, algoritmaların belli bir programlama dili kullanarak ifade edildiği bilgisayar yazılımları ile gerçekleşir. Bu da algoritmaların, bilgisayar biliminde neden bu kadar önemli bir yeri olduğunu açıklar.
Şimdi, algortimaların bilgisayar dünyasında kullanımına örnek olarak, matematiksel bir problemi ele alalım. Algoritmamız, faktöriyel hesaplama işine yarasın. Yani, bize verilen bir pozitif tamsayıyı (n) kullanarak, bu sayının faktöriyelini (1'den n'e kadar olan sayıların çarpımı) bulsun. Yapılması gereken işlem gayet açık olsa da bir algoritma ortaya koyabilmemiz için adımları net bir biçimde ifade etmemiz gerekir. Bunu şu şekilde gerçekleştirebiliriz:
- Kullanıcıdan klavye aracılığıyla n sayısını al
- k ve carpim sayılarını 1'e eşitle
- carpim sayısını k ile çarp (carpim = carpim*k)
- k sayısını 1 arttır
- k sayısı, n'den büyükse sonraki adıma geç, değilse 3. adıma geri dön
- carpim sayısını ekrana yazdır
Algoritmaları İfade Etme Yolları
Algoritmaların farklı ifade edilme yöntemleri vardır. Yukarıda gördüğünüz, yapılacak işlemin adımlar halinde, gündelik dil kullanılarak ifade edildiği yöntemdir. Bunun dışında, sağdaki örnekte olduğu gibi, algoritmalar grafiksel olarak da ifade edilebilir. Görsel olarak anlamayı kolaylaştırmayı sağlayan bu grafiklere, akış diyagramı ya da akış şeması adı verilir.
Algoritmaların, direk kullanılabilmesini de sağlamak için, çeşitli programlama dillerinde kodlayarak ifade edebiliriz. Bu gösterim, algoritmanın detaylarını net bir şekilde ifade etmekle birlikte, direk bilgisayar tarafından da yorumlanıp kullanılabilir. Örneğin, faktöriyel fonksiyonunun C dilindeki uygulaması (C implementasyonu) aşağıda gösterilmiştir:
unsigned int fact(unsigned int n) {
unsigned int carpim=1, k=1;
while (k < n) {
k++;
carpim *= k;
}
return carpim;
}
Bu yöntemler dışında algoritmaları sözde kodlarla veya formal gösterimleriyle de ifade edebiliriz. Sözde kodlar, algoritmaların herhangi bir programlama diline bağlı kalmadan, genel ifadelerle ama bilgisayar diline yakın bir biçimde gösterimidir. Formal gösterim ise, bir Turing makinesinin durum tablosu (state table) ve durum değiştirme fonksiyonunun (transition function) gösterilmesidir. Bu tablolara bakarak, söz konusu algoritmanın işletilmesini sağlayacak bir Turing makinesi yapılabilir. Bu konunun daha fazla ayrıntısına girmiyor ve sonraki yazılarımıza bırakıyoruz.
Algoritma Türleri
Algoritmaları, kullanım alanlarına, karmaşıklıklarına (complexity), tasarım yöntemlerine (design paradigm) ve uygulama şekillerine (implementation) göre çeşitli türlere ayırabiliriz. Kullanım alanlarına göre birkaç algoritma türü aşağıda verilmiştir:
- Sıralama algoritmaları
- Arama algoritmaları
- Graph algoritmaları
- Şifreleme algoritmaları
- Sıkıştırma algoritmaları
- Metin işleme algoritmaları
Bu algoritma çeşitleri hakkında örneklere ve diğer sınıflandırma yöntemlerine başka bir sayımızda değinmek üzere, şimdilik hoşçakalın ve e-bergi'yi takip etmeye devam edin..