| ||||||||||||
| ||||||||||||
AlgoritmaBu yazımızda, bilgisayar biliminin en temel kavramlarından biri olan algoritmalar hakkında bilgi vermeye çalışacağız. Algortima 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 algoritmanın neye benzediğini daha iyi anlayabilmek için somut örnekler verelim. Gündelik Hayatta AlgoritmalarGü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.
Ö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 AlgoritmalarAlgoritmalar, ç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, algoritmaları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: ![]()
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ürleriAlgoritmaları, 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:
Yazar: Murat Ongan - ODTÜ Bilgisayar Topluluğu Bu yazı, e-bergi / Şubat 2008 sayısından alınmıştır.
| ||||||||||||
| ||||||||||||