Algoritma

Bu 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 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.

  1. İki adet yumurtayı bir kabın içine kır
  2. Yumurtayı birkaç saniye çırp
  3. Yumurta homojen hale gelmişse 4. adıma geç. Yoksa 2. adıma geri dön
  4. Çırpılmış yumurtaya tuz ve peynir ekle
  5. Karışık omlet isteniyorsa, yumurtaya sosis de ekle
  6. Tavaya yağ dök ve ocağa koy
  7. Çırpılmış yumurtayı tavaya koy
  8. Yumurtayı bir miktar pişir
  9. Yumurta katılaştıysa 10. adıma geç. Yoksa 8. adıma geri dön
  10. 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:

Akis Diyagrami
  1. Kullanıcıdan klavye aracılığıyla n sayısını al
  2. k ve carpim sayılarını 1‘e eşitle
  3. carpim sayısını k ile çarp (carpim carpim*k)
  4. k sayısını 1 arttır
  5. k sayısı, n‘den büyükse sonraki adıma geç, değilse 3. adıma geri dön
  6. 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..

Murat Ongan

Kaynak

Bu yazı Programlama içinde yayınlandı. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s