Algoritmalar

Bilgisayar ve Programlamaya Giriş
ProblemAlgoritmaİzlemeAramaSıralama
Sercan KÜLCÜ · Giresun Üniversitesi

Giriş

Öğrenme Çıktıları

Tanımlama

Girdi, çıktı ve kısıtları belirlemek.

Tasarım

Çözümü açık ve sonlu adımlara ayırmak.

Doğrulama

Algoritmayı örneklerle izlemek ve test etmek.

Karşılaştırma

Arama ve sıralama yaklaşımlarını değerlendirmek.

Problem Çözme

Önce Algoritma, Sonra Kod

  • Kod, çözüm fikrinin belirli bir dildeki uygulamasıdır.
  • Algoritma kurulmadan yazılan kod gereksiz denemelere ve gizli hatalara yol açabilir.
  • Doğru sıra: problemi anla, örnek çöz, yöntemi yaz, sonra kodla.

Problem Çözme

Sorun Tanımı

Girdi

Programa hangi bilgiler verilecek?

Çıktı

Hangi sonuç üretilecek?

Kısıt

Değerlerin sınırı ve geçerlilik koşulu nedir?

Örnek

Beklenen sonuç hangi küçük örnekle doğrulanabilir?

Algoritma

İyi Algoritmanın Özellikleri

  • Adımlar açık, sıralı ve uygulanabilir olmalıdır.
  • Sonlu sayıda adım sonra durmalıdır.
  • Geçerli girdiler için doğru sonucu üretmelidir.
  • Kaynak kullanımı problem boyutu büyüdüğünde kabul edilebilir olmalıdır.

Algoritma

Algoritma Tasarlama Döngüsü

Örneği çöz
Genel kuralı bul
Sözde kod yaz
Elle izle
Düzelt
  • Birden fazla çözüm varsa doğruluk, okunabilirlik ve verimlilik karşılaştırılır.

Örnekler

Örnek: İki Sayıyı Sırala

oku a, b
eğer a > b ise
    geçici = a
    a = b
    b = geçici
yaz a, b
  • Eşit değerlerde değişim gerekmez.
  • Yer değiştirme üç atamayla yapılır.
  • Çıktı için a ≤ b koşulu sağlanmalıdır.

Örnekler

Örnek: Faktöriyel

oku n
eğer n < 0 ise hata
sonuç = 1
i = 2
i ≤ n iken
    sonuç = sonuç × i
    i = i + 1
yaz sonuç
  • 0! ve 1! değeri 1'dir.
  • Döngü değişmezi: her adımda sonuç, işlenen sayıların çarpımıdır.

Örnekler

Örnek: Fibonacci

oku n
a = 0, b = 1
0'dan n-1'e kadar tekrarla
    yaz a
    sonraki = a + b
    a = b
    b = sonraki
  • İki önceki değer korunur.
  • Geçici değişken güncelleme sırasında bilgi kaybını önler.

Örnekler

Örnek: Palindrom

metni oku
metni kurala göre temizle
sol = 0, sağ = uzunluk - 1
sol < sağ iken
    karakterler farklıysa yanlış döndür
    sol++, sağ--
doğru döndür
  • Karşılaştırma iki uçtan merkeze ilerler.
  • Büyük-küçük harf ve boşluk kuralı önceden belirlenmelidir.

Örnekler

Örnek: Asal Sayı

oku n
eğer n < 2 ise asal değil
i = 2
i × i ≤ n iken
    n % i == 0 ise asal değil
    i = i + 1
asal
  • Bir bölen bulununca arama durabilir.
  • Karekök sınırı gereksiz kontrolleri azaltır.

Doğrulama

Algoritmayı İzleme

  • Değişkenlerin her adımdaki değeri bir izleme tablosuna yazılır.
  • Normal, sınır ve geçersiz girdiler ayrı ayrı denenir.
  • Beklenen ve gerçek sonuç ayrıldığında ilk farklı adım bulunur.
Tek bir başarılı test, algoritmanın her girdi için doğru olduğunu kanıtlamaz.

Doğrulama

Test Durumları

