(karena ini adalah jawaban yang lebih panjang, bacalah tebal untuk ringkasan )
Mari kita ambil contoh Anda dan berjalan melalui langkah demi langkah, memahami tujuan di balik apa yang kami lakukan. Kami mulai dengan fungsi Anda dan tujuan menemukan notasi Oh Besarnya:
f(n) = 6n+4
Pertama, biarkan O(g(n))notasi Big Oh yang kita cari f(n). Dari definisi Big Oh, kita perlu menemukan yang disederhanakan di g(n) mana ada beberapa konstanta cdan di n0mana c*g(n) >= f(n)berlaku untuk semua nlebih besar dari n0.
Pertama, mari kita pilih g(n) = 6n + 4(yang akan menghasilkan O(6n+4)Big Oh). Dalam hal ini kita melihat bahwa c = 1dan nilai apa pun n0akan memenuhi persyaratan matematika dari definisi Big Oh, karena g(n)selalu sama dengan f(n):
c*g(n) >= f(n)
1*(6n + 4) >= 6n + 4 //True for all n's, so we don't need to pick an n0
Pada titik ini kami telah memenuhi persyaratan matematika. Jika kita berhenti diO(6n+4) , jelas bahwa ini tidak lebih membantu daripada menulis f(n), sehingga akan kehilangan tujuan sebenarnya dari notasi Oh Besar: untuk memahami kompleksitas waktu umum dari suatu algoritma! Jadi, mari kita beralih ke langkah selanjutnya: penyederhanaan.
Pertama, bisakah kita menyederhanakan dari 6nBig Oh O(4)? Tidak! (Latihan untuk pembaca jika mereka tidak mengerti mengapa)
Kedua, dapatkah kita menyederhanakan 4the Big Oh O(6n)? Iya! Dalam hal itu g(n) = 6n,, jadi:
c*g(n) >= f(n)
c*6n >= 6n + 4
Pada titik ini, mari kita pilih c = 2sejak saat itu sisi kiri akan meningkat lebih cepat (sebesar 12) daripada sisi kanan (sebesar 6) untuk setiap kenaikan n.
2*6n >= 6n + 4
Sekarang kita perlu menemukan yang positif di n0mana persamaan di atas benar untuk semua nlebih besar dari nilai itu. Karena kita sudah tahu bahwa sisi kiri meningkat lebih cepat daripada yang kanan, yang harus kita lakukan adalah menemukan satu solusi positif. Dengan demikian, karena n0 = 2membuat hal di atas benar, kita tahu itu g(n)=6n, atau O(6n)berpotensi notasi Oh Besar f(n).
Sekarang, bisakah kita menyederhanakan 6the Big Oh O(n)? Iya! Dalam hal itu g(n) = n,, jadi:
c*g(n) >= f(n)
c*n >= 6n + 4
Mari kita pilih c = 7karena yang kiri akan meningkat lebih cepat daripada yang kanan.
7*n >= 6n + 4
Kami melihat bahwa di atas akan berlaku untuk semua yang nlebih besar atau sama dengan n0 = 4. Dengan demikian, O(n)notasi Big Oh potensial untuk f(n). Bisakah kita menyederhanakan g(n)lagi? Nggak!
Akhirnya, kami menemukan bahwa notasi Big Oh yang paling sederhana f(n)adalah O(n). Kenapa kita harus melalui semua ini? Karena sekarang kita tahu bahwa f(n)itu linier , karena notasi Big Oh adalah kompleksitas linier O(n). Yang menyenangkan adalah bahwa sekarang kita dapat membandingkan kompleksitas waktu f(n)dengan algoritma lainnya! Sebagai contoh, kita sekarang tahu bahwa f(n)adalah sebanding waktu-kompleksitas fungsi h(n) = 123n + 72, i(n) = n, j(n) = .0002n + 1234, dll; karena menggunakan proses penyederhanaan yang sama yang diuraikan di atas mereka semua memiliki kompleksitas waktu linear O(n).
Manis!!!