Ödevi

Performans Görevi Açıklaması ve Yardımcı Adımlar

Görev:
Bu performans görevi size sıralama ve arama algoritmalarını analiz etme, algoritmalar için akış şeması oluşturma, seçtiğiniz algoritmanın işleyişini sözde kod ve akış şemasıyla ifade etme görevlerini içeriyor. Çalışmanızı sınıf arkadaşlarınıza sunmanız bekleniyor.

Burada verilen yönergelere göre detaylı bir çalışma gerekmektedir. Aşağıda, adım adım nasıl ilerlemeniz gerektiğini açıklıyorum:


Adım 1: Algoritma Türünü ve Örnek Algoritmayı Seçin

Algoritma Türleri ikiye ayrılıyor:

  1. Sıralama Algoritmaları: Bubble Sort (Babil Sort), Quick Sort vb.
  2. Arama Algoritmaları: Binary Search (İkili Arama) vb.

Örnek: Basit bir sıralama algoritması olarak Bubble Sort seçebilirsiniz ya da arama algoritmaları üzerinden Binary Search odaklanabilirsiniz.


Adım 2: Algoritmanın İşleyişini Tespit Edin

Seçeceğiniz algoritmanın:

  • Doğal dilde işleyişini net olarak açıklayın. Örneğin, “Bubble Sort elemanları bitişik karşılaştırarak sıralar ve en büyük elemanı en alta taşır.”
  • Bu açıklama algoritmanın mantığını ve adımlarını anlaşılır şekilde ifade etmelidir.

Adım 3: Akış Şemasını Çizin

Algoritmanın tüm adımlarını gösterecek bir akış şeması oluşturmanız gerekiyor. Akış şeması şunları içermeli:

  • Karar noktaları: Örneğin “Elemanları karşılaştırıyor mu?” veya “Daha büyük mü?”
  • Döngü ve işlemler: Algoritma hangi döngülerde ilerler? Döngü sonunda ne olur?
  • Çizim için: Çevrimiçi araçlar kullanabilirsiniz (Lucidchart, draw.io veya Canva gibi).

Adım 4: Sözde Kod (Pseudocode) Yazımı

Sözde kod, basit bir programlama dili olmadan algoritmanın mantığını ifade eder. Örnek bir Bubble Sort sözde kodu:

Başla
Dizi uzunluğunu belirle n
Döngü: i=0'dan n-1'e kadar
   Döngü: j=0'dan n-i-1'e kadar
      Eğer dizi[j] > dizi[j+1] ise:
         Elemanları değiştir
Bitir

Adım 5: Algoritmayı Test Edin

Algoritma doğru çalışıyor mu? Bunun için:

  • Test senaryoları oluşturun. Örneğin bir dizi sıralayan Bubble Sort için karmaşık bir dizinin girişlerini verin:
    Giriş: [5, 3, 8, 4, 1]
    Çıkış: [1, 3, 4, 5, 8]
  • Sonuçları kontrol edin, algoritmanın doğru yanıt verdiğini görebilecek kriterler koyun.

Adım 6: Rapor Hazırlama

Çalışmanızı açıklayan kapsamlı bir rapor oluşturmalısınız:

  • Akış şeması ve sözde kod.
  • Algoritmanın nasıl çalıştığı, neden bu algoritmanın seçildiği ve ne tür problemleri çözdüğü.
  • Algoritma analizi: Zaman karmaşıklığı ve verimlilik.

Adım 7: Sunum ve Paylaşım

Performans görevinizin sonucu sınıf arkadaşlarınıza sunulacak. Bu adımda:

  • Akış şeması, sözde kod ve test sonuçlarını içeren net bir sunum hazırlayın.
  • Görsellik ve anlaşılabilirlik sunum sırasında en önemli unsurdur.

Analiz ve Değerlendirme

Analitik dereceli değerlendirme anahtarı, işlerliğinizin ne kadar iyi olduğunu ölçmek için kullanılır. QR kodu tarayarak görev puanlama kriterlerine ulaşabilirsiniz.


Ek Not: Eğer Bubble Sort veya herhangi bir algoritmayı daha karmaşık bulursanız, daha basit bir algoritma seçebilir veya detaylı bir rehber ile daha kolay uygulama yöntemleri öğrenebilirsiniz.

Eğer daha fazla detay ya da örnek sözde kod ve akış şeması için yardımcı olmamı istiyorsanız, lütfen bana ulaşın! :blush:

@username

Performans Görevi: Sıralama ve Arama Algoritmalarının Analizi

Answer:

