Kompleksitas Komputasi

4.1 Kompleksitas Komputasi

Apabila syarat-syarat kebenaran suatu algoritme telah dipenuhi, maka per- tanyaan yang muncul adalah berapa lama algoritme tersebut mampu menye- lesaikan suatu problem. Kemudian, apabila satu problem dapat diselesaikan oleh lebih dari satu algoritme, maka algoritma mana yang terbaik. Un- tuk menjawab bertanyaan-pertanyaan ini diperlukan suatu parameter untuk mengukur baik tidaknya suatu algoritma.

Faktanya, banyak hal yang mempengaruhi lama tidaknya suatu algoritma menyelesaikan suatu problem, diantaranya: compiler, kecepatan eksekusi, atau karakteristik komputer yang digunakan. Terlepas dari ukuran-ukuran …sik ini, ada suatu ukuran matematis yang akan kita kedepankan dalam ba- hasan ini, yaitu fungsi kompleksitas waktu (time-complexity function). Fungsi kompleksitas waktu f (n) adalah yang mengambil nilai input intejer positif n dan mepunyai sifat f (n) akan membesar jika n membesar. Sifat inilah yang akan membawa kita pada masalah analisis algoritme yang terkait dengan masalah nilai n besar. Untuk mempelajari fungsi kompleksitas waktu diperlukan suatu pengertian atau konsep yang disebut dominasi fungsi.

4.1.1 Dominasi Fungsi

De…nisi 4.1 Misalkan f; g : + Z ! R: Kita katakan bahwa g mendominasi

f (atau f didominasi g) jika ada konstata m 2 R + dan konstanta k 2 Z sedemikian sehingga

jf (n)j + m jg (n)j ; dimana n k; 8n 2 Z :

Dari de…nisi di atas terlihat bahwa pembatasan nilai fungsi f oleh keli- patan m nilai fungsi g berlaku untuk nilai n

k; sedangkan untuk k < n tidak menjadi perhatian. Ini menunjukkan bahwa dominansi fungsi hanya berkaitan dengan batasan-batasan fungsi untuk nilai n besar.

Apabila f didominasi oleh g; maka f dikatakan berorder (paling banyak)

g dan ditulis dengan f 2 O (g) ; dimana O (g) dibaca dengan ”order g” atau ”Oh-besar dari g”. O (g) merepresentasikan himpunan semua fungsi dengan domain + Z dan kodomain + R yang didominansi oleh g:

Contoh 4.1 Misalkan f; g : + Z + !R dengan f (n) = 5n dan g (n) = n 2 : Dengan mudah dapat diperiksa bahwa f (n) > g (n) untuk 1 n

4: Akan

tetapi, jika 5 n; maka 5n n 2 ; sehingga jf (n)j = 5n 2 n = jg (n)j ; untuk n 5:

Akibatnya, f 2 O (g) dengan m = 1 dan k = 5: Berdasarkan De…nisi 4.1 bisa dibuktikan bahwa g = 2 O (f) : Secara umum,

fungsi linear didominasi oleh fungsi kuadrat, akan tetapi fungsi kuadrat tidak didominasi oleh fungsi linear.

Contoh 4.2 Misalkan f; g : + Z + !R dengan f (n) = 5n 2 + 3n + 1 dan

g (n) = n 2 : Maka

2 2 2 2 2 jf (n)j = 5n 2 + 3n + 1 = 5n + 3n + 1 5n + 3n +n = 9n = 9 jg (n)j ; untuk semua n

1: Kesimpulannya, f 2 O (g) dengan m = 9 dan k = 1: Dilain pihak

2 2 2 jg (n)j = n 2 =n 5n + 3n + 1 = 5n + 3n + 1 = jf (n)j ; untuk semua n

1: Kesimpulannya, g 2 O (f) : Jadi

O (f ) = O (g) = O(n 2 ):

Dengan kata lain f dan g saling mendominasi satu sama lain.

Dari contoh di atas ini, secara umum bisa dibuktikan bahwa fungsi kuadrat saling mendominasi satu sama lain. Jadi, untuk sembarang fungsi kuadrat adalah anggota dari O (n 2 ):

Contoh 4.3 Misalkan f; g : + Z + !R dengan f (n) = 3n 3 + 7n 2 4n + 2 dan g (n) = n 3 : Maka

3 jf (n)j = 3n 2 + 7n 4n + 2

3 3n 2 + 7n + j 4nj + j2j

3 3 3 3 3n 3 + 7n + 4n + 2n = 16n = 16 jg (n)j ; untuk semua n

