Algoritmalar
Bilgisayar ve Programlamaya Giriş
ProblemAlgoritmaİzlemeAramaSıralama
Sercan KÜLCÜ · Giresun ÜniversitesiGiriş
Öğ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ür | Amaç | Örnek |
|---|---|---|
| Normal | Yaygın kullanımı doğrulamak | n = 5 |
| Sınır | Alt veya üst sınırı denemek | n = 0 |
| Geçersiz | Hata davranışını görmek | n = -3 |
| Büyük | Performans ve taşmayı görmek | n = 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ı
| Özellik | Doğrusal | İkili |
|---|---|---|
| Sıralı veri | Gerekmez | Gerekir |
| En kötü zaman | O(n) | O(log n) |
| Yapı | Dizi veya akış | Rastgele erişimli sıralı yapı |
| Kullanım | Az 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ı
| Algoritma | Temel fikir | Zaman | Ek alan |
|---|---|---|---|
| Seçmeli | En küçüğü seç ve yerleştir | O(n²) | O(1) |
| Kabarcık | Komşuları değiştir | O(n²) | O(1) |
| Yerleştirmeli | Elemanı sıralı bölüme ekle | O(n²) | O(1) |
| Birleştirmeli | Böl, sırala, birleştir | O(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ı
- İyi bir problem tanımında hangi bilgiler bulunur?
- Faktöriyel algoritmasında 0 girdisi nasıl ele alınır?
- İkili arama neden sıralı veri ister?
- O(n) ile O(log n) neyi karşılaştırır?
- 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