🔍 6.1: Lineer Arama (Linear Search)

En Basit Arama Algoritması

📌 Lineer Arama Nedir?

Lineer Arama (Linear Search), bir dizide aranan elemanı bulmak için baştan sona tüm elemanları tek tek kontrol eden en basit arama algoritmasıdır.

🎯 Algoritma Mantığı

  1. Dizinin ilk elemanından başla
  2. Mevcut elemanı aranan değerle karşılaştır
  3. Eşleşme varsa → indeksi döndür (BULUNDU!)
  4. Eşleşme yoksa → sonraki elemana geç
  5. Dizi bitene kadar tekrarla
  6. Hiç bulunamazsa → -1 döndür (YOK!)

🎮 İnteraktif Lineer Arama Simülasyonu

🎯 Bir sayı girin ve "Ara" butonuna tıklayın...

📊 Zaman Karmaşıklığı Analizi

En İyi Durum

O(1)

Aranan eleman ilk sırada

Ortalama Durum

O(n/2) = O(n)

Ortalama ortada bulunur

En Kötü Durum

O(n)

Sonda veya hiç yok

💡 Alan Karmaşıklığı: O(1)

Sadece birkaç değişken kullanır (i, target). Ek bellek gerekmez.

💻 Python Implementasyonu

Python Kodu
def linear_search(arr, target):
    """
    Lineer Arama Algoritması

    Args:
        arr: Aranacak dizi
        target: Aranan değer

    Returns:
        Bulunursa indeks, bulunamazsa -1
    """
    for i in range(len(arr)):
        print(f"Adım {i+1}: arr[{i}] = {arr[i]}", end="")

        if arr[i] == target:
            print(f" ✅ BULUNDU!")
            return i
        else:
            print(f" ❌ {arr[i]} ≠ {target}")

    print("Eleman dizide bulunamadı!")
    return -1

# Test
dizi = [64, 34, 25, 12, 22, 11, 90, 45]
print(f"Dizi: {dizi}")
print(f"Aranan: 22\n")

sonuc = linear_search(dizi, 22)
print(f"\nSonuç: İndeks = {sonuc}")

print("\n" + "="*50)
print("Olmayan bir eleman arayalım:")
print(f"\nAranan: 100\n")
sonuc2 = linear_search(dizi, 100)
print(f"\nSonuç: {sonuc2} (bulunamadı)")
Çıktı bekleniyor...

🔄 Farklı Varyasyonlar

1. Tüm Eşleşmeleri Bulma

Python Kodu
def find_all(arr, target):
    """Tüm eşleşen indeksleri döndürür"""
    indices = []
    for i in range(len(arr)):
        if arr[i] == target:
            indices.append(i)
    return indices

# Test
dizi = [5, 3, 7, 3, 8, 3, 2, 3]
print(f"Dizi: {dizi}")
print(f"Aranan: 3")

sonuclar = find_all(dizi, 3)
print(f"Bulunan indeksler: {sonuclar}")
print(f"Toplam {len(sonuclar)} adet bulundu!")
Çıktı bekleniyor...

2. Minimum/Maksimum Bulma

Python Kodu
def find_min_max(arr):
    """Dizideki minimum ve maksimum değerleri bulur"""
    if len(arr) == 0:
        return None, None

    min_val = arr[0]
    max_val = arr[0]

    for i in range(1, len(arr)):
        if arr[i] < min_val:
            min_val = arr[i]
        if arr[i] > max_val:
            max_val = arr[i]

    return min_val, max_val

# Test
dizi = [64, 34, 25, 12, 22, 11, 90, 45]
print(f"Dizi: {dizi}")

minimum, maksimum = find_min_max(dizi)
print(f"Minimum: {minimum}")
print(f"Maksimum: {maksimum}")
Çıktı bekleniyor...

✅ Avantajları ve ❌ Dezavantajları

✅ Avantajları

  • Basit: Anlaması ve yazması çok kolay
  • Sıralama gerektirmez: Karışık dizilerde çalışır
  • Az bellek: O(1) ek alan
  • Küçük dizilerde hızlı: n < 100 için yeterli
  • Linked List'te çalışır: Rastgele erişim gerekmez

❌ Dezavantajları

  • Yavaş: Büyük dizilerde O(n) çok yavaş
  • Her seferinde tarama: Cache'leme yok
  • Verimsiz: Sıralı dizilerde bile O(n)

🌍 Ne Zaman Kullanılır?