Merhaba arkadaşlar,
Başlıktandan anlayacağınız gibi, hayatımıza birbirinden farklı çözümler sunan problemler topluluğu olarak algoritmayı tanımlayabilirim. Bu yazı serimizde algoritmaları tek tek tanıyıp çalışma mantıklarını inceleyen analiz eden, birden farklı çözümleri karşılaştırarak gerekirse kendimizde çözümler üretebileceğimiz bir seri yaratacağız. Algoritmalar bilmece bulmaca gibidir. Üzerinde düşündüğünde ufkunuzu açar. Bu seriyi hazırlama sebebimde ufkunuzu biraz olsun açmak oldu. Bu seriye başlamadan önce bir algoritmayı tanımlarken kullanacağımız terimleri tanıtmak istiyorum. Ayrıca algoritmaların pseudo kodlarıyla Java kodlarını da paylaşacağım. Belki Swift ile olan kodlarını da paylaşabilirim. ;) Ayrıca bu kodların toplu halde github hesabımdan erişim sağlayabilirsiniz. Şimdi algoritma dünyasını daha derinden tanıyalım.
Algoritma nedir?
Bir problemi çözmek için işlenen komutlar kümesine, algoritma nedir.
Çözülebilir Problem nedir?
Bir problem için algoritma oluşturulabiliyorsa, buna çözülebilir problem nedir.
Verilen bir problemin birden fazla çözümü olabilir. Bu da bir problemi birden fazla algoritma ile çözebileceğimizi gösterir. Bir algoritmayı farklı programlama dilleri ile kullanabiliriz. Bir problem için algoritma oluşturulurken, bu algoritmanın problemi doğru bir biçimde çözebilmesi gerekmektedir. Yoksa oluşturulan algoritma o problem için doğru bir çözüm sayılmaz. Oluşturulan algoritma bu problemi istediğimiz gibi çözüyorsa, bu algoritma için gerekli performans çalışmalarını yapmamız gerekmektedir. Performans sonuçları istediğimiz gibi çıkmadığı taktirde problem için yeni algoritmalar düşünebiliriz.
Bir algoritmanın performansını incelerken, algoritmanın çalışma zamanını ve bellek maliyetini ele alırız. Ama algoritmalar genellikle zaman performansı üzerinde test edilmektedirler. Fakat yaptığımız çalışmalarda zaman önemsiz, bellek maliyetinin önemli olduğu zamanlarda bellek analizlerini de inceleyebilmekteyiz. Bu seride daha çok zaman maliyetleri ele alınacaktır.
Algoritma Analizi nedir?
Algoritma çözümlerinin değişik yöntemlerini analiz etmeye yarayan bir bilgisayar bilimleri alanıdır.
Neden Bir Algoritmayı Analiz Ederiz?
Bir algoritma analizi sırasında, öncelikle çözümün etkinliğini belirtmek için etkili, önemli işlemlerin sayısını hesaplarız. Daha sonra algoritmanın verimini büyüme fonksiyonu olarak ifade ederiz.
Native Yaklaşım Nedir?
Bir programlama dili vasıtasıyla algoritmaların karşılaştırılması işlemine, native yaklaşım denir.
Native Yaklaşımın Dezavantajları
Başlıktandan anlayacağınız gibi, hayatımıza birbirinden farklı çözümler sunan problemler topluluğu olarak algoritmayı tanımlayabilirim. Bu yazı serimizde algoritmaları tek tek tanıyıp çalışma mantıklarını inceleyen analiz eden, birden farklı çözümleri karşılaştırarak gerekirse kendimizde çözümler üretebileceğimiz bir seri yaratacağız. Algoritmalar bilmece bulmaca gibidir. Üzerinde düşündüğünde ufkunuzu açar. Bu seriyi hazırlama sebebimde ufkunuzu biraz olsun açmak oldu. Bu seriye başlamadan önce bir algoritmayı tanımlarken kullanacağımız terimleri tanıtmak istiyorum. Ayrıca algoritmaların pseudo kodlarıyla Java kodlarını da paylaşacağım. Belki Swift ile olan kodlarını da paylaşabilirim. ;) Ayrıca bu kodların toplu halde github hesabımdan erişim sağlayabilirsiniz. Şimdi algoritma dünyasını daha derinden tanıyalım.
Algoritma nedir?
Bir problemi çözmek için işlenen komutlar kümesine, algoritma nedir.
Çözülebilir Problem nedir?
Bir problem için algoritma oluşturulabiliyorsa, buna çözülebilir problem nedir.
Verilen bir problemin birden fazla çözümü olabilir. Bu da bir problemi birden fazla algoritma ile çözebileceğimizi gösterir. Bir algoritmayı farklı programlama dilleri ile kullanabiliriz. Bir problem için algoritma oluşturulurken, bu algoritmanın problemi doğru bir biçimde çözebilmesi gerekmektedir. Yoksa oluşturulan algoritma o problem için doğru bir çözüm sayılmaz. Oluşturulan algoritma bu problemi istediğimiz gibi çözüyorsa, bu algoritma için gerekli performans çalışmalarını yapmamız gerekmektedir. Performans sonuçları istediğimiz gibi çıkmadığı taktirde problem için yeni algoritmalar düşünebiliriz.
Bir algoritmanın performansını incelerken, algoritmanın çalışma zamanını ve bellek maliyetini ele alırız. Ama algoritmalar genellikle zaman performansı üzerinde test edilmektedirler. Fakat yaptığımız çalışmalarda zaman önemsiz, bellek maliyetinin önemli olduğu zamanlarda bellek analizlerini de inceleyebilmekteyiz. Bu seride daha çok zaman maliyetleri ele alınacaktır.
Algoritma Analizi nedir?
Algoritma çözümlerinin değişik yöntemlerini analiz etmeye yarayan bir bilgisayar bilimleri alanıdır.
Neden Bir Algoritmayı Analiz Ederiz?
- Bir algoritmanın birden fazla çözümünün olup olmadığını araştırmak.
- Bir algoritma için en iyi çözümü bulmak.
- Aynı problemi çözen başka algoritmalar ile karşılaştırmak.
Bir algoritma analizi sırasında, öncelikle çözümün etkinliğini belirtmek için etkili, önemli işlemlerin sayısını hesaplarız. Daha sonra algoritmanın verimini büyüme fonksiyonu olarak ifade ederiz.
Native Yaklaşım Nedir?
Bir programlama dili vasıtasıyla algoritmaların karşılaştırılması işlemine, native yaklaşım denir.
Native Yaklaşımın Dezavantajları
- Her programcı farklı kodlama tekniklerini kullanabilir.
- Programlama dillerinin hassasiyeti farklı olabilir.
- Kullanılan bilgisayarlar farklı olabilir, belirli bir bilgisayara göre çalışma zamanını karşılaştıramayız.
- Programda kullanılan veri yapısı farklı olabilir.
- Brute Force
- Divide And Conquer
- Decrease And Conquer
- Transfer And Conquer
- Dinamic Programming
- Greddy
Yorumlar
Yorum Gönder