Aşağıdaki rehberde, bir sıralama (örneğin Bubble Sort veya Quick Sort) ve bir arama (örneğin Doğrusal Arama/Linear Search veya İkili Arama/Binary Search) algoritmasının:

  1. Akış şemasını
  2. Sözde kod (pseudocode) örneğini
  3. Temel analiz ölçütlerini (verimlilik, karmaşıklık vb.)

inceleyebilirsiniz. Ardından projenizde istenen raporu oluşturup sınıf arkadaşlarınıza sunabilirsiniz.


1. Sıralama Algoritması: Örnek Bubble Sort

a) Algoritmik Doğal Dil İfadesi

Bubble Sort, liste içindeki sayıları sırayla karşılaştırarak, yanlış sıralanan elemanları yer değiştirerek çalışan basit bir sıralama yöntemidir. Küçük veya orta boyutlu listeler için uygulanabilir, ancak büyük listelerde daha verimsiz kalır.

  • Listeyi baştan sona tara.
  • Yan yana duran iki elemanı kontrol et. Eğer soldaki sağdakinden büyükse, yerlerini değiştir.
  • Bu işlem, dizinin sonuna kadar devam etsin.
  • Her tarama turunda en büyük elemanlar listenin sonuna doğru “kabarcık” gibi taşınır.
  • Kaçıncı turdaysak, sondaki o kadar eleman zaten sıralanmıştır ve artık onlar kontrol edilmez.
  • Bütün elemanlar sıralanana kadar bu turlara devam edilir.

b) Akış Şeması

Aşağıdaki basitleştirilmiş akış şemasında, bir dizi/array üzerinde Bubble Sort’un nasıl çalıştığı gösterilmektedir:

   ┌─────────────────────────────┐
   │  Başla                     │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  i = 0                      │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  Dizi uzunluğu = n         │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  Dizi sıralandı mı?        │
   │ (i < n - 1 ise devam et)   │
   └─────────────────────────────┘
         ┌───────────┴───────────┐
         │          Evet         │
         │ (i >= n - 1)          │
         ↓                       │
  ┌─────────────────────────────┐ │
  │   Sonlandır                │ │
  └─────────────────────────────┘ │
         │                       │
         │ Hayır                │
         ↓                      
   ┌─────────────────────────────┐
   │  j = 0                      │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  j < n - 1 - i ?            │
   └─────────────────────────────┘
         ┌───────────┴───────────┐
         │         Evet          │
         ↓                       │
   ┌─────────────────────────────┐
   │  Eğer dizi[j] > dizi[j+1], │
   │  yer değiştir.             │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  j = j + 1                  │
   └─────────────────────────────┘
              ↓
              ──────────────────┘  (Döngüye geri dön)
   
   ┌─────────────────────────────┐
   │  i = i + 1                  │
   └─────────────────────────────┘
              ↓
              ──────────────────┘  (Döngüye geri dön)

c) Sözde Kod (Pseudocode)

Aşağıda Bubble Sort’un basit bir sözde kod örneği verilmiştir (dizi adı “A”, uzunluğu “n”):

BUBBLE_SORT(A, n):
    for i from 0 to n-2:
        for j from 0 to n-2-i:
            if A[j] > A[j+1]:
                temp = A[j]
                A[j] = A[j+1]
                A[j+1] = temp
  • Dış döngü: Dizideki elemanların en fazla n-1 kez elden geçirilmesi gerekiyorsa.
  • İç döngü: Her aşamada yan yana iki eleman karşılaştırılır ve ters sıradaysa yer değiştirilir.

d) Performans Analizi

  • Zaman Karmaşıklığı:
    • En kötü ve ortalama durumda: O(n^2)
    • En iyi durumda (dizi zaten sıralıysa): O(n)
  • Ek Bellek Kullanımı: Sabittir, O(1). (Dizinin içinde yer değiştirme yapar)
  • Verimlilik & Kullanım Senaryosu: Basitliği nedeniyle eğitim amaçlı veya çok küçük veri kümeleri için uygundur; büyük boyutlu verilerde Quick Sort, Merge Sort gibi daha verimli algoritmalar tercih edilir.

2. Arama Algoritması: Örnek İkili Arama (Binary Search)

a) Algoritmik Doğal Dil İfadesi

İkili Arama, sıralanmış bir listede istenen elemanı verimli şekilde bulmayı hedefler. Listenin ortasındaki elemanla aranan değer karşılaştırılır; aranan değer ortadaki elemandan küçükse sol yarıda, büyükse sağ yarıda aramaya devam edilir. Bu şekilde her adımda arama alanı yarıya düşer.

  • Başlangıçta liste sıralı olmalıdır.
  • Listenin orta elemanını bul.
  • Orta eleman aradığın değer mi? Evetse durdur, değilse;
    • Eğer aradığın değer ortadan küçükse aramayı listenin sol alt yarısında sürdür,
    • Büyükse sağ alt yarısında sürdür.
  • Aranan değer bulunana veya alt arama alanı kalmayana kadar devam et.

b) Akış Şeması

   ┌─────────────────────────────┐
   │     Başla                  │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  sol = 0, sag = n - 1      │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  sol <= sag ?              │
   └─────────────────────────────┘
         ┌───────────┴───────────┐
         │        Hayır          │
         ↓                       │
   ┌─────────────────────────────┐
   │ Eleman Bulunamadı          │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │          Bitir             │
   └─────────────────────────────┘
         │        Evet          
         ↓                      
   ┌─────────────────────────────┐
   │  orta = (sol + sag) / 2    │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │  A[orta] == aranan?        │
   └─────────────────────────────┘
         ┌───────────┴───────────┐
         │        Evet           │
         ↓                       │
   ┌─────────────────────────────┐
   │ Eleman Bulundu             │
   └─────────────────────────────┘
              ↓
   ┌─────────────────────────────┐
   │           Bitir            │
   └─────────────────────────────┘
         │       Hayır          
         ↓                      
   ┌─────────────────────────────┐
   │  A[orta] > aranan?         │
   └─────────────────────────────┘
         ┌───────────┴───────────┐
         │        Evet           │
         ↓                       │
   ┌─────────────────────────────┐
   │  sag = orta - 1            │
   └─────────────────────────────┘
              ↓
              ──────────────────┘ (Döngü başına dön)
         │       Hayır          
         ↓                      
   ┌─────────────────────────────┐
   │  sol = orta + 1            │
   └─────────────────────────────┘
              ↓
              ──────────────────┘ (Döngü başına dön)

c) Sözde Kod (Pseudocode)

BINARY_SEARCH(A, n, aranan):
    sol = 0
    sag = n - 1
    while sol <= sag:
        orta = (sol + sag) // 2
        if A[orta] == aranan:
            return orta
        else if A[orta] > aranan:
            sag = orta - 1
        else:
            sol = orta + 1
    return -1  // Eleman bulunamadı
  • Döngü Koşulu: “sol” indis, “sag” indisi ile çakışana kadar devam eder.
  • Aralık Daraltma: Her kıyaslamadan sonra arama alanı yarı yarıya küçülür.

d) Performans Analizi

  • Zaman Karmaşıklığı: O(\log n) — sıralanmış verilerde oldukça etkilidir.
  • Ek Bellek Kullanımı: O(1). Temel değişkenlerle çalışır.
  • Verimlilik & Kullanım Senaryosu: Büyük sıralı veri kümelerinde arama amaçları için idealdir. Unutmayın ki dizi sıralı olmazsa önce sıralamak gerekir (o zaman ek bir O(n \log n) sıralama maliyeti oluşur).

3. Proje/Ödevinizde Raporlama ve Sunum

  1. Rapor Bölümleri

    • Giriş: Hangi sıralama ve arama algoritmalarını seçtiğinizi ve ne amaçla kullandığınızı kısaca açıklayın.
    • Yöntem:
      • Akış şemaları
      • Sözde kod
      • Algoritmanın doğal dilde anlatımı
    • Analiz ve Sonuç:
      • Zaman karmaşıklığının ve varsa bellek kullanımının tablolarla açıklanması
      • Test ettiğiniz örnek giriş verileri ve aldığınız örnek çıktı sonuçları
    • Yorum ve Öneriler: İyileştirme yollarını, farklı veri büyüklüklerinde performans analizlerini kısaca tartışın.
  2. Sunum

    • Slaytlar veya Poster: Akış şeması ve sözde kodu görsellerle vurgulayın.
    • Canlı Demo (Opsiyonel): Eğer bir programlama dilinde kodladıysanız, kısa bir örnek çalıştırma gösterebilirsiniz.
    • Sık Sorulan Sorular: Algoritmanın avantajları, dezavantajları veya benzer alternatifler gibi ek bilgileri paylaşın.
  3. Örnek Tablo ile Karmaşıklık Karşılaştırması
    Aşağıdaki gibi basit bir tablo hazırlayabilirsiniz (sadece örnek değerlerdir):

Algoritma En İyi Durum Ortalama Durum En Kötü Durum Ek Bellek
Bubble Sort O(n) O(n^2) O(n^2) O(1)
Quick Sort O(n log n) O(n log n) O(n^2) O(log n)
Doğrusal Arama O(1) O(n) O(n) O(1)
İkili Arama O(1) O(log n) O(log n) O(1)

4. Son Öneriler

  • Kullanacağınız Araçlar:
    • Çevrimiçi akış şeması oluşturucular (örn. draw.io, Lucidchart vb.)
    • Düz metin düzenleyici veya herhangi bir IDE (ör. Code::Blocks, Visual Studio Code, vb.)
  • Test Senaryoları:
    • Rastgele veri listeleri
    • Ters sıralı listeler
    • Zaten sıralanmış listeler
  • Sunumda Dikkat Edilecek Noktalar:
    • Algoritmayı herkesin anlayabileceği şekilde basit örnekler üzerinden anlatın.
    • Akış şeması adım adım nasıl ilerlediğini gösterirken, test edeceğiniz küçük örnekler (örneğin 5 veya 6 elemanlık bir liste) üzerinden gösterim yapın.

Kaynakça (Örnek):

  • Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.
  • Knuth, Donald (2022). The Art of Computer Programming.
  • Open Data Structures, Pat Morin (Online kaynak).

Bu rehberi kullanarak seçtiğiniz sıralama ve arama algoritmaları için akış şeması, sözde kod, doğal dil anlatımı ve performans analizi içeren kapsamlı bir rapor ve sunum hazırlayabilir, farklı örnekler ve test senaryolarıyla çalışmanızı zenginleştirebilirsiniz.

@username

Bu Performans Görevi Nasıl Hazırlanır?

Cevap:
Aşağıda, sıralama (sorting) ve arama (search) algoritmalarını temel alarak bir performans görevinin nasıl hazırlanacağına dair detaylı bir rehber bulacaksınız. Bu rehberde; algoritma seçimi, akış şeması (flowchart) tasarlama, sözde kod (pseudocode) yazma, test senaryoları oluşturma ve analiz raporu hazırlamaya kadar pek çok aşama yer almaktadır. Her bir aşamayı dikkatlice takip ederek görevde beklenen çıktıları elde edebilirsiniz.


İçindekiler

  1. Algoritma Hakkında Temel Bilgiler
  2. Sıralama Algoritmaları
  3. Arama Algoritmaları
  4. Akış Şeması (Flowchart) Nasıl Hazırlanır?
  5. Sözde Kod (Pseudocode) Nasıl Yazılır?
  6. Algoritma Seçimi ve Performans Analizi
  7. Analiz Raporu ve Sunum Hazırlama
  8. Örnek Test Senaryoları ve Uygulama
  9. Örnek Bir Akış Şeması ve Sözde Kod
  10. Özet Tablo
  11. Sonuç ve Kapanış

Algoritma Hakkında Temel Bilgiler

Bir algoritma, belirli bir sorunu (problem) çözmek veya belirli bir görevi yerine getirmek için izlenen adımlar dizisidir. Bu adımlar mantıksal olarak tanımlanır ve her adımın net bir başlangıcı ve bitişi vardır. Algoritma yazarken şu temel unsurlara dikkat edilmelidir:

  • Girdi (Input): Algoritmanın işleyebilmesi için gereken veriler.
  • Çıktı (Output): Algoritmanın sonucunda elde edilmesi beklenen veriler.
  • İşlem (Operation): Veriler üzerinde yapılan işlemler dizisi.
  • Sonlandırma (Termination): Algoritmanın ne zaman ve hangi koşulda sonlanacağı.

Sıralama ve arama algoritmaları, veri yapıları ve yazılım geliştirme açısından en çok kullanılan ve üzerinde durulan konular arasındadır. Bu algoritmaların analizi, performans yazılımlarında ve veri işlem süreçlerinde kritik bir rol oynar.


Sıralama Algoritmaları

Bir sıralama algoritması, belirli bir veri kümesindeki (dizi, liste vb.) elemanları, belirtilen bir kritere göre (artan, azalan vb.) yeniden düzenleyen algoritmadır. Bu algoritmaların performansı genellikle zaman karmaşıklığı (time complexity) ve bellek kullanımı (space complexity) ile değerlendirilir. Aşağıda en yaygın sıralama algoritmalarından bazıları bulunmaktadır.

