Wednesday, July 19, 2006

Algoritmaların Analizi

Bugun bilgisayar dunyasında bilgisayar programciliği bir yere kadar kendine iş bulabilir. Bilgisayar mühendisinin karşılaşılan sorunlara daha kolay cevap bulabildiğini söyler çoğu kişi. Peki bilgisayar mühendisi problemlere nasıl daha kolay cevap bulabiliyor? bence bunun altinda yaptiği algoritma tasarımları, algoritma analizleri saklı...
Bir graph teorisini bilmeyen programci network programlama işine girerse ne olur? İstemciye gidecek paket belki en sonunda istemciye ulaşır ama network üzerinde en kısa yol algoritması koşmuyorsa yada TSP gibi algoritmalar dikkate alınmadan programlama yapılıyorsa paket gitmesi gerekenden çok sonra istemciye ulaşacaktır. Performansın ise nasıl bir kriter olduğunu söylemeye gerek yoktur herhalde.

Bugun sıkça kullanılan algoritmalardan bir kaçına değinmek istiyorum:

Greedy algoritmaları: Bu algoritmaların temel prensibi algoritmanın üzerinde çalışacağı elemanları bir kritere göre sıralamak ve sıra ile deneyerek en sonunda en optimum çözümü elde etmektir.

Divide and Conquer: Bu algoritmalar genel de ağaç veri yapısı üzerine kurulur ve problemi kendi içerisinde aynı türden daha küçük problemlere bölerek, alt problemerin çözümünden bütün problemin çözümünü elde etme yoluna gider. Rekürsif çağrı yapmaya uygun algoritmalardır.

Dynamic programming: Greedy algoritmaları her probleme optimum çözüm getiremeyebilir. Dinamik programlama da problemin çözümü; kendisinden bir küçük problemin çözümü ile kendi çözümü arasındaki optimumu seçme ve bu şekilde büyüyerek en sondaki problemi çözmeye bağlıdır. En küçük problemden başlayarak en büyük probleme doğru optimum çözümler seçilerek ilerlenir.

NP ( non-deterministic polynomial time ) Problems: Bu problemlerin çözümü tam olarak bulanmasa da kendisine benzeyen ve çözümü bilinen bir problemin çözümünden yola çıkalarak problemi çözme yoluna gidilir. Polinomal zamanda çözülen bir algoritmanın çözümü NP problemi çözecek şekilde değiştirilir.

Yukarıda bahsi geçen algoritmalar ve bahsi geçmeyen algoritmalar bilgisayar bilimlerinin yakından ilgilendiği yıllardır üzerinde çalışılan konulardır. Gerçek problemlere uygun çözümleri bulabilmek için bu algoritmaları ve kullanılan veri yapılarını özümsemek gerektiğine inanıyorum.

No comments: