Ana içeriğe atla

Hayatımıza Birbirinden Farklı Çözümler Sunan Problemler: Algoritmalar

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 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.
ÖNEMLİ NOT:Bir algoritmanın analiz çalışmasında kullanılan bilgisayardan ,programlama dilinden, algoritmayı kodlayan programcıdan ve kullanılan veri yapılarından bağımsız bir şekilde matematiksel teknikler kullanılmalıdır. Yukarıda bahsettiğimiz unsurlar algoritmanın performansını etkileyebileceğinden en doğru sonucu alabilmek için bu unsurlara dikkat edilmelidir.

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.
Algoritmalar, belirli yaklaşımlara göre tasarlanmıştır. Aşağıda bu yaklaşımlardan bazılarını göreceksiniz. Her algoritmayı incelerken hangi yaklaşım olduğundan da bahsedilecektir.


  • Brute Force
  • Divide And Conquer
  • Decrease And Conquer
  • Transfer And Conquer
  • Dinamic Programming
  • Greddy
Bu blog yazısında, algoritmaları genel olarak tanımlamış olduk. Bir dahaki blog yazısında Algoritmaların performans hesaplamalarına değineceğiz. Görüşmek üzere, iyi çalışmalar. :)

Yorumlar

Bu blogdaki popüler yayınlar

Algoritma Kavramı, Sözde Kod ve Akış Diyagramı

Bu yazımda çoğumuzun amelelik gibi gördüğü fakat belki de en önemli konu hakkında kısaca bilgi vermek istiyorum. Bundan sonra küçük örneklerle kod yazmayı arttıracağız. Programlama dillerinden bahsetmiştik geçenlerde. Yüksek seviyeli veya düşük seviyeli diller olsun hepsinin arasında kullanım farkları haricinde çok bir farkılılık yoktur. Hayatımızda kullandığımız koca koca programları, programlama dilleri değil onları hazırlayan algoritma kaynağı oluşturur. Kısaca algoritma kavramını tanımlarsak; Algoritma, belli bir problemi çözmek veya belli bir amaca ulaşmak için çizilen yoldur. Algoritma proglamlamada kullanılan en güzel tekniktir. Neyi nasıl yapacağımızı planlamamızı sağlar. Algoritmayı oluşturanda sözde kod ve akış diyagramlarıdır. ALGORİTMA ÖRNEĞİ(resim1) Sözde Kod:Yapacağımız algoritmayı kısa olarak sözle tanımlama yöntemidir. Örneğin; İki sayının toplamını veren algoritmanın sözde kodunu yazınız. 1)BAŞLA 2)YAZ(“1.sayiyi giriniz:”) 3)OKU(S1) 4)YAZ(“2.sayiyi g...

Örnek Algoritmalar ve Örnek C++ Kodları

Örneklerimize bu başlığımız altında devam ediyoruz arkadaşlar. :) Yıl başına kadar C++ hakkında bildiğim tüm konuları ve yaptığım projeleri sizlerle paylaşacağım. Sorularınızı yorumlarda bekliyorum. Şimdiden kolay gelsin :) Algoritma 5: Yarıçapı klavyeden girilen kürenin yüzey alanını ve hacmini açıklayan algoritmanın C++ kodunu yazınız.(π=3) #include <iostream> using namespace std; int main() { float r,alan,hacim; cout<<“Yaricapi giriniz:”; cin>>r; alan=4*3*r*r; hacim=(4*3*r*r*r)/3; cout<<“Alan:”<<alan<<endl; cout<<“Hacim”<<hacim<<endl; } Algoritma 6: Katsayıları klavyeden girilen birinci dereceden denklemin kökünü bulan algoritmanın C++ kodunu yazınız. #include <iostream> using namespace std; int main() { int a,b,c,x; cout<<“Katsayilari giriniz:”; cin>>a>>b>>c; x=(c-b)/a; cout<<“Kok:”<<x; } Algoritma 7:Klavyeden yarıçapı ve dilim açısı girilen daire diliminin...

C++ ile Veri Yapıları

Bu yazımızda, bilgisayar dünyasının temel yapı taşı olan veri yapısı konusunu ele alacağız. Bu konu oldukça zor olmakla birlikte, gayet önemli ve eğlenceli yapıdır. Veri yapısını bilmek ve etkin kullanmak, hayatınızda yapacağınız projelerde size kolaylık sağlayacaktır. Veri yapısı genel olarak bakıldığınında hayatımızın her anında vardır. Konular ilerledikçe bu daha iyi anlaşılacaktır. Veri yapısını tanımlamak gerekirse, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılır. Veri yapıları, verilerin düzenlenme biçimini belirleyen yapıtaşlarıdır. Bir yazılım değişkeni bile basit bir veri yapısı olarak kabul edilebilir. Değişik algoritmalarda verilerin diziler, listeler, yığıtlar, kuyruklar, ağaçlar ve çizgeler gibi veri modellerine uydurularak düzenlenmesi gerekebilir. Veri, yapı ve algoritma bir yazılımın birbirinden ayrılmaz bileşenleridir. Algoritması hazırlanmış her yapı için verilerin düzenli bir şekilde kullanımı önemlidir. Çünkü yapı iyi kurul...