2.1 Bubble Sort (Babil Sıralaması)

  • Özellikler:
    • Mantığı oldukça basittir.
    • Ardışık iki eleman karşılaştırılır, yanlış sıradaysa yerleri değiştirilir. Bu işlem, dizi tamamen sıralanana kadar tekrar eder.
  • Zaman Karmaşıklığı: En kötü durumda ve ortalama durumda O(n^2).
  • Bellek Kullanımı: Genellikle ek bellek (ekstra dizi gibi) gerektirmez, yani O(1).
  • Kullanım Senaryoları: Küçük veri kümelerinde veya algoritma eğitimi amaçlı örnek olarak kulanılır.

2.2 Quick Sort (Hızlı Sıralama)

  • Özellikler:
    • “Böl ve yönet” (divide and conquer) yaklaşımı kullanır.
    • Bir pivot eleman seçilir ve diğer elemanlar pivottan küçük ve büyük olarak iki gruba ayrılır. Daha sonra bu gruplar için algoritma özyinelemeli (recursive) olarak çalışır.
  • Zaman Karmaşıklığı:
    • En iyi durumda: O(n \log n)
    • En kötü durumda: O(n^2) (kötü pivot seçimi durumunda)
  • Bellek Kullanımı: Özyinelemeli yapı, derin stack kullanımına neden olabilir, ancak genelde ek bellek kullanımı O(\log n) civarındadır.
  • Kullanım Senaryoları: Büyük veri kümelerinde hızlı sonuç verir. Pivot seçimine bağlı olarak gerçek hayatta oldukça verimli çalışır.

2.3 Insertion Sort (Eklemeli Sıralama)

  • Özellikler:
    • Dizi elemanlarını tek tek alıp, sıralanmış kısımda doğru yerine “ekleyerek” ilerler.
    • Kodlaması nispeten kolaydır.
  • Zaman Karmaşıklığı:
    • En iyi durumda (dizi zaten sıralıysa): O(n)
    • Ortalama ve en kötü durumda: O(n^2)
  • Bellek Kullanımı: Ek bellek gerektirmediği için O(1).
  • Kullanım Senaryoları: Küçük veya kısmen sıralı listelerde çok hızlıdır.

2.4 Selection Sort (Seçmeli Sıralama)

  • Özellikler:
    • Her turda dizinin en küçük (veya en büyük) elemanını bulup, dizinin başına (veya sonuna) yerleştirir.
  • Zaman Karmaşıklığı: Her durumda O(n^2).
  • Bellek Kullanımı: Ek bellek gerektirmediği için O(1).
  • Kullanım Senaryoları: Uygulamada tercih edilmez, ancak öğrenme amaçlı basitliği nedeniyle yaygındır.

2.5 Merge Sort (Birleştirmeli Sıralama)

  • Özellikler:
    • “Böl ve yönet” prensibini kullanır. Dizi, ortadan iki parçaya ayrılır, her parça özyinelemeli olarak sıralanır ve sonra bu sıralanmış parçalar birleştirilerek (merge) tam sıralı dizi oluşturulur.
  • Zaman Karmaşıklığı: En iyi, ortalama ve en kötü durum O(n \log n).
  • Bellek Kullanımı: Ek bellek gereksinimi $O(n)$’dir, çünkü birleştirme aşamasında yarı büyüklükte ek diziler kullanılır.
  • Kullanım Senaryoları: Büyük veri setlerinde, sabit bir performans garantisi sunduğu için idealdir.

Arama Algoritmaları

Bir arama algoritması, bir veri yapısı içindeki hedef (aranan) öğenin konumunu bulmak veya öğenin varlığını doğrulamak için kullanılır. Yol gösterici iki temel arama algoritması:

3.1 Lineer Arama (Linear Search)

  • Özellikler:
    • En basit yöntem. Dizinin başından sonuna kadar tek tek kontrol eder.
  • Zaman Karmaşıklığı: En kötü ve ortalama durumda O(n).
  • Kullanım Senaryoları: Sıralanmamış veya küçük boyutlu veri listelerinde uygulanır.

3.2 İkili Arama (Binary Search)

  • Özellikler:
    • Yalnızca sıralı veri setlerinde uygulanabilir.
    • Dizinin orta elemanına bakılarak aranan öğenin nerede olabileceği yarıya düşürülür; bu süreç tekrarlanarak devam eder.
  • Zaman Karmaşıklığı: En kötü ve ortalama durumda O(\log n).
  • Kullanım Senaryoları: Sıralı büyük veri setlerinde son derece etkilidir.

Akış Şeması (Flowchart) Nasıl Hazırlanır?

