Kompleksitas waktu dari suatu algoritma: Apakah penting untuk menyatakan dasar logaritma?

19

Karena hanya ada konstanta di antara basis logaritma, bukankah tidak apa-apa untuk menulis f(n)=Ω(logn) , yang bertentangan dengan Ω(log2n) , atau apa pun basisnya?

Alex5207
sumber

Jawaban:

63

Itu tergantung di mana logaritma. Jika itu hanya faktor, maka itu tidak membuat perbedaan, karena big-O atau θ memungkinkan Anda untuk mengalikan dengan konstanta apa pun.

Jika Anda mengambil O(2logn) maka pangkalan itu penting. Dalam basis 2 Anda hanya akan memiliki O(n) , dalam basis 10 ini tentang O(n0.3010) .

gnasher729
sumber
5
Saya kira ini hanya akan muncul dengan sesuatu seperti . Aku tidak bisa melihat alasan untuk mengekspresikan nomor sebagai2clogbndaripadan-to-the-apa-itu-adalah (kecuali mungkin sebagai tahap peralihan dari perhitungan). 2logn2clogbnn
David Richerby
7
+1 untuk "faktor konstan penting dalam eksponen"
trognanders
50

Karena notasi asymptotic adalah menyadari faktor konstan, dan dua logaritma berbeda dengan faktor konstan, dasar tidak ada bedanya: logan=Θ(logbn) untuk semua a,b>1 . Jadi tidak perlu menentukan basis logaritma saat menggunakan notasi asimptotik.

Yuval Filmus
sumber
13
Saya lebih suka melihat daripada ==
Nayuki
16
Saya khawatir notasi standar menggunakan . =
Yuval Filmus
4
@YuvalFilmus Notasi standar menyesatkan, sama sekali berbeda dengan standar di tempat lain dan membuat kompleksitas algoritme tampak sama sekali asing dari hal-hal yang sangat mirip dengannya. "Ini notasi standar" seharusnya tidak pernah menjadi alasan untuk memilih solusi yang buruk daripada yang lebih baik, sama jelasnya. (Makna simbol biasanya jelas dari konteksnya.)
wizzwizz4
7
@ wizzwizz4 Praktik umum adalah alasan yang bagus. Ini mempromosikan komunikasi yang efisien. Itulah alasan kita semua tahan dengan ejaan bahasa Inggris.
Yuval Filmus
3
Terkadang hanya memiliki terlalu banyak barang di sana menjadi lebih jelas daripada log a n = Θ ( log b n ) . nloganΘ(nlogbn)logan=Θ(logbn)
JiK
15

Sebagai logxy=1logyx danlogxy=logzylogzx , jadi loganlogbn=lognblogna=logab. Karenalogabadalah konstanta positif (untuk semuaa,b>1), makalogan=Θ(logbn).

Oh Tuhan
sumber
8

Dalam kebanyakan kasus, aman untuk menjatuhkan basis logaritma karena, seperti jawaban lain menunjukkan, rumus perubahan-basis untuk logaritma berarti bahwa semua logaritma adalah kelipatan konstan satu sama lain.

Ada beberapa kasus di mana ini tidak aman untuk dilakukan. Sebagai contoh, @ gnasher729 telah menunjukkan bahwa jika Anda memiliki logaritma dalam eksponen, maka basis logaritmik memang signifikan.

Saya ingin menunjukkan kasus lain di mana basis logaritma signifikan, dan itu adalah kasus di mana basis logaritma tergantung langsung pada parameter yang ditentukan sebagai input ke masalah. Sebagai contoh, algoritma radix sort bekerja dengan menuliskan angka dalam beberapa basis b , membusuk nomor masukan ke dasar- mereka b angka, kemudian menggunakan penghitungan sort untuk mengurutkan angka-angka satu digit pada suatu waktu. Pekerjaan yang dilakukan per putaran adalah Θ(n+b) dan ada kira-kira logbU putaran U (di mana U adalah bilangan bulat input maksimum), sehingga total runtime adalah O((n+b)logbU) . Untuk bilangan bulat tetapb ini disederhanakan menjadiO(nlogU) . Namun, apa yang terjadi jikab bukan konstanta? Teknik yang cerdas adalah memilihb=n , dalam hal ini runtime disederhanakan menjadiO(n+lognU) . SejaklognU =logUlogn , ekspresi keseluruhan disederhanakan menjadiO(nlogUlogn). Perhatikan bahwa, dalam kasus ini, basis logaritma memang signifikan karena tidak konstan sehubungan dengan ukuran input. Ada algoritma lain yang memiliki runtimes yang sama (analisis lama hutan disjoint-set berakhir dengan istilahlogm/2+2suatu tempat, misalnya), dalam hal menjatuhkan basis log akan mengganggu analisis runtime.

Kasus lain di mana basis log penting adalah di mana ada beberapa parameter eksternal yang dapat disesuaikan dengan algoritma yang mengontrol basis logaritmik. Contoh yang bagus untuk hal ini adalah B-tree, yang membutuhkan beberapa parameter eksternal b . Ketinggian pohon-B orde b adalah Θ(logbn) , di mana pangkal logaritma signifikan karena b bukan konstanta.

Untuk meringkas, dalam kasus di mana Anda memiliki logaritma dengan basis konstan, Anda biasanya dapat (dengan pengecualian seperti apa yang ditunjukkan oleh @ gnasher729) jatuhkan basis logaritma. Tetapi ketika basis logaritma tergantung pada beberapa parameter pada algoritma, biasanya tidak aman untuk melakukannya.

templatetypedef
sumber