Neden Ekleme/Silme İşlemleri Yavaştır?
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
Python'da insert() tek satırdır ama arka planda (C seviyesinde) şu işlem döner:
// 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.
Listenin başına eleman eklemenin maliyetini ölçelim.
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ı!")