🕰️ 1.2: C Dizileri ve Kaydırma Maliyeti

Neden Ekleme/Silme İşlemleri Yavaştır?

⚠️ Problem: Bitişik Bellek (Contiguous Memory)

Dizilerin elemanları bellekte yan yana, bitişik durmak zorundadır. Araya bir eleman eklemek isterseniz, o noktadan sonraki HERKESİ bir adım sağa itmeniz gerekir.

Durum: Hazır

👨‍💻 C Kodu ile İspat

Python'da insert() tek satırdır ama arka planda (C seviyesinde) şu işlem döner:

C Kodu (Low Level Logic)
// Bir dizinin 'pos' indeksine 'val' ekleme fonksiyonu
void insert(int arr[], int n, int pos, int val) {
    // 1. Sondan başlayıp 'pos'a kadar herkesi sağa kaydır
    //    Bu döngü O(N) kez çalışır!
    for (int i = n - 1; i >= pos; i--) {
        arr[i + 1] = arr[i]; 
    }
    
    // 2. Açılan boşluğa değeri yaz
    arr[pos] = val; 
}

Gördüğünüz gibi, for döngüsü veriyi kaydırmak için çalışır. Veri 1 milyon ise, döngü 1 milyon kez döner.

🧪 Python Hız Testi

Listenin başına eleman eklemenin maliyetini ölçelim.

Python Kodu
import time

def test_insert(n):
    lst = list(range(n))
    start = time.time()
    # En kötü senaryo: Başa ekle (Tüm N eleman kayar)
    lst.insert(0, 999)
    return (time.time() - start) * 1000 # ms

print("--- BAŞA EKLEME (insert(0)) ---")
t1 = test_insert(100_000)
print(f"100k eleman: {t1:.4f} ms")

t2 = test_insert(1_000_000)
print(f"1M   eleman: {t2:.4f} ms")

print(f"\nSonuç: Veri 10 kat arttı, süre {t2/t1:.1f} kat arttı!")
Çıktı bekleniyor...