Saya mengerti bahwa lebih cepat dari dan lebih lambat dari . Yang sulit saya pahami adalah bagaimana sebenarnya membandingkan dan dengan mana .Θ ( n log n ) Θ ( n / log n ) Θ ( n log n ) Θ ( n / log n ) Θ ( n f ) 0 < f < 1
Sebagai contoh, bagaimana kita memutuskan vs. atauΘ ( n 2 / 3 ) Θ ( n 1 / 3 )
Saya ingin memiliki beberapa arah untuk melanjutkan dalam kasus-kasus seperti itu. Terima kasih.
sebagai untuk besar , untuk dan besar .n1−k>logn n n/logn>nk k<1 n
sumber
Untuk banyak algoritma, kadang-kadang terjadi bahwa konstanta berbeda, menyebabkan satu atau yang lain lebih cepat atau lebih lambat untuk ukuran data yang lebih kecil, dan tidak diurutkan dengan baik oleh kompleksitas algoritmik.
Karena itu, jika kita hanya mempertimbangkan ukuran data super besar , yaitu. yang mana akhirnya menang, lalu
O(n^f)
lebih cepat daripadaO(n/log n)
untuk0 < f < 1
.Sebagian besar kompleksitas algoritmik adalah untuk menentukan algoritma mana yang pada akhirnya lebih cepat, sehingga mengetahui bahwa
O(n^f)
itu lebih cepat daripadaO(n/log n)
untuk0 < f < 1
, seringkali sudah cukup.Aturan umum adalah bahwa mengalikan (atau membagi) pada
log n
akhirnya akan diabaikan dibandingkan dengan mengalikan (atau membagi) olehn^f
untuk apa punf > 0
.Untuk menunjukkan ini dengan lebih jelas, mari kita pertimbangkan apa yang terjadi ketika n bertambah.
Perhatikan mana yang berkurang lebih cepat? Itu adalah
n^f
kolom.Bahkan jika
f
mendekati 1,n^f
kolom hanya akan mulai lebih lambat, tetapi ketika n dua kali lipat, laju perubahan penyebut mempercepat, sedangkan penyebutn/log n
kolom tampaknya berubah pada laju yang konstan.Mari kita plot kasus tertentu pada grafik
Sumber: Wolfram Alpha
Saya memilih
O(n^k)
sedemikian rupa sehinggak
cukup dekat dengan 1 (at0.9
). Saya juga memilih konstanta sehingga awalnyaO(n^k)
lebih lambat. Namun, perhatikan bahwa pada akhirnya "menang" pada akhirnya, dan membutuhkan waktu lebih sedikit daripadaO(n/log n)
.sumber
n^k
akhirnya menjadi lebih cepat, bahkan jika konstanta dipilih sedemikian rupa sehingga awalnya lebih lambat.Anggap saja sebagai . Jadi untuk contoh Anda, . Maka mudah untuk membandingkan pertumbuhannf nn1−f n2/3=n/n1/3
Ingat bahwa tumbuh lebih lambat secara asimptotik daripada , untuk setiap .logn nε ε>0
sumber
Saat membandingkan waktu berjalan, selalu membantu untuk membandingkannya dengan menggunakan nilai n yang besar. Bagi saya, ini membantu membangun intuisi tentang fungsi mana yang lebih lambat
Dalam kasus Anda, pikirkan n = 10 ^ 10 dan a = .5
Oleh karena itu, O (n ^ a) lebih cepat daripada O (n / logn), ketika 0 <a <1 Saya hanya menggunakan satu nilai, namun, Anda dapat menggunakan beberapa nilai untuk membangun intuisi tentang fungsi tersebut
sumber
O(10^9)
, tetapi poin utama tentang mencoba beberapa angka untuk membangun intuisi adalah benar.Biarkan menunjukkan "f tumbuh secara asimptot lebih lambat dari g", maka Anda dapat menggunakan aturan mudah berikut untuk polylogarithmic? fungsi:f≺g
Relasi urutan antara tupel adalah leksikografis. Yaitu dan(2,10)<(3,5) (2,10)>(2,5)
Diterapkan pada contoh Anda:
Anda bisa mengatakan: kekuatan n mendominasi kekuatan log, yang mendominasi kekuatan log.
Sumber: Matematika Beton, hlm. 441
sumber