# Big O gösterimi

Adres: https://softwaredictionary.org/tr/terimler/big-o-notation
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Big O Notation
Türkçe karşılığı: büyük o gösterimi, büyük o notasyonu
Okunuşu: big o noteyşın

Kısaca: Big O gösterimi, girdi büyüdükçe bir algoritmanın çalışma süresinin ya da bellek kullanımının nasıl arttığını, kesin hız yerine büyüme oranıyla anlatır.

## Big O gösterimi nedir?

Big O gösterimi, bir algoritmanın verimliliğini genellikle n olarak adlandırılan girdi boyutu cinsinden ifade eder. Bilgisayara bağlı olan saniyeleri ölçmek yerine, girdi iki katına ya da on katına çıktığında algoritmanın ne kadar daha fazla iş yaptığını, yani büyüme oranını anlatır. Bu, algoritmaları donanımdan ve programlama dilinden bağımsız olarak karşılaştırmayı mümkün kılar.

En hızlıdan en yavaşa en yaygın karmaşıklıklar şunlardır: O(1) sabit zaman, O(log n) logaritmik, O(n) doğrusal, O(n log n), O(n^2) karesel ve O(2^n) üstel. Bir dizi öğesini indeksle bulmak O(1), ikili arama O(log n), bir listeyi taramak O(n), verimli sıralama O(n log n) ve iç içe döngülerle her öğeyi diğer her öğeyle karşılaştırmak O(n^2)'dir.

Big O hesaplanırken yalnızca en hızlı büyüyen terim tutulur ve sabitler atılır; yani 3n + 5 adım süren bir algoritma sadece O(n)'dir. Günlük bir benzetme: bir telefon rehberinde bir ismi her sayfayı okuyarak bulmak O(n), rehberi ortadan açıp aradığınız bölümü sürekli ikiye bölmek ise O(log n)'dir. Bir milyon isimlik bir rehber için bu, bir milyona kadar denetim ile yaklaşık yirmi denetim arasındaki farktır.

Big O sıklıkla kodun gerçek hızıyla karıştırılır. Maliyetin nasıl ölçeklendiğini anlatır; belirli bir girdi için kodun ne kadar hızlı çalıştığını değil. Bu yüzden büyük bir sabiti olan bir O(n) algoritması, küçük girdilerde bir O(n^2) algoritmasından yavaş olabilir. Kesin konuşmak gerekirse Big O bir üst sınırdır ve geliştiriciler genellikle en kötü durumu belirtir; ancak hızlı sıralama için O(n log n) gibi ortalama durum değerleri de yaygındır.

## Önemli noktalar

- Big O, girdi boyutu n arttıkça zamanın ya da belleğin nasıl büyüdüğünü anlatır.
- Yaygın sınıflar O(1), O(log n), O(n), O(n log n), O(n^2) ve O(2^n)'dir.
- Sabitler ve daha küçük terimler atılır; bu yüzden 3n + 5, O(n) olur.
- Genellikle en kötü durumu anlatır ve hem zaman hem de alan (bellek) için geçerlidir.
- Düşük karmaşıklık en çok büyük girdilerde önemlidir; küçük girdilerde sabitler baskın olabilir.

## Örnek: JavaScript'te yaygın zaman karmaşıklıkları

```javascript
const items = [4, 8, 15, 16, 23, 42];
const first = items[0];                             // O(1): one step
const total = items.reduce((sum, x) => sum + x, 0); // O(n): one pass

// O(n^2): nested loops compare every pair of items
function hasDuplicate(list) {
  for (let i = 0; i < list.length; i++) {
    for (let j = i + 1; j < list.length; j++) {
      if (list[i] === list[j]) return true;
    }
  }
  return false;
}
// O(n): a Set keeps only unique values, so compare the sizes
const hasDuplicateFast = (list) => new Set(list).size !== list.length;
```

## Sık sorulan sorular

**O(n) ne anlama gelir?**

O(n), yani doğrusal zaman, işin girdi boyutuyla doğru orantılı büyüdüğü anlamına gelir. Bir O(n) fonksiyonu 1.000 öğe için 1 milisaniye sürüyorsa, 10.000 öğe için kabaca 10 milisaniye sürer.

**Zaman karmaşıklığı ile alan karmaşıklığı arasındaki fark nedir?**

Zaman karmaşıklığı, bir algoritmanın attığı adım sayısının girdiyle nasıl büyüdüğünü; alan karmaşıklığı ise ne kadar ek belleğe ihtiyaç duyduğunu anlatır. İkisi de genellikle Big O gösterimiyle ifade edilir ve birini iyileştirmek çoğu zaman diğerinin pahasına olur.

**O(log n), O(n)'den hızlı mıdır?**

Evet, büyük girdilerde. O(log n) iş çok yavaş büyür; girdiyi iki katına çıkarmak yalnızca yaklaşık bir adım ekler, dolayısıyla ikili arama bir milyar sıralı değer arasında bir öğeyi yaklaşık 30 karşılaştırmayla bulabilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