1: Kesimpulannya, f 2 O (g) dengan m = 16 dan k = 1: Dilain pihak karena (7n

4) > 0 untuk semua n 1; kita dapatkan

3 3 3 jg (n)j = n 3 =n 3n + (7n 4) n + 2 = 3n + (7n

4) n + 2 = jf (n)j untuk semua n

1: Kesimpulannya, g 2 O (f) dengan m = 1 dan k = 1: Jadi

O (f ) = O (g) = O(n 3 ):

Dengan kata lain f dan g saling mendominasi satu sama lain. Dari contoh di atas ini, secara umum bisa dibuktikan bahwa fungsi ku-

bik saling mendominasi satu sama lain. Jadi, untuk sembarang fungsi ku- bik adalah anggota dari O (n 3 ) : Juga bisa dibuktikan bahwa fungsi kuadrat didominasi oleh fungsi kubik, tetapi fungsi kuadrat tidak mendominasi fungsi kubik.

Contoh 4.4 Misalkan f; g : + Z !R dengan

2 2 2 f (n) = 1 + 2 + 3 + ::: + n; dan g (n) = 1 2 +2 +3 + ::: + n : Dengan induksi matematika bisa dibuktikan bahwa

Jadi, f adalah fungsi kuadrat dan g adalah fungsi kubik, sehingga

2 f2On 3 ; dan g 2 O n

Dari beberapa contoh dominansi fungsi di atas, sampailah kita pada dua observasi berikut ini yang nantinya bisa di manfaatkan untuk analisis algo- ritme.

1. Misalkan f; g; h : + Z ! R; dimana f 2 O (g) dan g 2 O (h) ; maka bisa dibuktikan bahwa f 2 O (h) : Akan tetapi, jika h = 2 O (g) ; maka dapat

kita simpulkan bahwa: ”pernyataan f 2 O (g) " mempunyai batasan lebih baik dari pada ”pernyataan f 2 O (h) ": Contonya, jika f (n) = 5,

g (n) = 5n; dan h (n) = n 2 untuk setiap n 2 Z + ; maka f 2 O (g), g 2 O (h) ; dan f 2 O (h) : Karena h = 2 O (g) ; maka f 2 O (g) mempunyai

batasan lebih baik dari pada f 2 O (h) :

2. Dalam tabel berikut diberikan beberapa bentuk Oh-besar yang sering muncul dalam aplikasi analisis algoritme. Urutan batasan lebih baik disusun dari atas ke bawah.

Tabel Oh-Besar Bentuk Oh-besar

O (log 2 n)

O (n m ) ; m = 0; 1; 2; ::: Polinomial O (c n );c>1

Eksponesial

O (n!)

Faktorial

Contoh 4.5 Misalkan f; g; h : + Z ! R dide…sikan dengan f (n) = 57,

g (n) = 5n 1; dan h (n) = 10 log 2 n + 11: Maka f 2 O (1), g 2 O (n) ; dan f 2 O (log 2 n) :

Soal 4.1.1 Gunakan Tabel Oh-besar untuk menentukan bentuk Oh-besar fungsi- fungsi f : + Z ! R berikut. (Beberapa diantaranya kemudian buktikan!)

1. f (n) = n 3 5n 2 + 25n 165: Buktikan!

2. f (n) = 3 + sin 1 n : Buktikan!

3. f (n) = 5n + cos (2n

1) : Buktikan!

4. (n) = 3n n 5 + 5:2 : Buktikan!

5. f (n) = 5n 2 + 3n log

2 n + 3n

6. f (n) = 4n + (n 4 1) : Buktikan!

11. f (n) = 5 n + 100n 5 + 10n 10:

4.1.2 Analisis Algoritme

Tibalah saatnya sekarang kita akan menerapkan konsep dominansi fungsi un- tuk mengukur berapa lama algoritme mampu menyelesaikan suatu problem, dan pada gilirannya dapat juga digunakan untuk memilih algoritme mana yang terbaik apabila ada lebih dari satu algoritme yang digunakan untuk menyelesaikan satu problem.

Dalam hal ini kita de…nisikan fungsi komplesitas waktu f (n) sebagai fungsi yang mengukur banyaknya operasi dalam suatu algoritme yang mem- punyai variabel input n: Yang dimaksud dengan banyaknya operasi adalah banyaknya operasi dasar (jumlah, kurang, kali, dan bagi), ditambahkan den- gan assignment, dan perbandingan (ekspresi logika). Setelah kita mende…n- isikan f (n) untuk suatu algoritme, kemudian dengan Tabel O-Besar kita tentukan order dari f atau bentuk Oh-besar dari f sebagai ukuran e…siensi algoritme yang bersangkutan.

