Untuk jenis struktur data pohon pencarian biner, saya melihat notasi Big O biasanya dicatat sebagai O (logn). Dengan huruf kecil 'l' di log, apakah ini menunjukkan basis log e (n) seperti yang dijelaskan oleh logaritma natural? Maaf untuk pertanyaan sederhana ini, tetapi saya selalu kesulitan membedakan antara logaritma tersirat yang berbeda.
math
binary-tree
complexity-theory
big-o
BuckFilledPlatypus
sumber
sumber
log n
dia maksud adalah logaritma natural. 2. Ketika seorang ilmuwan komputer menulis yanglog n
dia maksud adalah basis dua. 3. Ketika seorang insinyur menulis yanglog n
dia maksud adalah basis sepuluh. Ini biasanya benar.Jawaban:
Setelah diekspresikan dalam notasi big-O (), keduanya benar. Namun, selama derivasi dari O () polinomial, dalam kasus biner pencarian, hanya log 2 adalah benar. Saya berasumsi bahwa perbedaan ini adalah inspirasi intuitif untuk pertanyaan Anda.
Juga, menurut pendapat saya, menulis O (log 2 N) lebih baik untuk contoh Anda, karena lebih baik mengkomunikasikan turunan dari run-time algoritma.
Dalam notasi O besar (), faktor konstanta dihilangkan. Mengonversi dari satu basis logaritma ke yang lain melibatkan perkalian dengan faktor konstanta.
Jadi O (log N) setara dengan O (log 2 N) karena faktor konstanta.
Namun, jika Anda dapat dengan mudah mengeset log 2 N dalam jawaban Anda, melakukannya lebih bersifat pedagogis. Dalam kasus pencarian pohon biner, Anda benar bahwa log 2 N dimasukkan selama penurunan runtime big-O ().
Sebelum mengekspresikan hasil sebagai notasi O besar (), perbedaan sangat penting. Saat menurunkan polinomial untuk dikomunikasikan melalui notasi O besar, tidak benar untuk contoh ini menggunakan logaritma selain log 2 N, sebelum menerapkan notasi O () -. Segera setelah polinomial digunakan untuk mengkomunikasikan runtime kasus terburuk melalui notasi big-O (), tidak masalah logaritma apa yang digunakan.
sumber
log_2 n
adaΘ(log_a n)
untuk basis apa puna
, jadi saya tidak yakin saya melihat bagaimana menggunakan basis 2 "lebih benar".Notasi O besar tidak dipengaruhi oleh basis logaritmik, karena semua logaritma dalam basis yang berbeda dihubungkan oleh faktor konstanta ,
O(ln n)
ekivalen denganO(log n)
.sumber
log_2 x
Berbedalog_b x
dengan faktor konstanc(b)
untuk setiap basis yang tidakb
bergantungx
.log_2 n
, saya bisa masuk dan mengganti dilog_2 n
mana sajalog_pi 2 * log_2 n / log_pi 2
dan kemudian berakhir dengan analisis yang ada dilog_pi 2 * log_pi n
mana-mana. Sekarang analisis saya adalah dalam istilahlog_pi n
.Tidak masalah apa basa itu, karena notasi O besar biasanya ditulis hanya menunjukkan urutan tertinggi secara asimtotik
n
, sehingga koefisien konstan akan hilang. Karena basis logaritma yang berbeda setara dengan koefisien konstanta, maka basis tersebut menjadi berlebihan.Karena itu, saya mungkin akan menganggap log base 2.
sumber
Keduanya benar. Pikirkan tentang ini
sumber
Ya, kalau bicara soal big-O notation, base nggak jadi soal. Namun, secara komputasi ketika dihadapkan pada masalah pencarian yang sebenarnya, itu penting.
Saat mengembangkan intuisi tentang struktur pohon, sangat membantu untuk memahami bahwa pohon pencarian biner dapat dicari dalam waktu O (n log n) karena itu adalah tinggi pohon - yaitu, dalam pohon biner dengan n node, pohon kedalaman adalah O (n log n) (basis 2). Jika setiap node memiliki tiga anak, pohon tersebut masih dapat dicari dalam waktu O (n log n), tetapi dengan logaritma basis 3. Secara komputasi, jumlah anak yang dimiliki setiap node dapat berdampak besar pada performa (lihat misalnya: teks tautan )
Nikmati!
Paul
sumber
Secara teknis basis tidak masalah, tetapi Anda umumnya dapat menganggapnya sebagai basis 2.
sumber
Pertama, Anda harus memahami apa artinya fungsi f (n) menjadi O (g (n)).
Definisi formalnya adalah: * Fungsi f (n) dikatakan O (g (n)) iff | f (n) | <= C * | g (n) | setiap kali n> k, di mana C dan k adalah konstanta. *
Jadi misalkan f (n) = log basis a dari n, di mana a> 1 dan g (n) = log basis b dari n, di mana b> 1
CATATAN: Ini berarti nilai a dan b dapat berupa nilai apa pun yang lebih besar dari 1, misalnya a = 100 dan b = 3
Sekarang kita mendapatkan yang berikut: log basis a dari n dikatakan O (log basis b dari n) iff | log basis a dari n | <= C * | basis log b dari n | setiap kali n> k
Pilih k = 0, dan C = log basis a dari b.
Sekarang persamaan kita terlihat seperti berikut: | log base a dari n | <= basis log a dari b * | basis log b dari n | setiap kali n> 0
Perhatikan ruas kanan, kita dapat memanipulasi persamaan: = log basis a dari b * | log basis b dari n | = | basis log b dari n | * basis log a dari b = | basis log a dari b ^ (basis log b dari n) | = | basis log a dari n |
Sekarang persamaan kita terlihat seperti berikut: | log base a dari n | <= | basis log a dari n | setiap kali n> 0
Persamaannya selalu benar tidak peduli berapa nilai n, b, atau a, selain batasannya a, b> 1 dan n> 0. Jadi log basis a dari n adalah O (log basis b dari n) dan karena a, b tidak masalah kita bisa menghilangkannya.
Anda dapat melihat video YouTube di sini: https://www.youtube.com/watch?v=MY-VCrQCaVw
Anda dapat membaca artikelnya di sini: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca
sumber