İçeriğe geç
parazade

Zaman Karmaşıklığı Nedir?

İngilizce: Time Complexity

Yayın: · Son güncelleme:

Zaman Karmaşıklığı Nedir? Kısaca

Zaman karmaşıklığı, bir algoritmanın girdi boyutu büyüdükçe kaç adım attığını, yani çalışma süresinin nasıl arttığını ölçen kavramdır. Genellikle Big O notasyonuyla ifade edilir.

Zaman Karmaşıklığı nedir?
İçindekiler
  1. Zaman karmaşıklığı nedir?
  2. Nasıl hesaplanır?
  3. En iyi, ortalama ve en kötü durum
  4. Neden önemsemelisiniz?

Zaman karmaşıklığı nedir?

Zaman karmaşıklığı, bir algoritmanın veri büyüdükçe ne kadar daha fazla iş yaptığını gösteren ölçüdür. Saniye ölçmek yerine adım sayısı sayılır, çünkü aynı kod hızlı bir bilgisayarda ve eski bir dizüstünde farklı sürede çalışır. Adım sayısının girdiyle nasıl büyüdüğü ise donanımdan bağımsızdır.

Nasıl hesaplanır?

Temel yöntem, kodun kaç kez tekrarlandığına bakmaktır. Tek bir işlem, örneğin iki sayıyı toplamak, sabit sürelidir ve O(1) yazılır. n elemanlık bir listeyi baştan sona dolaşan bir döngü n adım atar ve O(n) olur.

İç içe döngüler çarpılır. Bir sınıftaki 30 öğrencinin her birini diğer 30 öğrenciyle karşılaştıran kod 900 adım atar; genel hâliyle bu n × n, yani O(n²) demektir. Her adımda veriyi yarıya indiren bir döngü ise O(log n) sürede biter. Ardışık bloklar toplanır ve sonuçta en hızlı büyüyen terim tutulur. O(n) bir döngünün ardından O(n²) bir döngü varsa, toplam karmaşıklık O(n²) kabul edilir.

En iyi, ortalama ve en kötü durum

Aynı algoritma farklı girdilerde farklı davranabilir. Doğrusal arama aranan değer ilk sıradaysa tek adımda biter; bu en iyi durumdur. Değer sonda ya da hiç yoksa n adım gerekir; bu da en kötü durumdur. Pratikte en kötü durum esas alınır, çünkü sistemin yoğun yük altında nasıl davranacağını o gösterir.

Neden önemsemelisiniz?

Kullanıcı sayısı 100'den 100.000'e çıkan bir uygulamada, O(n²) bir rapor sorgusu dakikalar sürmeye başlayabilir. Bu tür yavaşlamaların kökü çoğu zaman bir iç içe döngüdür. Kodunuzu yazarken her döngü için "bu kaç kez çalışacak?" sorusunu sormak, sorunları büyümeden yakalamanın en ucuz yoludur.

Sıkça Sorulan Sorular

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

Zaman karmaşıklığı, algoritmanın attığı adım sayısının büyümesini ölçer. Alan karmaşıklığı ise algoritmanın girdi büyüdükçe ne kadar ek bellek kullandığını ölçer.

Ortalama durum ile en kötü durum neden farklıdır?

Bazı algoritmalar girdinin düzenine göre çok farklı davranır. Hızlı sıralama rastgele veride çok hızlıyken, kötü pivot seçimiyle sıralı veride belirgin biçimde yavaşlayabilir.

İlgili terimler

Big O Notasyonu(Big O Notation)Big O notasyonu, bir algoritmanın çalışma süresinin ya da bellek kullanımının girdi büyüdükçe nasıl arttığını ifade eden matematiksel gösterimdir. Algoritmaları donanımdan bağımsız biçimde karşılaştırmayı sağlar.Sıralama Algoritmaları(Sorting Algorithms)Sıralama algoritmaları, bir listedeki elemanları küçükten büyüğe, alfabetik ya da başka bir ölçüte göre dizmek için kullanılan adım adım yöntemlerdir. Hız, bellek kullanımı ve kararlılık bakımından birbirinden ayrılırlar.İkili Arama(Binary Search)İkili arama (binary search), sıralı bir listede aranan değeri her adımda listenin ortasındaki elemanla karşılaştırıp arama alanını yarıya indiren arama algoritmasıdır. Bir milyon elemanlı listede bile yaklaşık 20 adımda sonuca ulaşır.Dinamik Programlama(Dynamic Programming)Dinamik programlama, büyük bir problemi örtüşen alt problemlere bölüp her alt problemi yalnız bir kez çözen ve sonucunu saklayan bir algoritma tasarım yöntemidir. Tekrarlanan hesapları ortadan kaldırarak çözümü çok hızlandırır.Sabit(Constant)Sabit (constant), programlamada bir kez değer atandıktan sonra program boyunca değiştirilmemesi gereken isimli veridir. Pi sayısı, bir vergi oranı ya da en fazla deneme hakkı gibi değerler sabit olarak tanımlanır.Döngü(Loop)Döngü (loop), programlamada bir kod bloğunu belirli sayıda ya da bir koşul sağlandığı sürece tekrar tekrar çalıştıran yapıdır. En yaygın türleri for ve while döngüleridir.LogLog, bir yazılımın ya da sistemin çalışırken gerçekleşen olayları tarih ve saatiyle kaydettiği kayıttır. Hataları bulmak, kullanıcı hareketlerini izlemek ve güvenlik olaylarını incelemek için kullanılır.Doğrusal Arama(Linear Search)Doğrusal arama (linear search), bir listedeki elemanları baştan başlayarak tek tek kontrol eden ve aranan değeri bulduğunda duran en basit arama yöntemidir. Liste sıralı olmasa da çalışır.