Bir akış şeması, algoritmanın adımlarını görsel olarak gösteren diyagramlardır. Akış şeması hazırlarken şu noktalara dikkat etmelisiniz:

  1. Başlangıç ve Bitiş Simgesi (Terminator): Akış şemasının başlangıç ve bitiş noktalarını gösterir. Genellikle oval şeklinde semboller kullanılır (Start, End).
  2. Giriş/Çıkış Simgesi (Input/Output): Veri girişi veya veri çıkışı işaretlerini gösterir. Paralelkenar (rhombus benzeri) şekiller kullanılır.
  3. İşlem Simgesi (Process): Algoritmada yapılan adımları (toplama, çıkarma, karşılaştırma) temsil eder. Dikdörtgen şeklinde semboller kullanılır.
  4. Karar Simgesi (Decision): Koşul (if…else) sorgulamalarının yapıldığı noktalardır. Genellikle eşkenar dörtgen (diamond) şekli kullanılır.
  5. Oklar (Flow Lines): İşlemlerin izleyeceği yönü gösteren ok işaretleridir.

Akış şemasını çizerken:

  • Her adımı net bir şekilde tanımlamaya özen gösterin.
  • Kararların (if, while, for) net koşullarını semboller üzerinde belirtin.
  • Hangi noktada döngünün biteceği, hangi noktada algoritmadan çıkılacağı açık şekilde gösterilmelidir.

Sözde Kod (Pseudocode) Nasıl Yazılır?

Sözde kod (pseudocode), bir programlama dilinin kesin sözdizimi kurallarına (C, C++, Java vb.) bağlı kalmadan, algoritmayı kendi dilimizde betimleyen bir ifade biçimidir. Yazarken şu ilkelere dikkat edilir:

  1. Okunabilirlik: Gereksiz karmaşık ifadelerden kaçınılmalı, adımlar basitçe belirtilmelidir.
  2. Standart Yapı: Değişken atamalarında veya = sembolleri, IF, ELSE, WHILE, FOR gibi karar ve döngü yapılarının açıkça vurgulanması önerilir.
  3. Yorumlar: Gerekli yerlerde algoritmanın ne yaptığını açıklayan yorumlar eklemek, daha anlaşılır bir kod sunar.
  4. Girdi ve Çıktı Tanımları: Hangi veriyi aldığımız (INPUT) ve hangi veriyi dışarıya verdiğimiz (OUTPUT) net olmalıdır.

Örneğin, bir diziyi ters çevirmek isteyen bir sözde kod şöyle olabilir:

ALGORITMA DiziyiTersCevir(Dizi):
    BAŞLA
        SOL ← 0
        SAG ← DiziUzunlugu(Dizi) - 1
  
        DÖNGÜ (SOL < SAG) YAP
            GEÇİCİ ← Dizi[SOL]
            Dizi[SOL] ← Dizi[SAG]
            Dizi[SAG] ← GEÇİCİ
  
            SOL ← SOL + 1
            SAG ← SAG - 1
        DÖNGÜ SON
  
        ÇIKTI Dizi
    BİTİR

Bu yapı, tipik bir sözde kod örneğidir.


Algoritma Seçimi ve Performans Analizi

Performans görevinizde öncelikle hangi sıralama veya arama algoritmasını seçeceğinizi belirleyin. Kararınızı verirken:

  • Veri Kümesinin Boyutu: Büyük veri kümelerinde O(n^2) karmaşıklığa sahip sıralama algoritmalarını kullanmak verimli olmayacaktır.
  • Veri Kümesinin Sıralı Olma Derecesi: Bazı algoritmalar kısmen sıralı veride daha iyi performans gösterir (Örneğin, Insertion Sort).
  • Donanım Sınırlamaları: Çok fazla bellek kullanımı mümkün değilse, bellek verimliliği önemli olabilir.

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

Algoritmanın giriş (input) boyutu büyüdükçe çalışma zamanının nasıl arttığını ifade eden fonksiyondur. Big-O notasyonu ile gösterilir. Örnek:

  • Bubble Sort → O(n^2)
  • Merge Sort → O(n \log n)
  • Binary Search → O(\log n)

6.2 Bellek Kullanımı (Space Complexity)

Algoritmanın ek bellek (extra memory) kullanımını ifade eder. Örnek:

  • Quick Sort → O(\log n) (özyineleme derinliği)
  • Merge Sort → O(n) (birleştirme aşamasında ek dizi)

Analiz Raporu ve Sunum Hazırlama

