Algoritma

Algoritmalara Kısa Bir Giriş

İçindekiler

Algoritma, belli bir problemi çözmek veya belirli bir amaca ulaşmak için tasarlanan yola, takip edilen işlem basamaklarıdır. Diğer bir ifadeyle, beklenen sonuçları elde etmek için bir işin nasıl yürütüleceğini adım adım tanımlayan bir dizi kural(talimat) anlamına gelir. 

Algoritmalar belirli bir başlangıcı ve sonu olan bir sonlu işlemler kümesidir. Amaca ulaşmak için işlenecek çözüm yolları ve adımlar belirlenir ve algoritma bu adımları sırayla takip ederek istenen çözüme ulaşır.

Algoritmanın ne olduğunu daha iyi anlamak için yemek pişirme örneğine bakalım. Yeni bir yemek pişirmek için talimatları okuyup adımları sırayla uyguladığınız zaman sonuç yeni pişmiş bir yemektir. Yani tarif amacına ulaşmıştır. Benzer şekilde, algoritmalar da beklenen çıktıyı elde etmek için programlamada bir görevi yerine getirmeye yardımcı olur.

Algoritmalar genellikle bilgisayar bilimlerinde kullanılır. Tüm programlama dillerinin temeli algoritmalara dayanır. Dolayısıyla algoritmalar bir programlama dili vasıtasıyla bilgisayarlar tarafından işletilebilirler. Tasarlanan bir algoritma dilden bağımsızdır, yani herhangi bir dilde uygulanabilecek basit talimatların çıktısı beklendiği gibi aynı olacaktır.

İlk algoritma, el-Hârizmî tarafından “Hisab el-cebir ve el-mukabala” kitabında sunulmuştur. Algoritma sözcüğü de el-Hârizmî’nin isminin Avrupalılarca telaffuzundan doğmuştur.

Algoritmaların Özellikleri Nelerdir?

Şunu belirtmek gerekir ki, programlama için tüm yazılı talimatlar bir algoritma değildir. Bazı komutların algoritma olabilmesi için aşağıdaki özelliklere sahip olması gerekir:

  1. Açık ve kesin olmalıdır: Bir algoritma açık ve net olmalıdır. Adımlarının her biri tüm yönleriyle açık olmalı ve tek bir anlama gelmelidir.
  2. Girdiler iyi tanımlanmalıdır: Bir algoritmanın girdileri iyi tanımlanmış girdiler olmalıdır.
  3. Çıktılar iyi tanımlanmalıdır: Algoritma, hangi çıktının elde edileceğini açıkça tanımlamalıdır.
  4. Sonlu olmalıdır: Algoritma sonlu olmalıdır, yani sonsuz döngü veya benzeri ile sonuçlanmamalıdır.
  5. Uygulanabilir olmalıdır: Algoritma, mevcut kaynaklara göre yürütülebilecek şekilde basit, genel ve pratik olmalıdır. Gelecekteki bir teknolojiyi veya herhangi bir şeyi içermemelidir.
  6. Dilden bağımsız olmalıdır: Tasarlanan algoritma dilden bağımsız olmalıdır. Yani adımlar herhangi bir dilde uygulanabilir şekilde olmalıdır. Tabi ki çıktı beklendiği gibi aynı olacaktır.

Algoritmalar Nasıl Tasarlanır?

Algoritma yazmak için ön koşul olarak aşağıdakilere ihtiyaç vardır: 

  1. Problem: Bir algoritma ile çözülmesi gereken problem.
  2. Kısıtlar(Constraints): Problemi çözerken göz önünde bulundurulması gereken problemin kısıtları.
  3. Girdi: Problemi çözmek için alınacak girdi.
  4. Çıktı: Problem çözüldüğünde beklenen çıktı.
  5. Çözüm(Solution): Verilen kısıtlamalarda bu sorunun çözümü.

Daha sonra yukarıdaki parametreler yardımıyla problemi çözecek şekilde algoritma yazılır.

Örnek: Girilen 3 sayının toplamını yazdırın

1) Ön Koşulların Sağlanması

Yukarıda belirttiğim gibi, bir algoritma yazabilmek için ön koşullarının yerine getirilmesi gerekir. 

  1. Bu algoritma ile çözülmesi gereken problem : 3 sayı girin ve toplamlarını yazdırın.
  2. Problemi çözerken dikkat edilmesi gereken problemin kısıtları : Rakamlar sadece numeric olmalı ve başka karakter içermemelidir.
  3. Problemi çözmek için alınacak girdi: Eklenecek üç sayı.
  4. Problem çözüldüğünde beklenen çıktı: Girdi olarak alınan üç sayının toplamı.
  5. Verilen kısıtlamalarda bu problemin çözümü: Girilen 3 sayının toplamı. ‘+’ operatörü yardımıyla veya bit bazında veya başka bir yöntemle yapılabilir.

2) Algoritmayı Tasarlama