Contoh 4.6 Misalkan diketahui Prosedur 8. De…nisikan fungsi f (n) yang menyatakan banyaknya operasinya. Kemudian tentukan oder dari f:

Jawab. Berikut ini rincian untuk menghitung jumlah operasi dalam prosedur 8:

1. Ada 4 operasi assignment sebagai statemen nilai awal untuk variabel- variabel: sld, s, b, dan i.

2. Dalam blok statemen while yang diulang sebanyak n kali terdapat 6 operasi, yaitu: 2 assignmen, 3 jumlah, dan 1 kali.

3. Jumlah operasi perbandingan ada (n + 1), yaitu: (a) untuk i = 1 sampai dengan n yang menghasilkan keputusan diek-

sekusinya blok statemen while. (b) untuk i = n + 1 yang menghasilkan keputusan berhentinya ek-

sekusi blok statemen while. Dengan demikian kita dapat mende…nisikan fungsi f sebagai

f (n) = 4 + 6n + (n + 1) = 7n + 5; + untuk n 1 dan n 2 Z : Jadi f 2 O (n) ; berarti Prosedur 8 mempunyai ukuran waktu eksekusi

yang linear: z PROSEDUR 8

procedure Saldo(n : intejer positif) begin

sld := 100000 s := 50000

b := 0:01

i := 1 while i < n + 1 do begin sld := sld + s + b sld

i := i + 1 end return(sld) end

Contoh 4.7 Misalkan diketahui Prosedur 9 dan Prosedur 10. De…n- isikan fungsi f (n) untuk masing-masing prosedur itu yang menyatakan jum- lah operasinya. Kemudian tentukan oder dari f:

Jawab. Kita catat bahwa Prosedur 9 dan Prosedur 10 adalah sama- sama algoritme yang digunakan untuk menghitung jumlah n intejer positif pertama. Mereka juga menggunakan jenis statemen yang sama (berulang), yang berbeda cuma penggunaan statemen for dan while. Dengan rincian perhitungan yang sama dengan jawaban pada Contoh 4.6, maka de…nisi fungsi f (n) untuk Prosedur 9 adalah

f (n) = 3n + 1:

Nilai ini berasal dari: 1 assignment untuk nilai awal variabel y; n assignment untuk variabel i; dan 2 operasi pada blok statemen for yang diulang sebanyak n kali. Sedangkan de…nisi f (n) untuk Prosedur 10 adalah

f (n) = 5n + 3:

Nilai ini berasal dari: 2 assignment untuk nilai awal variabel y dan i; 4 operasi pada blok statemen while yang diulang sebanyak n kali, dan ada (n + 1) perbandingan pada statemen while. Jadi, Prosedur 9 dan Prosedur 10 sama-sama mempunyai ukuran waktu eksekusi yang linear:

PROSEDUR 10 procedure Sum(n 2 Z + )

PROSEDUR 9

begin

procedure Sum(n 2 Z + )

y := 0 while (i < n) _ (i = n) do for i := 1 to n do

return(y)

i := i + 1

end

end return(y) end

Dapat kita simpulkan bahwa penggunaan statemen berulang untuk for dan while adalah sama jika ditinjau pada ukuran waktu eksekusimya untuk suatu problem yang sama. Sekarang kita perhatikan bahwa jumlah n intejer positif pertama mepunyai rumus

X n n (n + 1) i=

i =1

yang bisa dibuktikan dengan induksi matematik. Dengan mudah prosedur perhitungan ruas kanan persamaan di atas dapat dituliskan dalam Prosedur

11. PROSEDUR 11 procedure Sum(n : intejer) begin

y := n (n + 1) =2 return(y)

end Prosedur ini mempunyai fungsi komplesitas waktu f (n) = 4; sehingga f 2

O (1) : Jadi problem menghitung jumlah n intejer positif pertama yang ditulis O (1) : Jadi problem menghitung jumlah n intejer positif pertama yang ditulis

10. Contoh 4.8 Misalkan diketahui Prosedur 12 untuk menghitung a n . De…n- isikan fungsi f (n) yang menyatakan jumlah operasinya, kemudian tentukan

order dari f (n): PROSEDUR 12

procedure Power(a : real; n : intejer positif) begin

y := 1:0 for i := 1 to n do

y := y a return(y) end

Jawab. Dengan rincian perhitungan yang sama dengan jawaban pada contoh-contoh sebelumnya diperoleh bahwa

f (n) = 3n + 1:

