O (n) ile biliyorum, genelde tek bir döngü var; O (n ^ 2) bir çift döngüdür; O (n ^ 3) üçlü bir döngüdür, vb. Peki ya O (log n)?
Burada gerçekten yanlış yoldan gidiyorsun. Hangi big-O ifadesinin belirli bir algoritmik yapıyla gittiğini ezberlemeye çalışıyorsunuz, ancak gerçekten sadece algoritmanın gerektirdiği işlemleri saymalı ve bunu girdi büyüklüğü ile karşılaştırmalısınız. Tüm girişi çevreleyen bir algoritma, O (n) performansına sahiptir çünkü tek bir döngüye sahip olmadığı için n döngüsünü çalıştırır. İşte O (log n) performansı ile tek bir döngü:
for (i = 0; i < log2(input.count); i++) {
doSomething(...);
}
Bu nedenle, gerekli işlemlerin sayısı herhangi bir algoritma sırasına girdi büyüklüğü logaritması O (log n) 'dir. Big-O analizinin size söylediği önemli şey, bir algoritmanın yürütme süresinin girişin büyüklüğüne göre nasıl değiştiğidir: girişin boyutunu iki katına çıkarırsanız, algoritma 1 adım daha atar mı (O (log n)) , iki kat fazla adım (O (n)), dört kat fazla adım (O (n ^ 2)) vb.
Girişlerini tekrar tekrar bölümleyen algoritmaların tipik olarak performanslarının bir parçası olarak 'log n' ye sahip olduğunu deneyimlerden bilmek yardımcı oluyor mu? Emin. Ancak, bölümlemeyi aramayın ve algoritmanın performansının O (log n) olduğu sonucuna atlayın - bu oldukça farklı olan O (n log n) gibi bir şey olabilir.