Apa perbedaan antara Big-O notasi O(n)dan kecil-O notasi o(n)?
Apa perbedaan antara Big-O notasi O(n)dan kecil-O notasi o(n)?
Jawaban:
f ∈ O (g) mengatakan, pada dasarnya
Untuk setidaknya satu pilihan konstan k > 0, Anda dapat menemukan sebuah konstanta suatu sehingga ketidaksamaan 0 <= f (x) <= kg (x) berlaku untuk semua x> a.
Perhatikan bahwa O (g) adalah himpunan semua fungsi tempat kondisi ini berlaku.
f ∈ o (g) mengatakan, pada dasarnya
Untuk setiap pilihan konstan k > 0, Anda dapat menemukan sebuah konstanta suatu sehingga ketidaksamaan 0 <= f (x) <kg (x) berlaku untuk semua x> a.
Sekali lagi, perhatikan bahwa o (g) adalah himpunan.
Dalam Big-O, Anda hanya perlu menemukan pengganda tertentu k yang ketidaksamaannya melebihi beberapa minimum x .
Dalam Little-o, harus ada minimum x setelah ketimpangan itu berlaku tidak peduli seberapa kecil Anda menghasilkan k , selama itu tidak negatif atau nol.
Keduanya menggambarkan batas atas, meskipun agak kontra-intuitif, Little-o adalah pernyataan yang lebih kuat. Ada jarak yang jauh lebih besar antara tingkat pertumbuhan f dan g jika f ∈ o (g) daripada jika f ∈ O (g).
Satu ilustrasi perbedaan adalah ini: f ∈ O (f) benar, tetapi f ∈ o (f) salah. Oleh karena itu, Big-O dapat dibaca sebagai "f ∈ O (g) berarti bahwa pertumbuhan asimptotik f tidak lebih cepat dari g", sedangkan "f ∈ o (g) berarti bahwa pertumbuhan asimtotik f benar-benar lebih lambat daripada g". Ini seperti <=versus <.
Lebih khusus lagi, jika nilai g (x) adalah kelipatan konstan dari nilai f (x), maka f ∈ O (g) benar. Inilah sebabnya Anda bisa menghilangkan konstanta saat bekerja dengan notasi O-besar.
Namun, agar f ∈ o (g) benar, maka g harus memasukkan kekuatan x yang lebih tinggi dalam formulanya, sehingga pemisahan relatif antara f (x) dan g (x) harus benar-benar menjadi lebih besar karena x semakin besar.
Untuk menggunakan contoh matematika murni (alih-alih merujuk pada algoritma):
Berikut ini benar untuk Big-O, tetapi tidak akan benar jika Anda menggunakan sedikit-o:
Berikut ini berlaku untuk little-o:
Perhatikan bahwa jika f ∈ o (g), ini berarti f ∈ O (g). misalnya x² ∈ o (x³) sehingga benar juga bahwa x² ∈ O (x³), (sekali lagi, anggap O sebagai <=dan o sebagai <)
aada kyang: ...", itu "untuk setiap kada ayang: ..."
Big-O adalah untuk sedikit-o sebagaimana ≤adanya <. Big-O adalah batas atas inklusif, sedangkan little-o adalah batas atas yang ketat.
Misalnya, fungsinya f(n) = 3nadalah:
O(n²), o(n²), danO(n)O(lg n), o(lg n)atauo(n)Secara analog, angkanya 1adalah:
≤ 2,, < 2dan≤ 1≤ 0, < 0atau< 1Ini sebuah tabel, menunjukkan ide umum:

(Catatan: tabel adalah panduan yang baik tetapi definisi batasnya harus dalam hal batas superior daripada batas normal. Misalnya, 3 + (n mod 2) berosilasi antara 3 dan 4 selamanya. O(1)Meskipun tidak memiliki batas normal, karena masih memiliki batas a lim sup: 4.)
Saya sarankan untuk mengingat bagaimana notasi Big-O dikonversi menjadi perbandingan asimptotik. Perbandingannya lebih mudah diingat, tetapi kurang fleksibel karena Anda tidak bisa mengatakan hal-hal seperti n O (1) = P.
Saya menemukan bahwa ketika saya tidak dapat memahami sesuatu secara konseptual, memikirkan mengapa seseorang akan menggunakan X sangat membantu untuk memahami X. (Belum lagi Anda belum mencobanya, saya hanya mengatur panggung.)
[hal-hal yang Anda ketahui] Cara umum untuk mengklasifikasikan algoritma adalah dengan runtime, dan dengan mengutip kompleksitas algoritma-Oh yang besar, Anda bisa mendapatkan estimasi yang cukup bagus tentang mana yang "lebih baik" - mana saja yang memiliki fungsi "terkecil" di dalam O! Bahkan di dunia nyata, O (N) "lebih baik" dari O (N²), kecuali hal-hal konyol seperti konstanta super-masif dan sejenisnya.
Katakanlah ada beberapa algoritma yang berjalan di O (N). Cukup bagus, ya? Tapi katakanlah Anda (Anda orang yang cerdas, Anda) datang dengan algoritma yang berjalan di O ( N ⁄ loglogloglogN ). YAY! Lebih cepat! Tetapi Anda akan merasa konyol menulis itu berulang-ulang ketika Anda menulis tesis Anda. Jadi Anda menulisnya sekali, dan Anda dapat mengatakan "Dalam makalah ini, saya telah membuktikan bahwa algoritma X, yang sebelumnya dapat dihitung dalam waktu O (N), sebenarnya dapat dihitung dalam o (n)."
Dengan demikian, semua orang tahu bahwa algoritme Anda lebih cepat --- seberapa banyak yang tidak jelas, tetapi mereka tahu lebih cepat. Secara teoretis. :)