Nilai ini berasal dari: 1 assignment untuk nilai awal variabel y; n assignment untuk variabel i; dan 2 operasi pada blok statemen for yang diulang sebanyak n kali. Jadi, f 2 O (n) ; sehingga lamanya waktu Prosedur 12 menghitung

a n adalah linear. z Pertanyaan yang timbul menyusul jawaban Contoh 1.17 adalah adakah

algoritme yang lain untuk menghitung a n yang mempunyai fungsi komplek- sitas waktu lebih baik. Untuk itu perhatikan analisis perhitungan berikut.

Berdasarkan de…nisi

a n := aa:::a

| {z } n kali

dan dengan sifat asosiatif perkalian diperoleh bahwa, untuk n genap:

a 2 := (aa)(aa)::: (aa) = (a )

n {z

2 kali

dan untuk n ganjil:

2 a c := (aa)(aa)::: (aa) a = (a ) a

n {z

b 2 c kali

Dengan analisa di atas, perhatikan algoritma berikut ini.

PROSEDUR 13 procedure Power(a : real, n : intejer positif) begin

y := 1:0

i := n while i > 0 do begin

if i 6= 2 b i

2 c then

y := y a

2 c if i > 0 then

i := b i

a := a a end return(y) end

Contoh 4.9 Berdasarkan Prosedur 13, apabila diketahui sembarang bilan- gan a : real; tentukan langkah-langkah untuk menghitung:

(a) a 7 dan (b) a 8 :

Jawab.

1. Nilai awal: y := 1:0; i := n = 7: Karena i = 7 > 0; maka dilakukan langkah-langkah pengulangan:

(a) i = 7; berarti ganjil, maka: y := y a = 1:0 a = a

i := b 7

2 c = 3: Karena i = 3 > 0; maka

a := a a = a 2 dan pengulangan berlanjut. (b) i = 3; berarti i ganjil, maka:

2 y := y a = a a 3 =a

i := b 3

2 c = 1: Karena i = 1 > 0; maka

a := a 2 a 2 =a 4 dan pengulangan berlanjut.

(c) i = 1; berarti i ganjil, maka:

3 4 y := y a = a 7 a =a

i := b 1

2 c = 0: Karena i = 0; maka proses BERHENTI.

Outputnya adalah y = a 7 :

2. Nilai awal: y = 1:0; i = n = 8: Karena i = 8 > 0; maka dilakukan langkah-langkah pengulangan:

(a) i = 8; berarti genap, maka: y := 1:0

i := b 8

2 c = 4: Karena i = 4 > 0; maka

a := a a = a 2 dan pengulangan berlanjut.

(b) i = 4; berarti i genap, maka: y := 1:0

i := b 4

2 c = 2: Karena i = 2 > 0; maka

2 2 a := a 4 a =a dan pengulangan berlanjut.

(c) i = 2; berarti i genap, maka hitung: y := 1:0

i := b 2

2 c = 1: Karena i = 1 > 0; maka:

4 4 a := a 8 a =a dan pengulangan berlanjut.

(d) i = 1; berarti i ganjil, maka:

y := y a = 1:0 a 8 =a 8

i := b 1

2 c = 0: Karena i = 0; maka proses BERHENTI.

Outputnya adalah y = a 8 :

z Dari Contoh 4.9, bisa kita amati bahwa banyaknya proses pengulangan

untuk n = 7 adalah 3 = log 2 4 + 1; dan untuk n = 8 adalah 4 = log 2 8 + 1: Sedangkan banyaknya perbandingan dalam proses pengulangan untuk n =

7 adalah 4; dan untuk n = 8 adalah 5: Secara umum untuk menentukan fungsi komplesitas komputasi Prosedur 13, perhatikan pola perhitungan banyaknya proses pengulangan dan perbandingan dalam tabel berikut ini.

n Banyaknya ulangan Banyaknya perbandingan

2 2 = log 2 2+1

3 = log 2 2+2

4 3 = log 2 4+1

4 = log 2 4+2

8 4 = log 2 8+1

5 = log 2 8+2 5 = log 2 8+2

... Jadi order fungsi kompleksitas komputasi Prosedur 13 adalah O (log 2 n) :

Hasil ini menunjukkan bahwa Prosedur 13 lebih baik dari Prosedur 12 untuk problem yang sama.

4.1.3 Algoritme Pelacaan Linear

Sebelum kita akhiri subbab ini, berikut ini diberikan algoritme untuk prob- lem yang disebut pelacakan linear (linear search).

Misalkan diberikan barisan n bilangan: a 1 ;a 2 ; :::; a n dan suatu bilangan k yang disebut kunci. Problemnya adalah mencari k dalam barisan yang bersangkutan. Artinya, apabila k sama dengan salah satu bilangan dalam barisan, sebut saja k = a i ; maka output yang diberikan adalah nilai indeks dari a i ; yaitu i. Apabila tidak ada satupun bilangan dalam barisan yang sama dengan k; maka output yang diberikan adalah 0: Algoritme untuk problem ini diberikan dalam prosedur berikut.

PROSEDUR 14 procedure LinearSearch(k : real, a 1 ;a 2 ; :::; a n : real) begin

i := 1 while ((i < n _ i = n) ^ k 6= a i ) do

i := i + 1 if (i < n _ i = n) then

lokasi := i else lokasi := 0 return(lokasi) end

Untuk menentukan kompleksitan komputasi Prosedur 14, perhatikan statemen pengulangan while. Kita amati bahwa selesainya proses pengu- Untuk menentukan kompleksitan komputasi Prosedur 14, perhatikan statemen pengulangan while. Kita amati bahwa selesainya proses pengu-

Sebagai rangkuman subbab ini, sekali lagi kita tekankan bahwa apa yang kita pelajari dalam kompleksitas komputasi adalah berkenaan dengan nilai n yang besar. Sedangkan untuk nilai n yang kecil, bisa diselesaikan dalam kasus per kasus (case by case). Ini dapat kita perhatikan dalam ilustrasi berikut.

Misalkan ada dua algoritme, yaitu A dan B; untuk menyelesaikan suatu problem yang sama. Misalkan pula f adalah fungsi kompleksitas komputasi untuk A dengan f (n) = 1000n, dan g adalah fungsi kompleksitas komputasi

untuk B dengan g (n) = n 2 : Jelas bahwa karena f linear dan g kuadratik, berdasarkan urutan pada Tabel O-Besar, algoritme A lebih baik dari B: Je-

las pernyataan ini mengacu untuk nilai n yang besar. Namun yang menjadi pernyataan berikutnya adalah sejauh mana n dianggap ”besar” dan n diang- gap ”kecil”. Untuk itu diperlukan informasi tambahan yang intinya adalah menentukan nilai k sehingga

jf (n)j m:jg (n) j; untuk setiap n k:

Dalam kasus kita ini,

jf (n)j = 1000n 2 n = jg (n) j; untuk setiap n 1000: Jadi yang dimaksud dengan n ”besar” kalau n

1000; dan n dikatakan ”kecil” kalau n < 1000: Untuk n yang kecil Algoritme B lebih baik dari A:

Waktu pemrosesan (Running Time) adalah waktu yang diperlukan untuk mengeksekusi suatu algoritme atau program. Sebagai ilustrasi, tabel berikut ini memberikan perkiraan waktu pemrosesan algoritme untuk beberapa order kompleksitas dan untuk nilai n : 2; 16; dan 64:. Diasumsi kecepatan eksekusi

komputer adalah satu operasi diselesaikan dalam waktu 10 6 detik (10 6 =1 mikro detik), sehingga satuan isian tabelnya adalah mikro detik.

Problem

Order

2 Berukuran n n log

Soal 4.1.2 Buatlah analisis pada beberapa algoritme berikut:

1. Panggil Algoritme 2, dan de…nisikan fungsi f (n) untuk algoritma itu yang menyatakan jumlah operasinya. Kemudian tentukan oder dari f:

2. Panggil Algoritme 5, dan de…nisikan fungsi f (n) untuk algoritma itu yang menyatakan jumlah operasinya. Kemudian tentukan oder dari f:

3. Panggil Algoritme 6, dan de…nisikan fungsi f (n) untuk algoritma itu yang menyatakan jumlah operasinya. Kemudian tentukan oder dari f:

4. Panggil Algoritme 10, dan de…nisikan fungsi f (n) untuk algoritma itu yang menyatakan jumlah operasinya. Kemudian tentukan oder dari f:

5. Panggil Algoritme 7 dan Algoritma 8, dan de…nisikan fungsi f (n) untuk masing algoritma itu yang menyatakan jumlah operasinya. Ke- mudian buatlah analisis e…siensinya:

6. Pada masing-masing segmen program pseudocode berikut, f (n) meny- atakan banyaknya kali statemen sum := sum + 1 dieksekusi. Tentukan

f (n) dan ordernya. begin

begin sum := 0 for i := 1 to n do

(b) for j := 1 to n n do

sum := sum + 1 end sum := sum + 1 end

(c) for j := i to n do

sum := sum + 1 end

begin sum := 0

i := n while i > 0 do (d)

begin sum := sum + 1

i := b i

end end