Pertemuan-3 Laju Pertumbuhan Fungsi : Pengertian, motivasi dan manfaat Notasi-notasi asimtotik Perbandingan kompleksitas fungsi
Laju pertumbuhan fungsi : Menggambarkan perilaku fungsi pada nilai variabel bebas yang sangat besar
Motivasi Andaikan perlu dirancang suatu website untuk memproses data (mis, data keuangan). Bila program database A memerlukan fA(n)=30n+8 mikrodetik utk memproses sembarang n records, sementara program B perlu fB(n)=n2+1 mikrodetik utk memproses n records. Program mana yang akan kita pilih, dengan pertimbangan jutaan user yang akan mengakses website ini?
Motivasi (lanjutan) Pada grafik terlihat, semakin ke kanan, fungsi yang tumbuh lebih cepat pada akhirnya selalu menjadi yang terbesar fA(n)=30n+8 fB(n)=n2+1
Manfaat Dapat digunakan untuk membandingkan efisiensi dari beberapa algoritme, dengan cara mengamati pertumbuhan fungsi yang menggambarkan perilaku masing-masing algoritme tersebut untuk ukuran input yang sangat besar -> asymptotic analysis
Notasi Asimtotik Terdapat 5 simbol masing-masing untuk kelas yang berbeda : O (Big Oh) Ω (Big OMEGA) Θ (Big THETA) o (Little Oh) ω (Little OMEGA)
Penemu-penemu simbol
O (Big Oh) Contoh berikut memberikan gambaran lebih jelas bagaimana pertumbuhan suatu fungsi lebih cepat dibandingkan pertumbuhan fungsi lainnya. Contoh ini selanjutnya digunakan untuk mengenalkan konsep big-Oh dan konsep-konsep notasi asimtotik lainnya.
f(n) = 100 n2, g(n) = n4, n f(n) g(n) 10 10,000 50 250,000 6,250,000 Dari tabel dan gambar terlihat bahwa g(n) tumbuh lebih cepat dibanding f(n) ketika n > 10. Dhi, dikatakan f adalah big-Oh dari g dan dituliskan f Є O(g) f(n) = 100 n2, g(n) = n4, n f(n) g(n) 10 10,000 50 250,000 6,250,000 100 1,000,000 100,000,000 150 2,250,000 506,250,000
f(n) = 100 n2, g(n) = n4, Dalam hal ini, dapat dikatakan bahwa fungsi g mendominasi fungsi f, atau fungsi f didominasi fungsi g f memunyai orde paling banyak g, dan ditulis f Є O(g) O(g) dibaca orde g
Definisi (big-oh): Andaikan f and g adalah fungsi-fungsi yang memetakan himpunan bilangan bulat ke himpunan bilangan nyata, maka: f (x) adalah O (g (x) ) , (dibaca : f (x) adalah big-oh dari g (x) ), jika hanya jika terdapat konstanta C dan n0 sedemikian sehingga: | f (x) |≤ C | g (x) | ketika x > n0
Cormen:
Ternyata f(n) ≤ g(n) untuk n ≥ 10 f(n) = 100 n2, g(n) = n4, n f(n) g(n) 10 10,000 50 250,000 6,250,000 100 1,000,000 100,000,000 150 2,250,000 506,250,000 Ternyata f(n) ≤ g(n) untuk n ≥ 10 Ambil c = 1 dan n0 = 10, sedemikian sehingga |f(n)| ≤ c |g(n)| untuk n ≥ n0 Jadi, f Є O(g)
f(n) = 100 n2, g(n) = n4, Tunjukkan bahwa g ≠ O(f) Gunakan metode kontradiksi. Andaikan g = O(f), berarti |g(n)| ≤ c |f(n)| untuk n ≥ n0 Sehingga n4 ≤ c n2 jjk n2 ≤ c (kontradiksi) Jadi yang benar, f Є O(g)
Contoh: Tunjukkan bahwa 30n+8 adalah O(n). Tunjukkan c, n0 : n > n0 sehingga 30n+8 cn. Ambil c = 31, n0 =8. Asumsikan n > n0 =8, maka cn = 31n = 30n + n > 30n+8, sehingga 30n+8 < cn. n adalah O(30n+8).
Interpretasi Big-O secara grafis 30n+8 tidak lebih kecil dr sembarang n (n>0). Tidak juga lebih kecil dr 31n di semua n. Tetapi lebih kecil dari 31n untuk n>8. cn = 31n n>k=8 30n+8 Nilai fungsi 30n+8 O(n) n n menaik →
Cara lain: Tunjukkan bahwa 30n+8 adalah O(n). f(n) = 30n+8 ; g(n) = n Jawab: 30n+8 ≤ 30n+8n = 38 n ambil c = 38 dan n0 = 1 sehingga 30n+8 ≤ 38 n untuk n ≥ 1 Dalam hal ini: O(f) = O(g) = O(n)
n2 < n2 + 1 untuk n >1, sehingga n2 adalah O(n2+1) Tunjukkan bahwa n2+1 adalah O(n2). Tunjukkan c, n0 : n >n0 sehingga n2+1 cn2. Ambil c=2, n0 =1. Asumsikan n >1, maka cn 2 = 2n 2 = n 2+n 2 > n 2+1, atau n2+1< cn2. n2 < n2 + 1 untuk n >1, sehingga n2 adalah O(n2+1)
Contoh lain: Berapa kompleksitasnya? f(n) = ∑ i g(n) = ∑ i2 h(n) = ∑ it f(n) Є O(n2) g(n) Є O(n3) h(n) Є O(n t+1)
Big-oh, sebagai relasi bersifat transitif: fO(g) gO(h) fO(h) Sifat-sifat Big-oh: Big-oh, sebagai relasi bersifat transitif: fO(g) gO(h) fO(h) Jika gO(f) dan hO(f), maka g+hO(f) c > 0, O(cf)=O(f+c)=O(fc)=O(f) f1O(g1) f2O(g2) f1 f2 O(g1g2) f1+f2 O(g1+g2) = O(max(g1,g2)) = O(g1) jika g2O(g1)
f,g & konstanta a,bR, dengan b0, af = O(f); (e.g. 3x 2 = O(x 2)) f+ O(f) = O(f); (e.g. x 2+x = O(x 2)) Jika f=(1) (sedikitnya orde 1), maka: |f| 1-b = O(f); (e.g. x 1 = O(x)) (logb |f|) a = O(f). (e.g. log x = O(x)) g=O(fg) (e.g. x = O(x log x)) fg O(g) (e.g. x log x O(x)) a=O(f ) (e.g. 3 = O(x))
Definisi (big-omega): Andaikan f and g adalah fungsi-fungsi yang memetakan himpunan bilangan bulat ke himpunan bilangan nyata, maka: f (x) adalah Ω (g (x) ) , (dibaca : f (x) adalah big-omega dari g (x)), jika hanya jika terdapat konstanta C dan n0 sedemikian sehingga: | f (x) |≥ C | g (x) | ketika x > n0
Cormen:
; untuk
Definisi (big-theta): Andaikan f and g adalah fungsi-fungsi yang memetakan himpunan bilangan bulat ke himpunan bilangan nyata, maka: f (x) adalah θ (g (x) ), (dibaca : f (x) adalah big-theta dari g (x)), jika hanya jika f (x) adalah Ω (g (x) ) dan f (x) adalah O (g (x) )
Cormen:
o (Little Oh) o(g) = {f ; c>0 n0 x> n0 : |f(x)| < |cg(x)|} o(g) O(g) (g) adalah fungsi-fungsi yang mempunyai order yang lebih kecil dari g Contoh: tetapi
Kenapa o(f )O(x)(x) ? Contoh fungsi O(x), tapi bukan o(x) atau (x):
(g) = {f ; c>0 n0 x> n0 : |cg(x)| < |f(x)|} ω (Little OMEGA) (g) = {f ; c>0 n0 x> n0 : |cg(x)| < |f(x)|} (g) (g) (g) adalah fungsi-fungsi yang mempunyai order yang lebih besar dari g tetapi Contoh:
Hubungan antar notasi asimtotik RR O( f ) ( f ) • f o( f ) ( f ) ( f )
Definisi-definisi orde pertumbuhan, g:RR O(g) : {f ; c>0, n0 x>n0 |f(x)| < |cg(x)|} o(g) : {f ; c>0 n0 x>n0 |f(x)| < |cg(x)|} (g) : {f ; gO(f)} (g) : {f ; go(f)} (g) : O(g) (g)
Analogi pada relasi asimtotik
Cara lain utk menentukan ordo fungsi:
Contoh: = 0 ( 4x3 + 3x2 + 5 ) = o (x4 - 3x3 - 5x - 4 ) (x4 - 3x3 - 5x - 4 ) = ω ( 4x3 + 3x2 + 5 ) (4x3 + 3x2 + 5 )
f(x) = Θ (g(x)) f(x) = O (g(x))
Teorema Stirling
Algoritme Sequential Search [1] indeks := 1; [2] while indeks ≤ n and L[indeks] ≠ x do [3] indeks := indeks + 1 [4] end {while} [5] if indeks > n then indeks :=0 Berapa kompleksitasnya?
Berapa kompleksitasnya? Algoritme Insertion_Sort(A) for j := 2 to length[A] do key := A[j] {memasukkan A[j] ke dalam array A[1…j-1] yang sudah diurutkan} i := j-1 while i > 0 dan A[i] > key do A[i+1] := A[i] i := i-1 A[i+1] := key Berapa kompleksitasnya?
Berapa kompleksitasnya? Algoritme penggandaan matriks A dan B [1] for i := 1 to n do [2] for j := 1 to n do [3] cij := 0; [4] for k := 1 to n do cij := cij + aik bkj end [5] end [6] end Berapa kompleksitasnya?
Urutkan berdasar kompleksitasnya log n √n 2n n log n nn n! n3 n2 log n
Perbandingan kompleksitas algoritme
selesai