Asimptotik büyümeye göre sıralama fonksiyonları


35

Örneğin, bir işlevler listesine sahip olduğumu varsayalım.

nloglog(n),2n,n!,n3,nlnn,

Bunları asimptotik olarak nasıl sıralayabilirim, yani;

fOgfO(g) ,

onlar (ayrıca bkz aslında İkili karşılaştırılabilir olduğunu varsayarak burada )? tanımını kullanmak Ogarip görünüyor ve uygun c ve sabitlerinin varlığını ispatlamak genellikle zor n0.

Bu karmaşıklık ölçütleriyle ilgilidir, bu yüzden gibi asimptotik davranışlarla ilgileniyoruz n+ve tüm fonksiyonların yalnızca negatif olmayan değerler aldığını varsayıyoruz ( n,f(n)0 ).


4
OP asla geri dönmediğinden, yerelleşmiş şeyleri kaldırıyorum ve bundan bir referans sorusu yapıyorum.
Raphael

Yanıtlar:


48

Sıkı bir kanıt istiyorsanız, aşağıdaki lemma çoğunlukla yararlıdır. tanımlardan daha kullanışlı.

c=limnf(n)g(n)

  • c=0 fo(g) ,
  • c(0,)fΘ(g) ve
  • c=   fω(g) .

Bununla algoritma analizinde ortaya çıkan fonksiyonların çoğunu sipariş edebiliyor olmalısınız¹. Bir egzersiz olarak, kanıtlayın!

Tabii ki buna göre sınırları hesaplayabilmelisin. Karmaşık fonksiyonları temel fonksiyonlara indirgeyecek bazı pratik püf noktaları:

  • Her iki işlevi de ve üstleri karşılaştırın; eğer oranları ya da ise, orijinal bölüm de öyle. 0 e0
  • Daha genel: Eğer sürekli türevlenebilir ve kesinlikle işlevi artan bir dışbükey, varsa gibi anahtar bölüm yeniden yazmak, böyleceh

    f(n)g(n)=h(f(n))h(g(n)) ,

    ile vegΩ(1)

    limnf(n)g(n)= ,

    sonra

    limnf(n)g(n)= .

    Bu kuralın titiz bir kanıtı için buraya bakınız (Almanca).

  • Fonksiyonlarınızın gerçekler üzerinde devam ettiğini düşünün. Artık L'Hôpital'in kuralını kullanabilirsiniz ; koşullarına dikkat et²!

  • Kesikli eşdeğer Stolz-Cesàro'ya bakın .
  • Factorials açıldığında, Stirling'in formülünü kullanın :

    n!2πn(ne)n

Ayrıca, bir kez kanıtladığınız ve sık kullandığınız temel ilişkilerden oluşan bir havuzda tutmak yararlıdır:

  • logaritmalar polinomlardan daha yavaş büyür, yani

    α , β > 0(logn)αo(nβ) tümü için .α,β>0

  • polinomların sırası:

    α<βnαo(nβ) tümü için .α<β

  • polinomları üstellere göre daha yavaş büyür:

    nαo(cn) hepsi ve .αc>1


Limit mevcut olmadığı için yukarıdaki lemmanın geçerli olmaması söz konusu olabilir (örneğin, fonksiyonlar salındığında). Bu durumda, Landau sınıflarının aşağıdaki gibi üst / alt limes kullanan karakterizasyonunu göz önünde bulundurun :

İle Elimizdekics:=lim supnf(n)g(n)

  • 0cs<fO(g) ve
  • cs=0fo(g) .

İle Elimizdekici:=lim infnf(n)g(n)

  • 0<cifΩ(g) ve
  • ci=fω(g) .

Ayrıca,

  • 0<ci,cs<fΘ(g)gΘ(f) ve
  • ci=cs=1fg .

Yazımla karıştıysanız, burada ve burada kontrol edin .


Not: Meslektaşım birçok fonksiyon için bunu başarıyla yapan bir Mathematica fonksiyonu yazdı, bu yüzden lemma işi gerçekten mekanik hesaplamaya indirgiyor.

² Ayrıca bakınız buraya .


@Juho Herkese açık değil, afaik, ama kendini yazman çok önemli. Limit[f[n]/g[n], n -> Infinity]vaka ayrımını hesaplar ve gerçekleştirir.
Raphael

20

Başka bir ipucu: bazen fonksiyonlara monoton bir fonksiyon (log veya exp gibi) uygulamak işleri daha net hale getirir.


5
Bu dikkatlice yapılmalıdır: , fakat . 2 2 nO ( 2 n )2nO(n)22nO(2n)
Shaull

2
Destekliyorum. "Monoton işlevi uygulayın" meselesi, genelde işe yaramayan bir tür folklor gibi görünmektedir. Yeterli kriterler üzerinde çalışıyoruz ve cevabımın son revizyonunda yayınladıklarımı bulduk .
Raphael

17

Skiena, kitabındaki en yaygın fonksiyonlar olan Algoritma Tasarım Kılavuzu'ndaki baskın ilişkilerin bir listesini sunar:

n!cnn3n2n1+ϵnlgnnn1/2
lg2nlgnlgnlglgnlglgnα(n)1

Burada , ters Ackermann işlevini gösterir .α(n)


Bu garip bir liste. (Ne olursa olsun ilişkilerin birçoğu aracı tam olarak) daha genel lemmata bir avuç özetlenebilir.
Raphael

Hakimiyet ilişkisi için gösterimi budur.
Robert S. Barnes

11

İpucu: nasıl büyüdüklerini hissetmek için Wolfram Alpha gibi bir şey kullanarak bu işlevlerin grafiklerini çizin . Bunun çok kesin olmadığını unutmayın, ancak yeterince büyük sayılar için denerseniz, karşılaştırmalı büyüme modellerini görmelisiniz. Bu elbette bir kanıt yerine geçmez.

Örneğin, deneyin: 1'den çizim log (log (n)), 10000 tek bir grafik ya da görmek için 10000 1'den çizim log (log (n)) ve arsa log (n), bir karşılaştırma için.


9
Gerçekten votka tavsiye etmeli miyiz ?
Raphael

Bağlantılı grafikler ne anlama geldiklerini bilmediğiniz sürece kafa karıştırıcı olsa da, fonksiyonların grafiklerini çizmeyi önerdiği için +1.
Tsuyoshi Ito

1
Bir grafiği kanıtlamak isteyebileceğiniz bir ipucu olarak alın. Bu ipucu elbette yanlış olabilir.
gnasher729

8

Çeşitli gösterim tanımlarına göre işlem yapmayı öneriyorum. İsteğe bağlı bazı ifadeler çiftiyle başlayın ve aşağıda sıralandığı şekilde bunların sırasını belirleyin. Ardından, her bir ek eleman için, ikili arama kullanarak ve aşağıdaki gibi karşılaştırarak sıralamadaki konumunu bulun. Örneğin, listeyi başlatmak için ve nin ilk iki işlevi olan sıralayalım.nloglogn2n

Biz bu özelliği kullanmak birinci ifade yeniden yazma . Daha sonra göstermek için tanımı kullanmaya devam olabilir , herhangi bir sabit için çünkü , bir vardır , kendisi için , .n=2lognnloglogn=(2logn)loglogn=2lognloglognnloglogn=2lognloglogno(2n)c>0n0nn0c(nloglogn)=c(2lognloglogn)<2n

Sonra, . Şimdiye kadar yerleştirdiğimiz en büyük öğe olan karşılaştırıyoruz . Yana , biz Benzer göstermektedir .3n3 n = ( 2 günlük 3 ) n = 2 n günlük 3 2 no ( 3 n ) = o ( 2 n günlük 3 )2n3n=(2log3)n=2nlog32no(3n)=o(2nlog3)

Vb.


2

İşte Wikipedia'dan bir liste , tablodaki düşük büyük karmaşıklık sınıfı;

NameRunning TimeConstant timeO(1)Inverse Ackermann timeO(a(n))Iterated logarithmic timeO(logn)Log-logarithmicO(nlogn)Logarithmic timeO(logn)Polylogarithmic timepoly(logn)Fractional powerO(nc),where 0<c<1Linear timeO(n)"n log star n" timeO(nlogn)Quasilinear timeO(nlogn)Quadratic timeO(n2)Cubic timeO(n3)Polynomial timepoly(n)=2O(logn)Quasi-polynomial time2O(poly(logn))Sub-exponential time (first definition)O(2nϵ),ϵ>0Sub-exponential time (second definition)2o(n)Exponential time(with linear exponent)2O(n)Exponential time2poly(n)Factorial timeO(n!)

not:poly(x)=xO(1)


1
Ayrıca, tablonun Önerdiği ilginç . Eğer tablo iken bağlantı için belli oranda doğru, tek bağlantılı orada (ve hangi kopyaladığınız) 'dir karmaşıklık sınıfları, ilgili değil burada karıştırmak için yararlı bir şey. Landau notasyonu "zamanla" ilgili değil. 2nlogno(n!)
Raphael

1
Bunu koydum, böylece karmaşıklık sınıflarının adı doğrudan burada konuşulabilir. Evet, Landau, Kriptografide belirli bir tür algoritma hakkında daha fazla.
kelalaka

1
@ Raphael'in bazı görüşlerine itiraz ediyorum. Uzun yıllardır matematikçi ve öğretmenim. Bunları kanıtlamanın yanı sıra, bunun gibi büyük bir masanın insanların sezgilerini kolayca ve büyük ölçüde arttırdığına inanıyorum. Asimptotik sınıfların isimleri de insanların hatırlamalarına ve iletişim kurmalarına yardımcı oluyor.
Apass.Jack

1
@ Apass.Jack Öğretmenlik tecrübeme göre, bir masa verildiğinde birçok öğrenci bunu kalpten öğrenecek ve masadaki herhangi bir işlevi yerine getirememiş olacaktır. Bu etkinin, bu siteye giren asimptotik büyümeyle ilgili birçok soruyu nasıl hesaba kattığını not edin. Tabii ki, ispatları kolaylaştırırsa tablonun ima ettiği lemmata'yı kullanacağız, ancak bu tablonun nasıl ispatlanacağını öğrendikten sonra gelir . (Bu noktayı vurgulamak için buraya gelen insanlar masaya bir şeyler okumak için yardıma ihtiyaç duymazlar . İlişkileri kanıtlamak için yardıma ihtiyaçları vardır .)
Raphaël

1
@kelalaka "Evet, Landau, Kriptografide belirli bir algoritma türü hakkında daha fazla." - bu mantıklı bile değil. Landau notasyonu matematiksel fonksiyonların özelliklerini tanımlayan bir yoldur. Tek başına kriptografi yapmadan algoritmalar ile ilgisi yok.
Raphael
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.