Monday 21 May 2007

Algoritma nedir ?

Bir kavramı incelerken algoritma gereği ilk önce kavramın anlamından, isminin nereden geldiğinden bahsetmek gerek diye düşünüyorum.Algoritma kelimesini incelerken de aynı yolu izleyeceğim.
Algoritma kelimesi , Ebu Abdullah Muhammed İbn Musa el Harezmi isimli Özbekistan'ın Horasan kentinde doğmuş ünlü Türk matematikçinin adından gelir. Bu alim 9. yüzyılda cebir alanindaki algoritmik çalışmalarını kitaba dökerek matematiğe çok büyük bir katkı sağlamıştır. "Hisab el-cebir ve el-mukabala (حساب الجبر و المقابلة)" kitabı dünyanın ilk cebir kitabı ve aynı zamanda ilk algoritma koleksiyonunu oluşturur. Batılılar, el Harezmi (Al-Khwārizmī) sözcüğünü telaffuz edemedikleri için terim bu şekilde kalmıştır.Bir Türk adının yaygın bir kavramın kökünü oluşturması da gerçekten gurur verici .

Algoritma deyince bizim zihnimizde asıl canlanması gereken şey ise algoritmanın her işin öncesinde yapılan muhasebe işi olduğudur.Matematik hesaplamalarından ayran yapmaya ,blog yazısı yazmadan tarla sürmeye kadar her alanda ve en önemlisi programlamada algoritmayı bazı zaman fark etmesekte kullanırız.Algoritma hayatımıza yerleşmiş durumda.
Her iş için alogritma kullanılır ama algoritma geneldir.Bir iş için de farklı algoritmalar olabilir.Bu algoritmaların karmaşıklığı birbirine eşit olabileceği gibi birisi daha verimli de olabilir.Mesela iş yerine yürüyerek de gidilebilir otobüslede.Fakat otobüsle gitmek daha az vakit alacağından daha verimli olur.Bu duruma bir çok örnek verilebilir.
Algoritmalar özel durumlar için çözüm sunamazlar.Genel durumlara yönelik algoritmalardan söz edilebilir.

Algoritma kullanacağımızı farkettikten sonra en önemli kısma gelinir : Hangi algoritmayı kullanabilirim?Ram i etkili kullanmak,kodun kısa ve anlaşılır olması gibi üzerinde durulması gereken noktaları düşünerek bir seçim yapma zamanı gelmiştir.Her algoritmanın bir karmaşıklığı(complexity) vardır.Ve bu karmaşıklıklar algoritmaların en kötü ihtimalleri(worst case) göz önünde bulundurularak hesaplanır.(Bir de en iyi ihtimal dediğimiz best case vardırki bunun complexity si en iyi ihtimaller göz önüne alınarak hesaplanır.)
Mesela search algoritmalarını ele alalım.Binary search algoritmasının karmaşıklığı log n, linear search algoritmasınınki ise n dir.Eğer bizim arama yapacağımız dizi sıralı ise binary search kullanmamız daha verimli olur(log n '<' n).Bunun gibi diğer problemlerde de çeşitli algoritmalar kullanılabilir(Bfs, A* (star)). Programımızın uzunluğu-kısalığı,verimliliği algoritmaya bağlıdırAlgoritmayı (düzgün) oluşturarak kodun uzunluğunu dörtte birine indirebiliriz.Programı yazmadan önce çözümü kafamızda oluşturup ön algoritmayı oluştururuz.Bu oluşumun kağıda dökülmesi ile algoritma tamamlanmış olur.Artık hangi dili biliyorsanız yada hangi dille yazmanız isteniyorsa o dille kodunuzu da yazarsınız.Ve artık program bitmiştir. Algoritma oluştururken kolaylık için Akış Diyagramı ile işlem basamaklarını şekillerle gösterebilirsiniz.Akış Diyagramı ile ilgili ayrıntılı bilgiye de buradan ulaşabilirsiniz.

Program yazarken meselenin “ yazmak” olmayıp “etkili/verimli yazmak” olduğunu program yazmadan önce hatırlayıp, düzgün, anlaşılır algoritma ile görenlerin ağzı açık kalacak şekilde ürünü ortaya koyabilmek iyi bir yazılımcı olabilmek için ödenmesi gereken bedeldir.

Kaynakça
http://www.godoro.com
http://tr.wikipedia.org/
http://www.eksisozluk.com/
http://www.yazilimgrubu.com
http://akademik.bahcesehir.edu.tr/cse2106/lecture_notes/week9.pdf

No comments: