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

Ö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

Java SE ve Java EE Nedir?

En çok merak edilen karıştırılan hengisinden başlasam acaba gibi bir sürü sorulara neden olan Java SE ve Java EE tanımlarından aralarındaki farklardan bahsetmek istiyorum. Önce Java SE'den başlayalım; Java SE açılımı Java Standart Edition olan Java programlama dilini kullanan bir yazılım geliştirme paketidir. Java SE ile daha çok küçük uygulamalar geliştirilir. Java SE ile geliştirilen uygulamalar, Windows,Linux ve Mac gibi bir çok işletim sisteminde sorunsuz çalışır. Java EE ise açılımı Java Enterprise Edition olan web üzerinde kurumsal online uygulamalar geliştirmek, dağıtmak için Java tabanlı bağımsız bir platformdur. Java EE, Java SE üzerine inşaa edildiği için içerisinde birçok Java SE bileşeni barındırır. Java EE'de çok katmanlı web tabanlı uygulamalar geliştirmek için bir çok API'ler ve protokoller bulunur. Java EE standartlaştırılmış yapısıyla uygulama gelişimini basitleştirir ve öğrenimini kolaylaştırmaktadır. Eğer kurumsal yapılar üzerinde çalışıyorsanız, Ja

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