Algoritma Temelleri ve Örnekleri
Programlama dünyasına ilk adım
Algoritma Nedir?
Algoritma, belirli bir problemi çözmek veya belirli bir görevi yerine getirmek için tasarlanmış, net bir şekilde tanımlanmış, adım adım talimatlar dizisidir.
Algoritmanın Temel Özellikleri:
- Kesinlik: Her adım açık ve net olmalıdır.
- Sonluluk: Algoritma belirli bir sayıda adım sonra sonlanmalıdır.
- Girdi-Çıktı: Belirli girdilere karşılık beklenen çıktıları üretmelidir.
- Etkililik: Her adım temel ve uygulanabilir olmalıdır.
- Genellik: Belirli bir problem sınıfındaki tüm örneklere uygulanabilir olmalıdır.
Günlük Hayattan Algoritma Örnekleri
Algoritmalar sadece bilgisayar bilimlerinde değil, günlük hayatımızda da kullanılır:
Çay Demleme Algoritması:
- Çaydanlığı su ile doldur.
- Suyu kaynat.
- Demliğe çay koy.
- Kaynayan suyu demliğe ekle.
- 5 dakika demlenmeye bırak.
- Çayı bardaklara koy ve servis et.
Algoritma Akış Şemaları
Akış şemaları, algoritmaların grafiksel olarak gösterimidir. Algoritma adımlarını ve karar yapılarını görsel olarak temsil ederler.
Akış Şeması Sembolleri:
- Oval (Başlangıç/Bitiş): Algoritmanın başlangıç ve bitiş noktalarını gösterir.
- Dikdörtgen (İşlem): Bir işlem veya atama adımını gösterir.
- Eşkenar Dörtgen (Giriş/Çıkış): Veri girişi veya çıkışını gösterir.
- Baklava (Karar): Koşula bağlı dallanmaları gösterir (Evet/Hayır).
- Oklar: Algoritma akışının yönünü gösterir.
Basit Bir Akış Şeması Örneği: Sayının Tek/Çift Kontrolü
┌─────────────┐ │ Başlangıç │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ Sayıyı │ │ Oku (N) │ └──────┬──────┘ │ ▼ ┌─────────────┐ │ Kalan = N % 2│ └──────┬──────┘ │ ▼ ┌──────┐ │Kalan │ │ == 0 ?│ └┬────┬┘ │ │ Evet│ │Hayır │ │ ▼ ▼ ┌────────┐ ┌────────┐ │"Çift" │ │ "Tek" │ │ Yazdır │ │ Yazdır │ └────┬───┘ └────┬───┘ │ │ ▼ ▼ ┌─────────────┐ │ Bitiş │ └─────────────┘
Sözde Kod (Pseudocode)
Sözde kod, algoritmaları programlama diline benzer ancak daha informal bir yapıda tanımlamak için kullanılır. Gerçek bir programlama dilinin sözdiziminden bağımsızdır.
Sözde Kod Avantajları:
- Algoritmanın mantığına odaklanmayı sağlar.
- Programlama dilinin sözdizimi detaylarından arındırılmıştır.
- İnsan tarafından kolayca okunabilir ve anlaşılabilir.
- Herhangi bir programlama diline çevrilebilir.
İki Sayının Maksimumunu Bulan Sözde Kod:
BAŞLA A ve B'yi OKU EĞER A > B İSE MAX = A DEĞİLSE MAX = B MAX'ı YAZDIR BİTİŞ
1’den N’e Kadar Sayıları Toplayan Sözde Kod:
BAŞLA N'yi OKU toplam = 0 DÖNGÜ i = 1'DEN N'E KADAR toplam = toplam + i DÖNGÜ SONU toplam'ı YAZDIR BİTİŞ
Temel Algoritma Örnekleri
Programlamaya başlarken sık karşılaşılan temel algoritma örnekleri:
Faktöriyel Hesaplama
n! = n × (n-1) × (n-2) × … × 2 × 1
Akış Şeması:
Sözde Kod:
BAŞLA N'yi OKU faktöriyel = 1 DÖNGÜ i = 1'DEN N'E KADAR faktöriyel = faktöriyel * i DÖNGÜ SONU faktöriyel'i YAZDIR BİTİŞ
Asal Sayı Kontrolü
Bir sayının sadece 1 ve kendisine bölünüp bölünmediğini kontrol eder.
Sözde Kod:
BAŞLA N'yi OKU EĞER N <= 1 İSE "Asal Değil" YAZDIR BİTİŞ asal = DOĞRU DÖNGÜ i = 2'DEN KAREKÖK(N)'E KADAR EĞER N % i == 0 İSE asal = YANLIŞ DÖNGÜDEN ÇIK DÖNGÜ SONU EĞER asal İSE "Asal Sayı" YAZDIR DEĞİLSE "Asal Değil" YAZDIR BİTİŞ
Sıralama Algoritmaları
Sıralama algoritmaları, bir diziyi belirli bir kritere göre (genellikle artan veya azalan) düzenler.
Kabarcık Sıralaması (Bubble Sort)
En basit sıralama algoritmalarından biridir. Yan yana olan elemanları karşılaştırıp gerekirse yerlerini değiştirir.
Algoritma Adımları:
- Dizinin ilk elemanından başla.
- Sıradaki elemanla karşılaştır. Eğer mevcut eleman bir sonraki elemandan büyükse, yerlerini değiştir.
- Dizinin sonuna kadar devam et.
- Hiç yer değiştirme yapılmayana kadar tüm diziyi tekrar kontrol et.
Sözde Kod:
BAŞLA dizi[n]'yi OKU DÖNGÜ i = 0'DAN n-1'E KADAR yer_değiştirme = YANLIŞ DÖNGÜ j = 0'DAN n-i-1'E KADAR EĞER dizi[j] > dizi[j+1] İSE dizi[j] ve dizi[j+1]'i YER DEĞİŞTİR yer_değiştirme = DOĞRU DÖNGÜ SONU EĞER yer_değiştirme == YANLIŞ İSE DÖNGÜDEN ÇIK DÖNGÜ SONU dizi'yi YAZDIR BİTİŞ
Örnek:
Başlangıç Dizisi: [5, 3, 8, 4, 2]
1. Geçiş: [3, 5, 4, 2, 8] 2. Geçiş: [3, 4, 2, 5, 8] 3. Geçiş: [3, 2, 4, 5, 8] 4. Geçiş: [2, 3, 4, 5, 8]
Seçmeli Sıralama (Selection Sort)
Her adımda dizideki en küçük (veya en büyük) elemanı bulur ve dizinin başına (veya sonuna) yerleştirir.
Sözde Kod:
BAŞLA dizi[n]'yi OKU DÖNGÜ i = 0'DAN n-1'E KADAR min_indeks = i DÖNGÜ j = i+1'DEN n-1'E KADAR EĞER dizi[j] < dizi[min_indeks] İSE min_indeks = j DÖNGÜ SONU EĞER min_indeks != i İSE dizi[i] ve dizi[min_indeks]'i YER DEĞİŞTİR DÖNGÜ SONU dizi'yi YAZDIR BİTİŞ
Ortalama Hesaplama Algoritmaları
Veri setlerinin ortalama değerlerini hesaplamaya yönelik algoritmalardır.
Aritmetik Ortalama
Bir veri setindeki tüm değerlerin toplamının eleman sayısına bölünmesidir.
Sözde Kod:
BAŞLA dizi[n]'yi OKU toplam = 0 DÖNGÜ i = 0'DAN n-1'E KADAR toplam = toplam + dizi[i] DÖNGÜ SONU ortalama = toplam / n ortalama'yı YAZDIR BİTİŞ
Örnek:
Dizi: [85, 90, 78, 92, 88]
Toplam: 85 + 90 + 78 + 92 + 88 = 433
Eleman Sayısı: 5
Ortalama: 433 / 5 = 86.6
Ağırlıklı Ortalama
Her elemanın farklı bir ağırlık değeri ile çarpılıp toplandıktan sonra ağırlıkların toplamına bölünmesidir.
Sözde Kod:
BAŞLA değerler[n] ve ağırlıklar[n]'yi OKU ağırlıklı_toplam = 0 ağırlık_toplamı = 0 DÖNGÜ i = 0'DAN n-1'E KADAR ağırlıklı_toplam = ağırlıklı_toplam + (değerler[i] * ağırlıklar[i]) ağırlık_toplamı = ağırlık_toplamı + ağırlıklar[i] DÖNGÜ SONU ağırlıklı_ortalama = ağırlıklı_toplam / ağırlık_toplamı ağırlıklı_ortalama'yı YAZDIR BİTİŞ
Örnek:
Değerler: [90, 85, 70]
Ağırlıklar: [3, 2, 1]
Ağırlıklı Toplam: (90*3) + (85*2) + (70*1) = 270 + 170 + 70 = 510
Ağırlık Toplamı: 3 + 2 + 1 = 6
Ağırlıklı Ortalama: 510 / 6 = 85
Algoritma Alıştırmaları
Algoritma becerilerinizi geliştirmek için aşağıdaki problemleri çözmeyi deneyin.
Alıştırma 1: Fibonacci Dizisi
İlk n Fibonacci sayısını hesaplayan bir algoritma yazın.
İpucu: Fibonacci dizisinde her sayı, kendisinden önceki iki sayının toplamıdır. İlk iki sayı 0 ve 1'dir.
Örnek çıktı (n=8):
0, 1, 1, 2, 3, 5, 8, 13
Alıştırma 2: En Büyük Ortak Bölen (EBOB)
İki sayının en büyük ortak bölenini bulan bir algoritma yazın.
İpucu: Öklid Algoritması kullanabilirsiniz.
Alıştırma 3: Palindrom Kontrolü
Bir metnin palindrom (tersten okunduğunda da aynı olan) olup olmadığını kontrol eden bir algoritma yazın.
Örnek:
"Kazak" -> Palindrom
"Kitap" -> Palindrom Değil
Alıştırma 4: Bir Sayının Rakamlarının Toplamı
Kullanıcıdan alınan bir sayının rakamlarının toplamını hesaplayan bir algoritma yazın.
Örnek:
12345 -> 1+2+3+4+5 = 15