(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 c
dan di n0
mana c*g(n) >= f(n)
berlaku untuk semua n
lebih 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 = 1
dan nilai apa pun n0
akan 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 6n
Big Oh O(4)
? Tidak! (Latihan untuk pembaca jika mereka tidak mengerti mengapa)
Kedua, dapatkah kita menyederhanakan 4
the 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 = 2
sejak 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 n0
mana persamaan di atas benar untuk semua n
lebih 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 = 2
membuat hal di atas benar, kita tahu itu g(n)=6n
, atau O(6n)
berpotensi notasi Oh Besar f(n)
.
Sekarang, bisakah kita menyederhanakan 6
the 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 = 7
karena yang kiri akan meningkat lebih cepat daripada yang kanan.
7*n >= 6n + 4
Kami melihat bahwa di atas akan berlaku untuk semua yang n
lebih 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!!!