Görevde sizden, akış şeması, sözde kod ve algoritmanın analizini içeren bir rapor hazırlamanız isteniyor. Raporunuzda şu bölümler bulunmalıdır:

  1. Giriş:

    • Hangi problemi çözmek istiyorsunuz (sıralama/arama)?
    • Neden bu algoritmayı seçtiniz? Kısa bir tanıtım yazısı.
  2. Teorik Arkaplan (Literatür Özeti):

    • Seçtiğiniz algoritmanın yapısı, çalışma prensibi, tarihçesi (kısaca).
    • Benzer algoritmalarla kıyaslamalar (zaman karmaşıklığı, bellek kullanımı).
  3. Algoritmanın Adım Adım Açıklaması:

    • Sözde kod.
    • Akış şeması (flowchart).
    • Örnek girdi ve çıktı (dizi veya değer seti).
  4. Performans Analizi:

    • Büyük O Notasyonu ile analiz.
    • Ortalama, en iyi ve en kötü durum kıyaslaması.
    • Tablo veya grafiklerle ek açıklamalar.
  5. Uygulama/Test Sonuçları:

    • Belirli girdi boyutları (ör. 10, 100, 1000 eleman) için çalıştırma süreleri.
    • Eğer mümkünse bellek kullanım istatistikleri.
  6. Sonuç ve Değerlendirme:

    • Elde ettiğiniz sonuçları yorumlayın.
    • Öğrendiğiniz noktaları özetleyin.
    • Hangi durumda bu algoritmanın uygun veya yetersiz kalacağını açıklayın.
  7. Kaynaklar:

    • Faydalandığınız ders notları, kitaplar, çevrimiçi kaynakların referansları.

Sunum Hazırlama:

  • Her bölümün içeriklerini özetleyen slaytlar (PowerPoint, Google Slides vb.) oluşturabilirsiniz.
  • Akış şemasını ve sözde kodu sunumda görsel olarak sergileyin.
  • Performans analizinden elde ettiğiniz tablo veya grafiklerden bahsedin.

Örnek Test Senaryoları ve Uygulama

Algoritmalarınızı test etmek için farklı boyutlarda ve farklı özelliklerde veri kümeleri seçebilirsiniz. Örneğin:

  1. Küçük Boyutlu Veri Kümesi (10 Eleman):

    • Kolaylıkla adım adım ilerletip, akış şemasını üç beş adımda takip edebilirsiniz. Bu aşamada algoritmanın mantığını test edersiniz.
  2. Orta Boyutlu Veri Kümesi (100 Eleman):

    • Küçük testte doğru çalışan algoritmanın performansını biraz daha gözlemleyebilirsiniz.
    • Çalışma süresi hakkında kaba bir fikir edinirsiniz.
  3. Büyük Boyutlu Veri Kümesi (10.000+ Eleman):

    • Asıl performans farklarını bu boyutta hissedersiniz. O(n^2) algoritmaların yavaşlığı, O(n \log n) algoritmalarla kıyaslandığında oldukça belirginleşir.

Veri Tipi ve Özelliği:

  • Tamamen karışık (random) veriler.
  • Kısmen sıralı (ör. ilk yarı sıralı, ikinci yarı karmaşık).
  • Ters sıralı (descending) veriler.

Algoritma testlerinizi belgelemek için tablo veya grafikler oluşturabilirsiniz. Örneğin, bir tablo satırında n değerini, diğer satırlarda çalışma sürelerini veya döngü sayılarını gösterebilirsiniz.


Örnek Bir Akış Şeması ve Sözde Kod

Aşağıda Bubble Sort algoritması için basit bir akış şeması ve sözde kod örneği sunuyoruz. Elbette sınıfta veya ev ödevinizde Quick Sort vb. farklı algoritmaları da tercih edebilirsiniz.

9.1 Bubble Sort Akış Şeması (Örnek)

Aşağıdaki adımlar, kabarcık sıralamasının nasıl çalıştığını özetlemektedir:

  1. Dizi içindeki elemanlar arasında bir döngü başlat.
  2. Ardışık her iki elemanı karşılaştır. Eğer soldaki eleman sağdakinden büyükse, yerlerini değiştir.
  3. Bu işlemi dizi boyunca tekrar et.
  4. Tekrarlanması gereken tur sayısı, dizinin boyutunun bir eksiği kadardır (n-1).
  5. Dizinin tamamen sıralı olup olmadığı, en dış döngü turları sonunda kesinleşir.

Metin tabanlı gösterim:

      [START]
         |
    i = 0; j = 0
         |
   DİZİN [j] > DİZİN [j+1] ?
       /      \
     EVET      HAYIR
     /          \
 DİĞERİNLE DEĞİŞ  HİÇBİR ŞEY YAPMA
         |
       j = j+1
         |
      j < n - i - 1 ?
       /      \
     EVET     HAYIR
     /          \
    Devam       i=i+1, j=0
                   |
            i < n - 1 ?
               /   \
             EVET   HAYIR
              /       \
           Tekrarla    [END]

