Gevşek olarak, zaman karmaşıklığı, girdi boyutu arttıkça bir algoritmanın işlem sayısının veya çalışma süresinin nasıl büyüdüğünü özetlemenin bir yoludur.
Hayattaki çoğu şey gibi, bir kokteyl partisi de anlamamıza yardımcı olabilir.
O (N)
Partiye geldiğinizde, herkesin elini sıkmanız gerekir (her öğede bir işlem yapın). Katılımcı sayısı N
arttıkça, herkesin elini sıkmak için gereken süre / iş de artar O(N)
.
Neden O(N)
olmasın cN
?
İnsanlarla el sıkışmak için geçen süre değişiyor. Bunu ortalayabilir ve sabit bir şekilde yakalayabilirsiniz c
. Ama buradaki temel operasyon --- herkesle el sıkışmak --- O(N)
ne olursa olsun, her zaman orantılı olacaktır c
. Bir kokteyl partisine gitmemiz gerekip gerekmediğini tartışırken, genellikle bu toplantıların nasıl göründüğünün dakika detaylarından daha çok herkesle tanışmamız gerekeceğiyle ilgileniyoruz.
O (N ^ 2)
Kokteyl partisinin sahibi, herkesin herkesle buluştuğu aptal bir oyun oynamanızı istiyor. Bu nedenle, N-1
diğer insanlarla tanışmalısınız ve bir sonraki kişi sizinle daha önce tanıştığı için N-2
insanlarla tanışmaları gerekir , vb. Bu serinin toplamı x^2/2+x/2
. Katılımcı sayısı arttıkça, x^2
terim hızlı bir şekilde büyür, bu yüzden diğer her şeyi bırakıyoruz.
O (N ^ 3)
Diğer herkesle tanışmalısınız ve her toplantı sırasında odadaki diğer herkes hakkında konuşmalısınız.
O (1)
Ev sahibi bir şey duyurmak istiyor. Bir bardağı ding ve yüksek sesle konuşurlar. Herkes onları duyar. Kaç katılımcı olduğu önemli değil, bu işlem her zaman aynı süreyi alıyor.
O (log N)
Ev sahibi masada herkesin alfabetik sıraya göre dizildi. Dan nerede? Onun Adam ve Mandy arasında bir yerde olması gerektiğini düşünüyorsun (kesinlikle Mandy ve Zach arasında değil!). Buna göre, George ve Mandy arasında mı? Hayır. Adam ile Fred arasında, Cindy ile Fred arasında olmalı. Ve böylece ... setin yarısına, sonra da setin yarısına bakarak Dan'ı verimli bir şekilde bulabiliriz. Nihayetinde O'ya bakıyoruz (log_2 N) bireylere .
O (N log N)
Yukarıdaki algoritmayı kullanarak masada nerede oturacağınızı bulabilirsiniz. Çok sayıda insan masaya gelirse, birer birer ve hepsi bunu yaparsa, bu O (N log N) zaman . Bu, herhangi bir öğe koleksiyonunun karşılaştırılması gerektiğinde sıralanmasının ne kadar sürdüğü ortaya çıkıyor.
En İyi / En Kötü Durum
Partiye geliyor ve Inigo'yu bulmanız gerekiyor - ne kadar sürecek? Ne zaman geldiğine bağlıdır. Herkes etrafta frezeleme yapıyorsa, en kötü duruma çarptınız: zaman alacaktır O(N)
. Ancak, herkes masada oturuyorsa, sadece O(log N)
zaman alacaktır . Ya da belki ev sahibinin bardağı bağıran gücünden faydalanabilirsiniz ve sadeceO(1)
zaman .
Ana bilgisayarın kullanılamadığı varsayılarak, Inigo bulma algoritmasının, geldiğinizde partinin durumuna bağlı olarak bir alt sınırı O(log N)
ve bir üst sınırı olduğunu söyleyebiliriz O(N)
.
Mekan ve İletişim
Aynı fikirler, algoritmaların alanı veya iletişimi nasıl kullandığını anlamak için de uygulanabilir.
Knuth, "Şarkıların Karmaşıklığı" başlıklı eski hakkında güzel bir makale yazdı .
Teorem 2: O (1) karmaşıklığının keyfi olarak uzun şarkıları vardır.
PROOF: (Casey ve Sunshine Bandı nedeniyle). (15) ile tanımlanan Sk şarkılarını düşünün, ancak
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
tüm k.