Karena hanya ada konstanta di antara basis logaritma, bukankah tidak apa-apa untuk menulis , yang bertentangan dengan , atau apa pun basisnya?
algorithms
time-complexity
Alex5207
sumber
sumber
Jawaban:
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 mengambilO(2logn) maka pangkalan itu penting. Dalam basis 2 Anda hanya akan memiliki O(n) , dalam basis 10 ini tentang O(n0.3010) .
sumber
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.
sumber
Sebagailogxy=1logyx danlogxy=logzylogzx , jadi loganlogbn=lognblogna=logab . Karenalogab adalah konstanta positif (untuk semuaa,b>1 ), makalogan=Θ(logbn) .
sumber
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 basisb , 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+2 suatu 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 eksternalb . 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.
sumber