9.2 Bubble Sort Sözde Kod (Örnek)

ALGORITMA BubbleSort(Dizi):
    BAŞLA
        n ← DiziUzunlugu(Dizi)
        DÖNGÜ i ← 0 TO n-1 
            DÖNGÜ j ← 0 TO n-i-2 
                EGER Dizi[j] > Dizi[j+1] ISE
                    # Elemanların yerini değiştir
                    GECICI ← Dizi[j]
                    Dizi[j] ← Dizi[j+1]
                    Dizi[j+1] ← GECICI
                BITTI
            DÖNGÜ SON
        DÖNGÜ SON 
        ÇIKTI Dizi (Sıralı Halde)
    BİTİR

Bu kodda, i her turda dizinin sonundan bir elemanın yerleştiğini varsayar ve sonraki turda bir eksik eleman üzerinden geçer. j ise dizi içerisinde iki komşu elemanı karşılaştırıp, gerektiğinde yerlerini değiştirir.


Özet Tablo

Aşağıda, en yaygın sıralama algoritmalarının temel özelliklerini özetleyen bir tablo bulunmaktadır:

Algoritma Zaman Karmaşıklığı (Ortalama) Zaman Karmaşıklığı (En Kötü) Bellek Kullanımı Yaklaşım Kullanım Senaryosu
Bubble Sort O(n^2) O(n^2) O(1) Karşılaştırmalı Basit eğitim amaçlı örnek; küçük veri kümelerinde
Quick Sort O(n \log n) O(n^2) O(\log n) Böl ve yönet Büyük veri kümeleri; pivot seçimine dikkat
Insertion Sort O(n^2) O(n^2) O(1) Yerinde (in-place) Kısmen sıralı veya çok küçük veri kümelerinde
Selection Sort O(n^2) O(n^2) O(1) Yerinde (in-place) Genelde eğitim amaçlı; pratikte çok tercih edilmez
Merge Sort O(n \log n) O(n \log n) O(n) Böl ve yönet Stabil çalışma zamanı, büyük veri kümelerinde güvenilir performans

Bu tablodan da görülebileceği gibi her algoritmanın kendi avantaj ve dezavantajları vardır. Projenizde bu tabloyu temel alarak seçtiğiniz algoritmanın artılarını ve eksilerini analiz edebilirsiniz.


Sonuç ve Kapanış

Bu performans görevi kapsamında şunlara odaklanmalısınız:

  • Algoritma Seçimi: Sıralama (Bubble Sort, Quick Sort, Merge Sort vb.) ya da arama (Linear Search, Binary Search) algoritmalarından bir veya birkaçını seçin.
  • Akış Şeması Hazırlama: Seçtiğiniz algoritmanın adımlarını çizerek görsel olarak ifade edin.
  • Sözde Kod Yazma: Daha sonra gerçek programlama diline geçmeden önce algoritmanın mantığını sade bir dille ifade eden sözde kod oluşturun.
  • Test ve Doğrulama: Oluşturduğunuz akış şeması ve sözde kodun doğruluğunu, örnek veri kümeleri ve test vakalarıyla değerlendirin.
  • Analiz Raporu Oluşturma: Seçtiğiniz algoritmanın teori, performans, karmaşıklık analizi ve uygulama sonuçlarını raporlayın. Slayt sunumu vb. araçlarla sınıf arkadaşlarınıza anlatın.

Uzun lafın kısası, bu görev size algoritma tasarımı, kodlama mantığı, performans analizi gibi birçok temel kavramı bir arada deneyimleme fırsatı sunuyor. Kurallara ve adımlara dikkat edip, akış şemaları ile sözde kod örneklerini içeren detaylı bir çalışma yaparsanız, hem öğretici hem de yüksek puan getirecek nitelikte bir proje ortaya koyarsınız.

Ayrıca, algoritmaların farklı veri kümeleriyle (küçük, orta ve büyük boyutlu, sıralı veya kısmen sıralı) nasıl sonuçlar verdiğini denemeniz, rapora eklediğiniz tablolar ve grafiklerle bu sonuçları desteklemeniz oldukça faydalı olacaktır.

Bu rehberi temel alarak, siz de kendi projenizde Quick Sort veya Binary Search gibi daha gelişmiş algoritmaları seçebilir ve bu örnekleri sunumunuzda kullanabilirsiniz.
İyi çalışmalar ve başarılar dileriz!

@Ayse_Korkusuz