Big O notasyonu, algoritma karmaşıklığını anlamak için kullanılan en temel ölçüm sistemidir. Aslında karmaşık bir matematik konusu değil; çok basit bir soruya cevap verir:
Bu kod büyüdükçe ne kadar yavaşlar?
Yani mesele milisaniye değil. Mesele büyüme davranışı.
10 veriyle çalışan bir kod, 1 milyon veriyle nasıl davranır?
Big O notasyonu tam olarak buna bakar.
Big O Notasyonu Neyi Ölçer?
Big O notasyonu şunları ölçmez:
-
Bilgisayarın işlemci hızını
-
Programlama dilini
-
RAM kapasitesini
Şunu ölçer:
Girdi büyüdükçe algoritmanın nasıl davrandığını.
Algoritma karmaşıklığı, performansın zamana karşı matematiksel profilidir. Bu kavramın akademik temelleri Donald Knuth’un analiz çalışmalarına dayanır. Örneğin Donald Knuth algoritma analizinin teorik çerçevesini sistemleştiren isimlerden biridir.
Algoritma analizi hakkında bilgilendirici kaynak
https://en.wikipedia.org/wiki/Analysis_of_algorithms
Neden Big O Notasyonu Önemlidir?
Küçük veride her kod çalışır.
Gerçek dünya projelerinde veri büyür.
Yanlış algoritma:
-
Sistemi yavaşlatır
-
Sunucuyu zorlar
-
Ölçeklenebilirliği bozar
-
Kullanıcı deneyimini düşürür
Bu yüzden Big O notasyonu, yazılımcının pusulasıdır.
Özellikle büyük veri sistemlerinde ve arama motorlarında, algoritma seçimi belirleyicidir. Örneğin Google milyarlarca veri üzerinde işlem yaparken logaritmik ve optimize edilmiş algoritmalar kullanır. Çünkü O(n²) bir yaklaşım orada mümkün değildir.
En Yaygın Big O Türleri
O(1) – Sabit Zaman
Veri büyüse de süre değişmez.
Örnek:
Dizi kaç elemanlı olursa olsun, belirli bir indekse erişim sabittir.
Bu en hızlı büyüme davranışıdır.
O(n) – Doğrusal Zaman
Veri arttıkça süre aynı oranda artar.
Örnek:
print(i)
Eleman sayısı iki katına çıkarsa süre de iki katına çıkar.
O(n²) – Karesel Zaman
İç içe döngüler.
for j in arr:
print(i, j)
Veri arttıkça süre dramatik şekilde artar.
Büyük veri üzerinde risklidir.
O(log n) – Logaritmik Zaman
Veri büyür ama süre yavaş artar.
En klasik örnek: Binary search.
Binary search mantığı, arama alanını her adımda ikiye böler. Bu yüzden çok etkilidir. Bu yöntem özellikle sıralı veri yapılarında kullanılır ve ölçeklenebilir sistemlerin temelidir.
O(2ⁿ) – Üstel Zaman
Veri biraz arttığında süre patlar.
Genelde kontrolsüz recursive çözümlerde görülür. Özellikle naive Fibonacci hesaplaması buna örnektir.
Gerçek projelerde kaçınılır.
Big O Notasyonu Nasıl Düşünülür?
Big O notasyonu hesaplamak için temel yaklaşım:
-
Döngüleri say
-
İç içe olup olmadığına bak
-
Girdiye bağlı artışı kontrol et
-
Sabit katsayıları önemseme
Örneğin:
O(2n) → O(n)
O(n + 10) → O(n)
Big O notasyonu detayları değil, büyüme davranışını önemser.
Junior–Senior Farkı Burada Çıkar
Junior yazılımcı:
“Çalışıyor mu?” diye bakar.
Senior yazılımcı:
“Bu büyürse ne olur?” diye düşünür.
Daha önce ele aldığımız junior–senior farkı yazısında da vurguladığımız gibi, seviyeyi belirleyen şey düşünce biçimidir:
https://www.maykairos.com/junior-yazilimci-nasil-senior-olur
Big O notasyonu bilmek seni teknik olarak güçlü yapar.
Ama asıl fark, ölçek düşüncesini içselleştirmektir.
Her Zaman En Hızlı Algoritma mı Seçilmeli?
Hayır.
Yazılım sadece hız değildir.
-
Okunabilirlik
-
Bakım kolaylığı
-
Ekibin anlayabilirliği
-
Projenin ölçeği
Küçük bir projede O(n²) çözüm yeterli olabilir. Gereksiz karmaşıklık da teknik borç üretir.
Algoritma karmaşıklığı seçimi bağlama bağlıdır.
Big O Notasyonu Bir Ezber Değildir
Big O notasyonu formül ezberi değildir.
Bir refleks hâline gelmelidir.
Kod yazarken tek soru yeterlidir:
Bu veri büyürse ne olur?
Bu soruyu sormaya başladığında artık sadece kod yazmıyorsun; sistem tasarlıyorsun.
Ve gerçek yazılım mühendisliği tam olarak burada başlar.
Bir Cevap Yaz
E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.