2016-03-29 13 views
1

Kodlama Röportajında ​​Çatlama'dan bir örnek yapıyorum ve System.out.println(prefix); (önek bir String'dir) yürütmenin, her karakterin yazdırılması gerektiğinden "O (n) zaman alacağını" okudum. Benzer bir baskı ifadesi, bir O (1) algoritmasının içine yerleştirilmişse (örneğin, karma tablo araması vb.), Tüm algoritmayı O (n) yapacak mıdır?Bir dize yazdırmak gerçekten O (n) alır mı?

+6

'n' nedir? Bunu çözmek için n'nin ne olduğuna daha yakından bakmalısın. – user2357112

+0

@ user2357112 https://en.wikipedia.org/wiki/Big_O_notation#Use_in_computer_science –

+2

@ НЛО Bence user2357112, bu durumda n '** nedir? Hangi üzerinde ayrıntılı çalışacağım. :) – duskwuff

cevap

4

Bir algoritmanın büyük O karmaşıklığını açıklarken, ifadedeki değişkenlerin neyi temsil ettiğini tanımlamak çok önemlidir. Sık sık birkaç olabilir! Örneğin, bir ikili ağaçta bir tamsayıya bakmak, daha sonra bu düğümle ilişkili dizeyi yazdırmak, n ağacındaki nesnelerin sayısı ve m dizenin uzunluğu olan O(m + log n) olarak karakterize edilebilir.

Tek bir değişkeni birden çok farklı faktörü (örneğin, hem karma tablosundaki öğelerin sayısı hem de boyutları) göstermek için bir hata kullanmak her zaman bir hatadır ve bunu yapmak çok saçma sonuçlar doğurabilir (örneğin, bir karma tablo araması O(n)).

+0

"Örneğin, bir ikili ağaçta bir dizgeye bakmak, daha sonra yazdırma," O (m + log n) "" - veya "O (m * log (n))' olarak karakterize edilebilir, çünkü dize karşılaştırmaları alabilir “O (m)” zamanı ve BST'niz özellikle uzmanlık kazanmamışsa, muhtemelen daha sonraki hızları hızlandırmak için önceki karşılaştırmalardan yararlanmak için fazladan metadata veya özel arama koduna sahip değildir. – user2357112

+0

@ user2357112 Belki de bu en iyi örnek değildi! Belirsizliği gidermek için ayarlamıştım. – duskwuff