Notasi Besar Oh (O, Theta, Omega) adalah tentang tingkat pertumbuhan fungsi.
Ketika Anda mengimplementasikan suatu algoritma, itu memiliki karakteristik tertentu bagaimana runtime berubah ketika Anda meningkatkan dataset beroperasi. Sekarang, Anda dapat mengoptimalkan algoritme sehingga berjalan lebih cepat dengan faktor 100. Tentu, ini bagus, tetapi pada dasarnya, itu masih algoritma yang sama. Demikian pula, dalam beberapa tahun, komputer mungkin dua kali lebih cepat dari sekarang.
Notasi Landau meringkaskan faktor-faktor konstan ini. Tidak peduli apakah suatu algoritma f
selalu dua kali lebih cepat dari algoritma yang lain g
: Mungkin g
dapat dioptimalkan untuk berjalan 4 kali lebih cepat, atau Anda mungkin dapat membeli perangkat keras yang lebih cepat. Jika Anda melihatnya dari perspektif ini, Anda mungkin mengatakan mereka "sama". (Bukan berarti Anda dapat (selalu) mengabaikan faktor konstan dalam praktik.)
Besar oh menentukan batas atas, mirip dengan <=
hubungannya.
Anda akan setuju bahwa 1 < 2
itu benar. Apakah itu berarti 1
tidak boleh kurang dari angka lainnya? Tentu tidak. Ada jumlah angka tak terbatas yang lebih besar dari 1
.
Dengan tingkat pertumbuhan, ini mirip. O(n)
menunjukkan himpunan semua fungsi, yang tumbuh secara linear (atau lebih lambat). O(n^2)
di sisi lain menunjukkan semua fungsi-fungsi itu, yang tumbuh dengan compelxity kuadratik (atau lebih lambat). Saya yakin Anda akan setuju bahwa fungsi linear tumbuh lebih lambat daripada fungsi kuadratik.
Inilah sebabnya mengapa suatu fungsi bisa berada di lebih dari satu kelas "Big-oh".
Berikut ini adalah perbandingan fungsi yang berbeda dengan : (dari matematika Beton Knuth)
Dari kiri ke kanan, fungsi tumbuh lebih cepat.
Juga, artinya n ^ 2 tumbuh lebih cepat daripada n ^ 1 karena 2> 1.
Definisi
"F tumbuh lebih cepat atau sama cepatnya dengan g"
"F tumbuh lebih lambat atau sama cepatnya dengan g"
Kombinasi keduanya di atas. Dikatakan fungsi f
tumbuh "sama cepat" sebagai g
. Ini hubungan ekivalensi.
Penafsiran
Katakanlah Anda memiliki dua algoritma, f
dan g
.
Akhir
Dengan asumsi , berarti bahwa apa pun anggaran Anda, tidak ada jumlah daya komputasi yang dapat Anda tambahkan ke sistem Anda, sehingga f
akan selalu berjalan secepat g
.
Oh besar
Dengan asumsi , berarti bahwa jika Anda memiliki cukup data, f
akan selalu berjalan lebih cepat daripada g
, tidak peduli berapa banyak daya komputasi yang Anda tambahkan ke sistem Anda.
Bukti
Jika Anda benar-benar berusaha membuktikan ini, Anda perlu menunjukkan menggunakan definisi notasi Landau bahwa fungsi Anda memenuhi persyaratan yang diperlukan.
Jadi, Anda perlu menemukan nilai-nilai untuk c
, d
, n_0
sehingga kondisi memegang.
Inilah cara Anda dapat melakukannya untuk yang terikat dengan c
:
Penting untuk disadari, bahwa saya secara sewenang-wenang mendefinisikan c
sebagai lebih kecil daripada a-1
baik-baik saja. Definisi Theta (g) mengatakan bahwa "ada a c
". Ini bisa berupa nilai apa pun asalkan lebih besar dari 0. (Jika a
bilangan real positif, Anda perlu mengubah buktinya sedikit, karena a - 1
mungkin sebenarnya negatif)
(Saya berasumsi a
positif, jika tidak fungsi akan selalu negatif untuk nilai besar n
, yang tidak masuk akal untuk fungsi yang menunjukkan runtime.)
Anda dapat mencoba melakukannya untuk batas atas, ini sangat mirip. Jika Anda tidak tahu caranya, saya dapat memberikan bukti untuk Anda.
Petunjuk: mulai dengan d > a + 1
Perhatian
Adalah penting bahwa Anda tidak membuktikannya dengan cara yang salah. Jika Anda menganggap bahwa (a + b) ada di O (n) dan pergi dari sana, Anda belum membuktikan apa yang Anda inginkan. Anda perlu memverifikasi bahwa semua langkah Anda berjalan dua arah, yaitu alih-alih =>
Anda miliki <=>
.