TürAmaçÖrnek
NormalYaygın kullanımı doğrulamakn = 5
SınırAlt veya üst sınırı denemekn = 0
GeçersizHata davranışını görmekn = -3
BüyükPerformans ve taşmayı görmekn = 1.000.000

Analiz

Doğruluk ve Verimlilik

  • Doğruluk algoritmanın beklenen sonucu üretmesidir.
  • Zaman karmaşıklığı işlem sayısının girdi boyutuyla değişimini inceler.
  • Alan karmaşıklığı kullanılan ek bellek miktarını değerlendirir.
  • En hızlı görünen yöntem küçük veride her zaman en anlaşılır yöntem olmayabilir.

Arama

Doğrusal Arama

  • Elemanlar baştan sona sırayla karşılaştırılır.
  • Verinin sıralı olması gerekmez.
  • En kötü durumda n eleman incelenir: O(n).

Arama

Doğrusal Arama Kodu

int ara(int[] dizi, int hedef) {
    for (int i = 0; i < dizi.length; i++) {
        if (dizi[i] == hedef) return i;
    }
    return -1;
}
  • Bulunamama durumu -1 ile temsil edilir.
  • İlk eşleşmede yöntem sonlanır.

Arama

İkili Arama

  • Yalnızca sıralı veri üzerinde çalışır.
  • Her adımda arama aralığını yaklaşık yarıya indirir.
  • En kötü durumda O(log n) karşılaştırma yapar.
Sıralama maliyeti, tek arama için ikili aramayı gereksiz kılabilir.

Arama

İkili Arama Kodu

int sol = 0, sağ = dizi.length - 1;
while (sol <= sağ) {
    int orta = sol + (sağ - sol) / 2;
    if (dizi[orta] == hedef) return orta;
    if (dizi[orta] < hedef) sol = orta + 1;
    else sağ = orta - 1;
}
return -1;

Arama

Arama Karşılaştırması

ÖzellikDoğrusalİkili
Sıralı veriGerekmezGerekir
En kötü zamanO(n)O(log n)
YapıDizi veya akışRastgele erişimli sıralı yapı
KullanımAz veya sırasız veriÇok sayıda arama

Sıralama

Seçmeli Sıralama

  • Sıralanmamış bölümde en küçük elemanı bulur.
  • Bulunan elemanı bölümün ilk konumuyla değiştirir.
  • Karşılaştırma sayısı O(n²), ek bellek kullanımı O(1)'dir.

Sıralama

Kabarcık Sıralama

  • Komşu elemanları karşılaştırır ve yanlış sıradaysa yer değiştirir.
  • Her turda büyük elemanlardan biri sona taşınır.
  • Basit fakat büyük veri için verimsizdir; genel durumda O(n²).

Sıralama

Sıralama Karşılaştırması

AlgoritmaTemel fikirZamanEk alan
SeçmeliEn küçüğü seç ve yerleştirO(n²)O(1)
KabarcıkKomşuları değiştirO(n²)O(1)
YerleştirmeliElemanı sıralı bölüme ekleO(n²)O(1)
BirleştirmeliBöl, sırala, birleştirO(n log n)O(n)

Özet

Bölüm Özeti

  • Algoritma, girdiyi çıktıya dönüştüren açık ve sonlu adımlar bütünüdür.
  • Elle izleme ve çeşitli test durumları doğruluğu değerlendirmeye yardım eder.
  • Doğrusal arama sıralama istemez; ikili arama sıralı veride aralığı yarılar.
  • Algoritmalar yalnızca sonuçla değil, zaman ve bellek maliyetiyle de karşılaştırılır.

Özet

Kontrol Soruları

  1. İyi bir problem tanımında hangi bilgiler bulunur?
  2. Faktöriyel algoritmasında 0 girdisi nasıl ele alınır?
  3. İkili arama neden sıralı veri ister?
  4. O(n) ile O(log n) neyi karşılaştırır?
  5. Seçmeli ve kabarcık sıralamanın temel farkı nedir?

Son

Algoritmalar
1 / 1Sercan KÜLCÜ, Tüm hakları saklıdır.

← → veya boşluk ile gezinin · F: tam ekran · Home/End: ilk/son slayt