Şimdi yukarıdaki ön koşulların yardımıyla algoritmayı tasarlayalım:

  1. BAŞLAT
  2. num1, num2 ve num3 olmak üzere 3 tane tam sayı değişkeni tanımlayın.
  3. num1, num2 ve num3 değişkenlerinde girdi olarak eklenecek 3 sayıyı alın.
  4. 3 sayının toplamını depolamak için bir tam sayı değişkeni(sum) tanımlayın.
  5. 3 sayıyı ekleyin ve sonucu sum değişkeninde saklayın.
  6. sum değişkeninin değerini yazdırın.
  7. SON

3) Algoritmayı Uygulayarak Test Etme

Algoritmayı test etmek için Java dilinde uygulayalım:

import java.util.Scanner;

class SumOfThreeNumbers{
	public static void main(String args[]){
		int num1,num2,num3;
		System.out.println("Lütften 3 tane tamsayı değeri girin");
		Scanner in = new Scanner(System.in);
		num1 = in.nextInt();
		num2 = in.nextInt();
		num3 = in.nextInt();
		int sum=num1+num2+num3;
		System.out.println("Sonuç: "+sum);
	}
}

Programın çıktısı aşağıdaki gibi olacaktır:

Lütften 3 tane tamsayı değeri girin
12
40
7
Sonuç: 59

Algoritma Analizi

Priori Analizi (Priori Analysis)

“Priori”, “önce” anlamına gelir. Bu nedenle Priori analizi, algoritmanın uygulanmasından önce kontrol edilmesi anlamına gelir. Bu analizde algoritma teorik adımlar şeklinde yazıldığında kontrol edilir. Algoritmanın verimliliği işlemci hızı gibi diğer tüm faktörlerin sabit olduğu ve uygulama üzerinde hiçbir etkisi olmadığı varsayılarak ölçülür. Bu genellikle algoritma tasarımcısı tarafından yapılır. Algoritma karmaşıklığı bu yöntemle belirlenir.

Posterior Analiz (Posterior Analysis)

“Posterior”, “sonra, arka” anlamlarına gelir. Dolayısıyla Posterior Analiz, algoritmanın uygulanmasından sonra kontrol edilmesidir. Algoritma herhangi bir programlama dilinde uygulanarak ve çalıştırılarak kontrol edilir. Bu analiz, doğruluk, gerekli alan, harcanan zaman vb. hakkında gerçek analiz raporunun alınmasına yardımcı olur.

Algoritma Nedir
Algoritma Nedir?

Algoritmalarda Karmaşıklık

  • Zaman Faktörü (Time Factor) : Zaman, sıralama algoritmasındaki karşılaştırmalar gibi anahtar işlemlerin sayısı sayılarak ölçülür.
  • Alan Faktörü (Space Factor) : Alan, algoritmanın gerektirdiği maksimum bellek alanı sayılarak ölçülür.

Uzay Karmaşıklığı (Space Complexity)

Bir algoritmanın uzay karmaşıklığı, bu algoritmanın yürütmek ve sonucu almak için ihtiyaç duyduğu bellek miktarını ifade eder. Bu girdiler, geçici işlemler veya çıktılar için olabilir.

Bir algoritmanın uzay karmaşıklığı, aşağıdaki 2 bileşen belirlenerek hesaplanır:

  • Sabit Parça (Fixed Part): Algoritmanın kesinlikle ihtiyaç duyduğu alan. Örneğin, girdi değişkenleri, çıktı değişkenleri, program boyutu vb.
  • Değişken Parça (Variable Part): Algoritmanın uygulanmasına bağlı olarak farklı olabilen alan. Örneğin, geçici değişkenler, dinamik bellek ayırma, özyineleme yığın alanı vb.

Zaman Karmaşıklığı (Time Complexity)

Bir algoritmanın zaman karmaşıklığı, bu algoritmanın yürütülmesi ve sonucu alınması için gereken süreyi ifade eder. Bu, normal işlemler, koşullu if-else ifadeleri, döngü ifadeleri vb. olabilir.

Bir algoritmanın zaman karmaşıklığı da aşağıdaki 2 bileşen belirlenerek hesaplanır: 

  • Sabit Zaman Bölümü (Constant Time Part): Sadece bir kez yürütülen herhangi bir talimat bu bölüme gelir. Örneğin, giriş, çıkış, if-else, anahtar vb.
  • Değişken Zaman Bölümü (Variable Time Part): Birden fazla, örneğin n kez yürütülen herhangi bir komut bu bölüme gelir. Örneğin, döngüler, özyineleme vb.

Son Düşünceler

Özetle, algoritmalar bazı değerleri girdi olarak alan ve bazı değerleri çıktı olarak üreten hesaplamaların bir bütünüdür. Yani girdileri alan, işleyen ve çıktı üreten adımların tamamıdır.

Algoritma çözme becerisi başarılı bir geliştirici olmamız için gereken en önemli temeldir. Birçok teknik mülakatta geliştirinin algoritma çözme becerisi değerlendirilir. Dolayısıyla algoritmaları iyi tasarlamalı, iyi analiz etmeli ve istenen çözüme ulaşmalısınız.

Kaynaklar:

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu