Asumsikan saya memiliki daftar fungsi, misalnya
Bagaimana cara saya mengurutkannya asimptotik, yaitu setelah relasi didefinisikan oleh
,
dengan asumsi mereka memang sebanding secara berpasangan (lihat juga di sini )? Menggunakan definisi tampaknya canggung, dan seringkali sulit untuk membuktikan keberadaan konstanta yang cocok dan .
Ini tentang ukuran kompleksitas, jadi kami tertarik pada perilaku asimptotik sebagai , dan kami menganggap bahwa semua fungsi hanya mengambil nilai non-negatif ( ).
Jawaban:
Jika Anda ingin bukti yang kuat, lemma berikut ini sering kali berguna. lebih berguna daripada definisi.
Dengan ini, Anda harus dapat memesan sebagian besar fungsi yang muncul dalam analisis algoritma¹. Sebagai latihan, buktikan!
Tentu saja Anda harus dapat menghitung batas yang sesuai. Beberapa trik yang berguna untuk memecah fungsi-fungsi rumit menjadi yang mendasar adalah:
Lebih umum: jika Anda memiliki cembung, terus terdiferensialkan dan ketat meningkatkan fungsi sehingga Anda dapat menulis ulang quotient Anda sebagaih
dengan dang∗∈ Ω ( 1 )
kemudian
Lihat di sini untuk bukti ketat aturan ini (dalam bahasa Jerman).
Pertimbangkan kelanjutan fungsi Anda di atas real. Anda sekarang dapat menggunakan aturan L'Hôpital ; perhatikan kondisinya²!
Saat faktorial muncul, gunakan rumus Stirling :
Juga berguna untuk menyimpan kumpulan hubungan dasar yang Anda buktikan sekali dan sering gunakan, seperti:
logaritma tumbuh lebih lambat dari polinomial, yaitu
α , β > 0( logn )α∈ o ( nβ) untuk semua .α , β> 0
urutan polinomial:
α<βnα∈ o ( nβ) untuk semua .α < β
polinomial tumbuh lebih lambat daripada eksponensial:
αc>1nα∈ o ( cn) untuk semua dan .α c > 1
Dapat terjadi bahwa lemma di atas tidak berlaku karena batas tidak ada (misalnya ketika fungsi berosilasi). Dalam hal ini, pertimbangkan karakterisasi berikut kelas Landau menggunakan limau superior / inferior :
Periksa di sini dan di sini jika Anda bingung dengan notasi saya.
¹ Nota bene: Kolega saya menulis fungsi Mathematica yang melakukan ini dengan sukses untuk banyak fungsi, sehingga lemma benar-benar mengurangi tugas menjadi perhitungan mekanis.
² Lihat juga di sini .
sumber
Limit[f[n]/g[n], n -> Infinity]
dan melakukan pembedaan kasus.Kiat lain: terkadang menerapkan fungsi monoton (seperti log atau exp) ke fungsi yang membuat semuanya lebih jelas.
sumber
Skiena menyediakan daftar hubungan dominasi yang tersortir di antara fungsi-fungsi paling umum dalam bukunya, The Algorithm Design Manual:
Di sini menunjukkan fungsi Ackermann terbalik .α(n)
sumber
Kiat: gambar grafik fungsi-fungsi ini menggunakan sesuatu seperti Wolfram Alpha untuk merasakan bagaimana mereka tumbuh. Perhatikan bahwa ini tidak terlalu tepat, tetapi jika Anda mencobanya untuk jumlah yang cukup besar, Anda harus melihat pola pertumbuhan komparatif. Ini tentu saja bukan pengganti bukti.
Misalnya, coba: plot log (log (n)) dari 1 hingga 10.000 untuk melihat grafik individual atau plot log (log (n)) dan plot log (n) dari 1 hingga 10.000 untuk melihat perbandingan.
sumber
Saya menyarankan untuk melanjutkan sesuai dengan definisi berbagai notasi. Mulailah dengan beberapa ekspresi sewenang-wenang, dan tentukan urutannya, seperti diuraikan di bawah ini. Kemudian, untuk setiap elemen tambahan, temukan posisinya di daftar yang disortir menggunakan pencarian biner dan bandingkan seperti di bawah ini. Jadi, misalnya, mari kita urutkan dan , dua fungsi pertama n, untuk memulai daftar.nloglogn 2n
Kami menggunakan properti yang untuk menulis ulang ekspresi pertama sebagai . Kita kemudian dapat melanjutkan untuk menggunakan definisi untuk menunjukkan bahwa , karena untuk konstanta apa pun , ada sedemikian rupa sehingga untuk , .n=2logn nloglogn=(2logn)loglogn=2lognloglogn nloglogn=2lognloglogn∈o(2n) c>0 n0 n≥n0 c(nloglogn)=c(2lognloglogn)<2n
Selanjutnya, kami mencoba . Kami membandingkannya dengan , elemen terbesar yang telah kami tempatkan sejauh ini. Karena , kami juga menunjukkan bahwa .3n 2n 3n=(2log3)n=2nlog3 2n∈o(3n)=o(2nlog3)
Dll
sumber
Berikut daftar dari Wikipedia , Semakin rendah tabel semakin tinggi kelas kompleksitasnya;NameConstant timeInverse Ackermann timeIterated logarithmic timeLog-logarithmicLogarithmic timePolylogarithmic timeFractional powerLinear time"n log star n" timeQuasilinear timeQuadratic timeCubic timePolynomial timeQuasi-polynomial timeSub-exponential time (first definition)Sub-exponential time (second definition)Exponential time(with linear exponent)Exponential timeFactorial timeRunning TimeO(1)O(a(n))O(log∗n)O(nlogn)O(logn)poly(logn)O(nc),where 0<c<1O(n)O(nlog∗n)O(nlogn)O(n2)O(n3)poly(n)=2O(logn)2O(poly(logn))O(2nϵ),ϵ>02o(n)2O(n)2poly(n)O(n!)
catatan:poly(x)=xO(1)
sumber