TUGAS MATDIS

36
KOMPLEKSITAS WAKTU DAN RUANG Secara teoritis, model abstrak pengukuran waktu/ruang harus independent dari pertimbangan mesin dan compiler apapun. Model abstrak seperti itu dapat dipakai untuk membandingkan algoritma yang berbeda. Besaran yang dipakai untuk menerangkan model abstrak pengukuran waktu/ruang ini adalah kompleksitas algoritma. Ada dua macam kompleksitas algoritma : a) Kompleksitas Waktu Kompleksitas waktu di ekspresikan sebagai jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n. b) Komplesitas Ruang Kompleksitas ruang diekspresikan sebagai jumlah memori yang digunakan oleh struktur data yang terdapat di dalam algoritma sebagai fungsi dari ukuran masukan n. Dengan menggunakan besaran kompleksitas waktu/ruang algoritma, kita dapat menentukan laju peningkatan waktu (ruang) yang diperlukan algoritma dengan meningkatnya ukuran masukan n. TERMINOLOGI KOMPLEKSITAS WAKTU / RUANG Terminologi yang diperlukan dalam membahas kompleksitas waktu dan kompleksitas ruang suatu algoritma adalah : 1. Ukuran besar masukan data untuk suatu algoritma, n. Sebagai contoh, dalam algoritma pengurutan elemen-elemen larik, n adalah jumlah elemen larik, sedangkan dalam algoritma perkalian matriks n adalah ukuran matriks n x n. pada beberapa kasus, ukuran masukan lebih tepat menggunakan dua buah besaran, misalnya jika masukan algoritma adalah graf, maka ukuran masukan adalah jumlah simpul dan jumlah sisi. 1 MATEMATIKA DISKRIT

Transcript of TUGAS MATDIS

KOMPLEKSITAS WAKTU DAN RUANGSecara teoritis, model abstrak pengukuran waktu/ruang

harus independent dari pertimbangan mesin dan compilerapapun. Model abstrak seperti itu dapat dipakai untukmembandingkan algoritma yang berbeda. Besaran yang dipakaiuntuk menerangkan model abstrak pengukuran waktu/ruang iniadalah kompleksitas algoritma.

Ada dua macam kompleksitas algoritma :

a) Kompleksitas Waktu

Kompleksitas waktu di ekspresikan sebagai jumlahtahapan komputasi yang dibutuhkan untuk menjalankanalgoritma sebagai fungsi dari ukuran masukan n.

b) Komplesitas Ruang

Kompleksitas ruang diekspresikan sebagai jumlah memoriyang digunakan oleh struktur data yang terdapat di dalamalgoritma sebagai fungsi dari ukuran masukan n.

Dengan menggunakan besaran kompleksitas waktu/ruangalgoritma, kita dapat menentukan laju peningkatan waktu(ruang) yang diperlukan algoritma dengan meningkatnya ukuranmasukan n.

TERMINOLOGI KOMPLEKSITAS WAKTU / RUANGTerminologi yang diperlukan dalam membahas kompleksitas

waktu dan kompleksitas ruang suatu algoritma adalah :

1. Ukuran besar masukan data untuk suatu algoritma, n.

Sebagai contoh, dalam algoritma pengurutan elemen-elemenlarik, n adalah jumlah elemen larik, sedangkan dalamalgoritma perkalian matriks n adalah ukuran matriks n x n.pada beberapa kasus, ukuran masukan lebih tepatmenggunakan dua buah besaran, misalnya jika masukanalgoritma adalah graf, maka ukuran masukan adalah jumlahsimpul dan jumlah sisi.

1 MATEMATIKA DISKRIT

2. Kompleksitas waktu, T(n), adalah jumlah operasi yangdilakukan untuk melaksanakan algoritma sebagai fungsi dariukuran masukan n.

3. Kompleksitas ruang, S(n), adalah ruang memori yangdibutuhkan algoritma sebagai fungsi dari ukuran masukan n.

Pertimbangan lain mengapa hanya meninjau komplesitas waktuadalah tingkat kekritisan memori. Ukuran memori sekarang initidak lagi menjadi persoalan kritis, karena computersekarang mempunyai ukuran memori yang besar dibandingkandengan computer mainframe 25 tahun yang lalu. Bahkan, bilamemori masih kurang, memori sekunder pun dapat dijadikansebagai memori tambahan (memori semu, virtual memory).Tetapi, ini tidak berarti kita melupakan kompleksitas ruang,hanya saja kompleksitas waktu akan selalu menjadi isu utamadalam merancang suatu algoritma.

KOMPLEKSITAS WAKTUSetelah menetapkan ukuran masukan, maka langkah

selanjutnya dalam mengukur kompleksitas waktu adalahmenghitung banyaknya operasi yang dilakukan oleh algoritma.Di dalam sebuah algoritma mungkin terdapat banyak sekalijenis-jenis operasi, miaslnya operasi penjumlahan (termasukpengurangan), operasi perbandingan, operasi pembagian,operasi pembacaan, pemanggilan prosedur, dan sebagainya.

Contoh 10.1

Sebagai contoh pertama, tinjau kembali Algoritma 10.1.Jenis-jenis operasi yang terdapat di dalam algritma hitungrerata adalah

Operasi pengisian nilai (dengan operator “→”) Operasi penjumlahan (dengan operator “+”) Operasi pembagian (dengan operator “/”)

Mari kita hitung kompleksitas waktu algoritma tersebutdengan cara menghitung masing-masing jumlahoperasi. Jika

2 MATEMATIKA DISKRIT

operasi tersebut berada di dalam sebuah kalang (loop), makajumlah operasinya bergantung berapa kali kalang tersebutdiulang.

(i) Operasi pengisian nilai

Jumlah ← 0, 1 kali

k ← 1 1 kali

Jumlah ← jumlah + ak, n kali

k ← k +1, n kali

k ← jumlah/n), 1 kali

Jumlah seluruh operasi pengisian nilai adalah

t1=1+1+n+n+1=3+2n

(ii) Operasi penjumlahan

Jumlah + ak, n kali

k + 1, n kali

Jumlah seluuh operasi penjumlahan adalah

t2=n+n=2n

(iii) Perasi pembagian

Jumalah seluruh operasi pembagian adalah

Jumlah/n) 1 kali

Dengan demikian, kompleksitas waktu algoritma dihitungberdasarkan jumlah operasi aritmetika dan operasi pengisiannilai adalah

T (n)=t1+t2+t3=3+2n+2n+1=4n+4 ∎

Idealnya kita memang harus menghitung semua oprasi yangada di dalam suatu algoritma, seperti pada contoh 10.1 diatas. Namun, untuk alasan praktis, kita cukup menghitungjumlah operasi abstrak yang mendasari suatu algoritma, danmemisahkan analisisnya dari implementasi [SED92]. Operasiabstrak ini disebut operasi dasar (basic operation). Sebagaicontoh, pada algoritma pencarian, operasi abstrak yang

3 MATEMATIKA DISKRIT

mendasarinya adalah operasi perbandingan x dengan lemen-elemen larik. Dengan menghitung berapa kali operasiperbandingan elemen untuk tiap-tiap nilai n pada dua buahalgoritma pencarian, kita memperoleh kemangkusan relativedari kedua buah algoritma tersebut.

Pada algoritms pengurutan, opeasi dasar adalah operasiperbandingan elemen-elemen larik dan operasi pertukaranelemen-elemen. Jadi, kita cukup menghitung berapa kalioperasi perbandingan dan berapa kali operasi pertukaranelemen di dalam algoritma pengurutan. Kedua operasi dasarini dihitung secara terpisah, karena di dalam algoritmapengurutan jumlah operasi perbandingan tidak sama denganjumlah operasi pertukaran.

Pada algoritma perkalian dua buah matriks A x B yangmasing-masing berukuran n x n, operasi dasar yang bagusuntuk dipilih adalah operasi penjumlahan dan perkalian.Jadi, kita cukup menghitung berapa kali operasi penjumlahandan berapa kali operasi perkalian pada algoritma dua buahmatriks. Kedua operasi dasar ini dihitung secara terpisah.

Pada algoritma evaluasi polinom, p (x)=a0+a1x+a2x2+⋯+anx

n,operasi-operasi dasar di dalam algoritmanya juga operasipenjumlahan dan perkalian. Jadi, kita cukup menghitungberapa kali operasi penjumlahan dan berapa kali operasiperkalian pada algoritma evaluasi polinom.

Contoh 10.2

Tinjau kembali algoritma hitung rerata pada contoh10.1. operasi yang mendasar pada algoritma menghitung rata-rata adalah operasi penjumlahan elemen-elemen larik (yaituoperasi di dalam instruksi jumlah ← jumlah + ak), yang manadilaksanakan sebanyak n kali, yaitu sejumlah pengulanganyang dilakukan. Operasi-operasi lainnya, seperi pembagian)boleh kita abaikan (tidak dihitung). Jika kompleksitas waktualgoritma dihitung berdasarkan jumlah operasi penjumlahanini, maka kompleksitas waktu hitung rerata adalah T (n)=n.

4 MATEMATIKA DISKRIT

Contoh 10.3

Tinjau algoritma untuk mencari elemen terbesar didalamsebuah larik (array) yang berukuran n elemen. Tentukankompleksitas waktu algoritma, yang dalam hal inikompleksitas waktu algoritma dihitung berdasarkan jumlahoperasi perbandingan elemen-elemen, karena perbandinganadalah operasi dasar yang digunakan di dalam algoritmamencari nilai terbesar (operasi perbandingan i ≤ n bukanoperasi perbandingan elemen larik, jadi tidak kita hitung).

Penyelesaian:

Operasi perbandinan elemen larik yang dimaksudkan di dalamalgoritma adalah A [ i ] ¿ maks. Operasi ini terdapat didalam kalang for. Jumlah operasi perbandingan elemenditenukan oleh berapa kali kalang for dieksekusi, yaitu n−1kali. Dengan demikian, kompleksitas waktu algoritma carimaksadalah T (n)=n−1.

procedure CariMaks (input a1,a2,⋯,an : integer, outputmaks : integer) ( mencari elemen tersebut dari sekumpulanelemen larik integer a1,a2 Masukkan : a1,a2,⋯,anKeluaran : maks (nilai terbesar)

Deklarasi

i : integer

Algoritma

Maks ← a1

1 ← 2while i ≤ n do

if ai>¿ maks then

maks ← ai

endif

i ← i + 1endwhile

5 MATEMATIKA DISKRIT

{i>n}

Algoritma 10.2 algoritma mencari elemen terbesar

Notasi kompleksitas waktu telah membesarkan kita daripertimbangan spesipikasi komputer untuk menghitung kebutuhanwaktu algoritma. Kita tidak peduli komputer apa yangdigunakan untuk menjalankan algoritma, namun yang pastiapapun komputer atau bahasa pemrograman yang digunakan,jumlah komputasi di dalam algoritma tersebut tetap, yaituT(n).

Andai kita mengetahui informasi mengenai waktu yangdibutuhkan untuk melakukan operasi tertentu pada komputertertentu, kita akan dapat menghitung kebutuhan waktu aktualyang sesungguhnya untuk sebuah algoritma. Misalnya padaalgoritma CariMaks diandaikan satu kali operasi perbandingandi dalam komputer PC membutuhkan waktu 10−6detik, maka untukmasukansebanyak 1000 elemen, kebutuhan waktu algoritmaCariMaks dihitung berdasarkan operasi perbandingan elemensaja, adalah T (1000)=(1000−1)x10−6=0.000999 detik.

Bila algoritma-algoritma CariMaks dijalankan pada komputertercepat saat in, maka kebutuhan waktu algoritma, dihitungberdasarkan operasi perbandingan elemen saja, adalahT (1000)=(1000−1)×10−9=0.000000999 detik. Apabial operasi-operasi selain perbandingan juga dihitung, kita akanmemperoleh kebutuhan waktu yang lebih presisi. Namun, kitatidak melakukan perhitung kebutuhan waktu yang aktual disini. Kompleksitas waktu T (n)=n−1 sudah cukup memberiakninformasi mengenai unjuk kerja algoritma. Dengan kata lain,kitamenghitung kebutuhan waktu algoritma secara teoritis,bukan secara praktis. Lain yang harus diperhatikan dalammenghitung kompleksitas waktu adalah parameter yangmencirikan ukuran masukan. Pada algoritma pencarianmisalnya, Waktu pencarian tidak hanya bergantung pada ukuranlarik (n), tetapi juga bergantung pada nilai elemen yangdicari (x). sebagai contoh, diketahui larik bilangan bulat

6 MATEMATIKA DISKRIT

yang beranggotakan 128 buah elemen, . asumsika elemen-elemenlarik sudah terurut. Jika a=x maka waktu pencariannya 128kali lebih cepat daripada jika a=x atau jika x terdapat didalam larik. Demikian pula, jika a = x maka waktupencariannya ½ kali lebih cepat daripad jika a =x. karenaitu, kompleksitas waktu dibedakan atas tiga macam :

1. Tmax(n) : kompleksitas waktu untuk kasus terburuk (wortscase),

yaitu kebutuhan waktu maksimum yang diperlukan sebuahalgoritma sebagai fungsi dari n.

2. Tmin(n): kompleksitas waktu untuk kasus terbaik (best case),

yaitu kebutuhan waktu minimum yang diperlukan sebagaialgoritma sebagai fungsi dari n.

3. Tavg(n) Kopleksitas waktu untuk kasusu rata-rata (averagecase),

yaitu kebutuhan waktu rat-rata yang diperlukan algoritmasebagai fungsih dari n. untuk kasus rata-rata ini,biasanya dibuat asumsi bahwa semua barisan masukanbersifatsama. Misalnya, pada persoalan pencariandiandaikan bahwa data yang dicari mempunyai peluang yangsama untuk terletak di dalam larik.

Contoh 10.4

Diberika larik bilangan bulat a1,a2,⋯,an yang telahterurut menaik (tidak ada elemen ganda). Hitunglahkompleksitas waktu terbaik, terburuk, dan rat-rata darialgoritma pencarian beruntun (sequential search) di bawah ini.Algoritma pencarian beruntun di bawah ini menghasilkanindeks elemen yang bernilai sama dengan x. jika x tidakditemukan, indeks 0 akan dihasilkan (catatlah bahwaalgoritma pencarian beruntun ini merupakan versi darialgoritma pencarian beruntun yang pernah dituliskan padaAlgoritma 5.4 di Bab 4).

7 MATEMATIKA DISKRIT

procedure Pencarian Berurutan (input:a1,a2,⋯,an : integer, x :integer,

{mencari x di dalam elemen a1,a2,⋯,an. lokasi (indeks elemen)tempat x ditemukan diisi ke dalam idx. Jika x tidak ditemukan,maka idx diisi dengan 0.

Masukan :a1,a2,⋯,ankeluaran : idx

}

Deklarasi

i : integer

ketemu : boolean {bernilai true jika x ditemukan atau falsejika x

tidak ditemukan}

Algoritma :

i ← 1

ketemu ← falsewhile (1 ≤ n) and (not ketemu) do

if ai = x then

ketemu ← true else

i ← i + 1endif

endwhile

{ I ¿ n or ketemu }

if ketemu then { x ditemukan }

Idx ← ielse

idx ← 0 { x tidak ketemu }

endif

Algoritma 10.3 Algoritma pencarian beruntun

8 MATEMATIKA DISKRIT

Penyelesaian :

Algoritma pencarian beruntun membandingkan setiapelemen larik dengan x, mulai dari elemen pertama sampai xditemukan atau sampai elemen terakhir. jika x ditemukan,maka proses pencarian dihentikan. kita akan menghitungjumlah operasi perbandingan elemen larik yang terjadi selamapencarian (ai = x ). operasi perbandingan yang lain, sepertii ≤ n tidak akan dihitung. operasi perbandingan elemen-elemen larik adalah abstrak yang mendasari algoritmaalagoritma pencarian.

1. Kasus terbaik : ini terjadi bila ai = x.operasi perbandingan elemen (ai = x ) hanya dilakukan satukali, maka

Tmin (n) = 1

2. Kasus terburuk: bila an = x atau x tidak ditemukan.seluruh elemen larik dibandingkan, maka jumlahperbandingan elemen larik (ai = x ) adalah Tmax (n) = n

3. Kasus rata-rata : Jika x ditentukan pada posisi ke-j,maka operasi perbandingan (ai = x ) dilakukan sebanyak jkali. Jadi, kebutuhan waktu rata-rata algoritma pencarianberuntun adalah

Tavg(n) = (1+2+3+…+n )

n = 12n (1+n )

n = (n+1 )

2

Cara lain yang dapat digunakan dalam menghitug Tavg

diatas adalah sebagai berikut :

9 MATEMATIKA DISKRIT

Asumsikan bahwa peluang x terdapat di sembarang lokasi

larik adalah sama, artinya, peluang elemen ke-j = x adalah 1n

, atau kita tulis P ( aj = x ) = 1n. jika aj = x maka Tj yang

dibutuhkan adalah Tj = j. jumlah perbandingan elemen lariksecara rata-rata adalah :

Tavg(n) = ∑j=1

nTjP(A[ j ] = X) = ∑

j=1

nTj1n = 1n∑j=1

nTj =

1n ∑

j=1

nj = 1n

(n(n+1)2 ) = n+1

2

Contoh 10.5

Diberikan larik bilangan bulat a1 , a2,… an yang telahterurut menaik (tidak ada elemen ganda). hitunglahkompleksitas waktu terbaik, terburuk, dan rata-rata darialgoritma pencarian biner (bynery search) dibawah ini.algoritma pencarian beruntun dibawah ini menghasilkan indekselemen yang bernilai sama dengan x. jika x tidak ditemukan,indeks 0 akan dihasilkan.

prosedur pencarian biner (input a1, a2, …. an integer, x : integer,output idx : integer)mencari x dalam elemen a1, a2, …. an. lokasi (indeks elemen) tempat xditemukan diisi ke dalam idx. jika x tidak ditemukan, maka idxdiisi dengan 0.masukkan : a1, a2, …. an

keluaran : idxdeklarasi i, j, mit : integerketemu :booleanalgoritmaI, 1j nketemu falsewhile (not ketemu) and (i ≤j) do mid ( i + j ) div 2if amid = x thenketemu true

10 MATEMATIKA DISKRIT

elseif amid < x then (cari di belahan kanan)I mid +1else (cari di belahan kiri)j mid – 1endifendwhile(ketemu or i > j)if ketemu then idx midelseidx 0endif

Penyelesaian :

Algoritma pencarian biner membagi larik dipertengahan

menjdi dua bagian yang berukuranm sama (n2bagian), bagian

kiri dan bagian kanan. jika elemen pertengahan tidak samadnegan x, keputusan dibuat untuk melakukan penarian padabagian kiri atau bagian kanan. proses bagi dua dilakukanlagi pada bagian yagn dipilih. perhatikanlah bahwa setiapkali memasuki kalang while do maka ukuran larik yangditelusuri berkuran menjadi setengah kali ukuran semula : n,n2,

n4,…

Kita akan menghitung jumlah operasi perbanddinganelemen dengan x yang terjadi selama pencarian (amid = x).opeasi perbandingan yang lain, seperti I≤j dan amid < xtidak akan dihitung. untuk penyederhanaan, asumsikan ukuranlarik adalah perangkatan dari dua (yaitu, n=2k)

1. Kasus terbaik

Kasus terbaik adalah bila x ditemukan pada elemenpertengahan (amid), dan operasi perbandingan elemen (amid =x) yang dilakukan hanya satu kali. Pada kasus ini

Tmin (n) = 1

11 MATEMATIKA DISKRIT

2. Kasus terburuk

Pada kasus terburuk, elemen x ditemukan ketika ukuranlarik = 1. Pada kasus terburuk ini, ukuran larik setiapkali memasuki kalang while-do adalah:

n, n/2, n/4, n/8,…, 1 (sebanyak 2logn kali )

artinya, kalang while-do dikerjakan sebanyak 2log n kali.

Contoh : n = 128 ⇒ 128 → 64 → 32 → 16 →8 → 4 → 2 →1(sebanyak 2log 128 = 7 kali pembagian)

jumlah operasi perbandingan elemen ( amid = x ) adalah :

Tmax (n) = 2log n

Kompleksitas waktu rata-rata algoritma pencarian bagi dualebih sulit ditentukan. ∎

Kadang-kadang penentuan kasus barguna untuk menghitungoperasi yang bergantung pada kondisi tertentu. misalnya padapotongan algoritma berikut kita ingin menghitung nilai rata-rata elemen larik yang ganjil:

k ← 1jumlah ← 0for k ← 1 to n do

if ak mod 2 = 1 then (ak ganjil)jumlah ← jumlah + ak

endifendfor

Misalkan kompleksitas waktu algoritma dihitungberdasarkan jumlah operasi penjumlahan elemen (yaitu, jumlah+ ak). instruksi jumlah ← jumlah + ak hanya dikerjakan jikakonsisi ak mod 2 = 1 benar (yaitu jika ak ganjil). meskipundemikian, kita tetap dapat menghitung kompleksitas waktualgoritma dengan mengansumsikan bahwa pada kasus terburuksemua elemen bernilai ganjil sehingga kondisi ak mod 2 = 1

12 MATEMATIKA DISKRIT

terpenuhi dan instruksi penjumlahan jumah ← jumlah + ak

dikerjakan sebanyak n kali. jadi, kasus terburuk,

Tmax(n) = n

dan pada kasus terbaik, semua elemen genap sehinggainstruksi penjumlahan jumlah ← jumlah + ak tidak pernahdikerjakan, jadi

Tmin(n) = 0

Contoh 10.6

Hitung jumlah operasi perbandingan elemen larik danjumlah operasi pertukaran pada algoritma pengurutan seleksi(selection sort).prosedure urut seleksi (input/output a1,a2, …, an : integer){mengurutkan elemen-elemen a1,a2, …, an dengan metoede selectionsort.masukan: a1,a2, …, an.keluarkan : a1,a2, …, an ( sudah terutut menaik ).}Deklarasi

i , j, imaks, temp : integerAlgoritma

for i ← n downto 2 do {pass sebanyak n – 1 kali }imaks ← 1for j ← 2 to i do

if aj > aimaks thenimaks ← j

endifendfor{ pertukaran aimaks dengan ai }temp ← ai

ai ← aimaks

aimaks ← tempendfor

Penyelesaian :

13 MATEMATIKA DISKRIT

Algoritma urut seleksi terdiri dari n – 1 kali pass.pada setiap kali pass, kita mencari elemen terbesar darielemen-elemen a1,a2, …, an, lalu mempertukarkan elementerbesar dengan an. pass berikutnya akan mencrai elementerbesar dari sekumpulan a1,a2, …, an -1, begitu seterusnyasampai larik pass terakhir sehingga tinggal satu elemen yangpasti sudah terurut. Operasi abstrak yang mendasarialgoritma pengurutan adalah operasi perbandingan elemenlarik (aj > aimaks) dan operasi pertukaran ( diwakili oleh tigabuah instruksi : temp ← an , an ← aimaks, aimaks ← temp ). Keduaoperasi ini kita pisahkan perhitungannya sebagai berikut :

(i) Jumlah operasi perbandingan elemen Untuk setiap pass ke - i , i = n , n – 1, … , 2, operasiperbandingan elemen yang dilakukan adalah sebagai berikut:

i=n → jumlah operasi perbandingan elemen = n– 1

i=n–1 → jumlah operasi perbandingan elemen = n– 2

i=n–2 → jumlah operasi perbandingan elemen = n– 3

i=2 → jumlah operasi perbandingan elemen = 1

jumlah seluruh operasi perbandingan elemen-elemen larikadalah

T(n) = ( n – 1 ) + ( n – 2 ) + … + 1 = ∑k=1

n−1n−k = n(n−1)

2

Ini adalah kompleksitas waktu untuk kasus terbaik danterburuk, karena algoritma urut seleksi tidakbergantung pada data masukan apakah sudah terurut atauacak.

(ii) Jumlah operasi pertukaran

14 MATEMATIKA DISKRIT

Untuk setiap i dan n samapai 2, terjadi satu kalipertukaran elemen, sehingga jumlah operasi pertukaranseluruhnya adalah

T(n) = n – 1.

jadi, algoritma pengurutan seleksi membutuhkan n(n–1)2

buah operasi perbandingan elemen dan n – 1 buah operasipertukaran.

Contoh :

Hitung jumlah operasi perkalian pada algoritma yang

menghitung ∑j=n, [n2 ],[n4 ],…

i

∑i=1

jxi.

Asumsikan n adalah perpangkatan dari 2.prosedure kali (input x : integer, n : integer, outputjumlah : integer){mengalikan x dengan i = 1, 2, … , j, yang dalam hal ini j =

n, n2, n4, …, 1

masukan : x dan n ( n adalah perpangkatan kedua )keluaran ; hasil perkalian ( disimpan di dalam peubah jumlah).}Deklarasi i, j, k : integer

Algoritmaj nwhile j ≥ 1 dofor I 1 to j dox x * i endfor j d div 2endwhile{ j > 1}jumlah x

Penyelesaian :

Untuk

15 MATEMATIKA DISKRIT

j = n, jumlah operasi perkalian = nj = n/2, jumlah operasi perkalian = n/2j = n/4, jumlah operasi perkalian = n/4⋮

j = 1, jumlah operasi perkalian = 1

jumlah operasi perkalian seluruhnya adalah

n + n2+ n4+ … + 2 + 1

yang merupakan deret geometri dengan jumlah =n (n−1 )x2logn−1

1−12

= 2( n – 1 )

KOMPLEKSITAS WAKTU ASIMPTOTIKSeringkali kita kurang tertarik dengan kompleksitas

waktu yang presisi untuk suatu logaritma , tetapi kita lebihtertarik pada bagaimana waktu terbalik dan waktu terburuktumbuh bersamaan dengan meningkatnya ukuran masukan. Sebagaicontoh , pada algoritma 10.5, jumlah operasi perbandinganelemen adalah

T(n) = n(n-1)/2

Kita mungkin tidak tertalu membtuhkan informasiseberapa tepat jumlah operasi perbandingan elemen padaalgoritma pengurutan tersebut. Yang kita butuhkan adalahperkiraan kasar algoritma dan seberapa cepat fungsikebutuhan waktu itu tumbuh. Hal ini perlu untuk mengetahuikinerja algoritma . kinerja algoritma baru akan tampak untukn yang sangat besar , bukan pada n yang kecil . bila andamenggunakan menggunakan computer untuk menjalankan algoritmapencarian beruntun dan pencarianbiner untuk larik yangberukuran kecil (misalnya n = 10), maka perbedaab kecepatankeduanya tidak terlihat. Tetapi , bila kedua algoritmatersebut diterapkan untuk larik yang berukuran besar

16 MATEMATIKA DISKRIT

(misalnya n = 5000), perbedaan kecepatan keduanya akanterlihat sangat berarti.

Langkah pertama dalam pengukuran kinerja algoritmaadalah membuat makna “sebanding”. Gagasannya adalah denganmenghilangkan factor koefisien di dalam ekspresi T(n) .sebagai contoh , andaikan bahwa kompleksitas waktu terburukdari sebuah algoritma adlah

T(n) =2n2 +6n +1

Untuk n yang besar , pertumbuhan T(n) sebanding dengann2(lihat table 10.1).

Pada kasus ini , T(n) tumbuh seperti n2tumbuh.

Table 10.1 perbandingan pertumbuhan T(n) dengan n2

n T(n) =2n2 +6n +1 n2

10100100010.000

26120612.006.0012000.060.001

10010.0001.000.0001.000.000.000

Jika diperhatikan pada table 10.1 tersebut , suku 6n +1 menjadi tidak berarti di bandingkan 2n2. Kita dapatmengabaikan suku-suku yang tidak mendominasi perhitunganpada rumus T(n), sehingga kompleksitas waktu T(n) adalah

2(n¿¿2)¿+ suku-suku lainnya

Dengan mengabaikan koefisien 2 pada 2n2, kita melihatT(n) tumbuh seperti n2 tumbuh saat n bertambah. Kita katakanabahwa T(n) berorde n2 dan kita tuliskan

T(n) = O (n2)

Yang dibaca “ T(n) adalah O dari n2”. Jadi, kita telahmengganti ekspresi seperti T(n) =2n2 +6n +1 dengan ekspresiyang lebih sederhana seperti n2 yang tumbuh pada kecepatanyang sama dengan T(n). Notasi “O” disebut notasi “O-Besar”17 MATEMATIKA DISKRIT

(Big O) yang merupakan salah satu dari tiga notasikompleksitas waktu asimpsotik . definisi formal notasi O-Besar dituliskan dibawah ini.

Notasi O-BesarDEFINISI 10.1. T(n) = O(f(n)) (dibaca “T(n) adalah O(f(n))”yang artinya T(n) berorde paling besar f(n) bila terdapatkonstanta C dan no sedemikian sehingga

T(n) ≤ C. f(n)Untuk n ≥ no

Makna notasi O-Besar adalah jika sebuah algoritmamempunyai waktu asimptotik O(f(n)), maka jika n dibuatsemakin besar , waktu yang dibutuhkannya tidak akan pernahmelebihi suatu konstanta C dikali dengan f(n) . jadi , f(n)adalah batas lebih atas (upper bound) dari t(n) untuk n yangbesar . kita katakana T(n) berorde paling besar n.

Gambar 10.2 memperlihatkan tafsiran geometri “O besar “.Meskipun T(n) pada mulanya berada di atas Cf(n) , tapisetelah n = no ia selalu berada dibawah Cf(n). contohnyanyatanya adalah T(n) = n2 +5n, meskipun pada awalnya kurvaberada di atas 2n2 , tetapi untuk n ≥ 5

n2 +5n = O(n2)

Dari definisi O-Besar jelas menuliskan T(n) = O(f(n))tidak sama dengan O(f(n)) = T(n). lagi pula , tidaklahbermakna apa-apa menyatakan O(f(n)) = T(n). penggunaansymbol “=” tidak menguntungkan karena symbol ini sudah umummenyatakan “kesamaan”. Kebingungan yang timbul daripenggunaan symbol ini dapat dihindari dengan membaca symbol“=” sebagai “adalah” dan bukan “sama dengan” [HOR90].

Untuk menunjukkan bahwa T(n) = O(f(n)) kita hanya perlumenemukan pasangan C dan no sedemikian sehingga T(n) ≤C(f(n)). Tetapi , perlu diingat bahwa pasangan C dan no yangmemenuhi definisi di atas tidak unik . ada banyak C dan no

18 MATEMATIKA DISKRIT

yang memunihi definisi ini. Contoh-contoh berikutmemperlihatkan cara memperoleh notasi kompleksitasasimptotik untuk bermacam-macam T(n).

Polinimial n derajat m dapat digunakan untukmemperkirakan kompleksitas waktu asimptotik . suku berorderendah dalam ekspresi T(n) dapat diabaikan dalam menetukanorde keseluruhan . jadi, T(n) = 3n3+6n2 + n +8 = O(n3), T(n) =

2n2+6n + 1 = O(n2), T(n) = 12 n2 = O(n2). Hal ini dinyatakan

dengan teorema berikut [HOR90].

TEOREMA 10.1 . bila T(n) = am nm + am-1 nm-1 +…+a1n+a0 adalahpolinom derajat m maka T(n) = O(nm).

Bukti :

T(n) ≤ ∑i=0

main

i

≤ nm ∑i=0

main

i−m

≤ nm ∑i=0

mai= C nm, untuk n≥ 1, yang dalam hal ini C =

∑i=0

mai.

Oleh karena itu T(n) = O(nm).

Teorema 10.1. menyatakan bahwa suku yang berderajat lebihtinggi mendominasi suku yang lebih rendah . “ mendominasi “diartikan bahwa “ laju pertumbuhannya lebih cepat daripada”,f(n) mendominasi T(n) adalah O(f(n)) . hal ini selauterjadi, artinya , selalu ada suku yang dominan untuk n yangbesar . dalam menentukan kompleksitas waktu asimptotik,perhatian kita tertuju pada suku yang dominan itu.

Besaran dominan lainnya adalah :

- Eksponensial mendominasi sembarang perpangkatan (yaitu,yn ¿ np , y ¿ 1),

- Perpangkatan mendominasi ln n (yaitu np ¿ ln n),

19 MATEMATIKA DISKRIT

- Semua logaritma tumbuh padlaju yang sama (yaitu nlog(n) = blog (n),

- N log n tumbuh lebih cepat daripada n tetapi lebihlambat daripada n2.

Perhatikan bahwa kita juga dapat menyatakan bahwa 2n2

+6n +1 = O(n2) karena 2n2 +6n +1 ≤ 9n3 untuk semua n ≥ 1,atau 2n2 +6n +1 ≤ 2n3 untuk semua n ≥ 4. Dengan carayang sama kita juga dapat menyatakan 2n2 +6n +1 = O(n4),dan seterusnya. Jadi, bila T(n) = O(f(n)), dan g(n)adalah fungsi yang nilainya lebih besar dari f(n), makaT(n) = O(g(n)). Ini berarti, fungsi f(n) pada notasiT(n) = O(f(n)) dapat diganti dengan fungsi lain yanglebih besar [ROS99]. Namun, agar notasi O-Besar memilkimakna, maka untuk alas an lebih praktis , fungsi f didalam notasi T(n) = O(f(n)) dipilih fungsi yang sekecilmungkin, biasanya dari fungsi acuan seperti 1, log n, n2

, n3, …,2n,n!. jadi, jika suatu algoritma memilkikebutuhan waktu T(n) = 2n2 +6n +1, kompleksitas waktunyaditulis O(n2), bukan O(n3), O(n4), dan seterusnya.

Teorema O-Besar

TEOREMA 10.2 misalkan T1(n)= O(f(n)) dan T2(n) = O(g(n)), maka

a) (i) T1(n) + T2(n) = O (max(f(n),g(n))

(ii) T1(n) + T2(n) = O(f(n) + g(n))

b) T1(n) T2(n) = O(f(n))O(g(n)) = O(f(n)g(n))

c) O(cf(n) = O(f(n), c adlah konstanta

d) f(n) = O(f(n)

Perhatikan di dalam teorema 10.2 bahwa T1(n) + T2(n)diberkan dlam dua rumus yang berbeda, hal ini karena notasiO Besar adalah mekanisme untuk menemukan batas lebih atasuntuk laju pertumbuhan kompleksitas waktu algoritma danbukan batas lebih atas yang paling kecil [AZM88]. Keduanyadigunakan dalam konteks yang berbeda.

Aturan Menentukan Kompleksitas Waktu Asimptotik20 MATEMATIKA DISKRIT

Kompleksitas waktu asimptotik suatu algoritma dapatditentukan dengan salah satu dari 2 cara dibawah ini:

1. Cara I

Jika kompleksitas waktu T(n) dari algoritma sudahdihitung , maka kompleksitas waktu asimptotiknya dapatlangsung ditentukan dengan mengmbil suku yangmendominasi fungsi t dan menghilangkan koefisiennya.Cara ini bersuaian denga teorema 10.2.

contoh:

i. pada algoritma CariElemenTerbesar T(n) = n-1 =O(n)

ii. pada algoritma PencarianBeruntun ,

Tmin (n) = 1 = O(1)

Tmin (n) = n = O(n)

Tmin (n) = (n + 1)/2 = O(n), atau dengan cara lainsebagai berikut:

iii. pada algoritma PencarianBiner ,

Tmin (n) = 1 = O(1)

Tmin (n) = 2log n= O(2log n)

iv. pada algoritma PengurutanSeleksi,

Tmin (n) = (n+1)2 = O(n2),

(semua notasi O-Besar pada (i), (ii), (iii), dan(iv) di atas didasrkan pada jumlah perbandinganelemen-elemen larik)

v. pada algoritma kali

T (n) = 2(n -2) = O(n), dihitung dari jumlahoperasi perkalian

vi. T (n) = (n + 2)log (n2 +1) + 5n2 = O(n2),

Penjelasannya adalah sebagai berikut:

T (n) = (n + 2)log (n2 +1) + 5 n2 21 MATEMATIKA DISKRIT

= f(n)g(n) + h(n), dengan f(n) = (n+ 2),g(n)= log (n2 +1),

Kita rinci satu persatu:

f(n) = (n+2)= O(n)

g(n) = log (n2 +1) = O(log n), karena

log (n2 +1) ≤ log (2n2)

= log 2 + log n2

= log 2 + 2 log n ≤ 3 log n untuk n¿ 2

h(n) = 5 n2 = O(n2)

maka

T (n) = (n + 2)log (n2 +1) + 5n2 = O(n)O(logn) + O(n2)

= O(n log n) + O(n2) (Teorema10.2(b))

= O(max(n log n, n2)) (Teorema10.2 (a))

= O(n2)

2. Cara II

Umumnya menghitung kompleksitas waktu untuk kasusterbaik dan khusus rata- rata sangat sulit dilakukan.Hal ini disebabkan informasi tentang probabilitassetiap permutasi data masukan yang berukuran n tidakdiketahui atau tidak dapat ditentukan. Karena itu cukupberalasan kalau kita hanya meninjau kompleksitas waktuterburuk saja. Di bawah ini diberikan beberapa aturanuntuk menghitung kompleksitas waktu asimptotik untukkasus terburuk [AZM88]. Di dalam aturan tersebut kitatidak menghitung jumlah pelaksanaan operasi dasarsebagaimana pada perhitungan T(n), tetapi kitamenghitung langsung dengan menggunakan notasi O-Besar:

22 MATEMATIKA DISKRIT

a) Pengisian nilai (assignment), perbandingan,operasi aritmetika (+,-,*,/,div,mod),read,write,pengaksesan elemen larik, memilih field teretentudari sebuah record, dan pemanggilan fungsi/prosedur membutuhkan waktu O(1).

b) If C then S1 else S2 membutuhkan waktu Tc + max(TS1, TS2) yang dalam hal ini Tc,TS1, dan TS2adalah kompleksitas waktu C,S1, dan S2.

c) Kalang for, kompleksitas waktu kalang for adalahjumlah pengulangan dikali dengan kompleksitaswaktu badan (body) kalang.

d) While C do Si dan repeat S until C; untuk keduabuah kalang kompleksitas waktunya adalah jumlahpengulangan dikali dengan kompleksitas waktu badanC dan S. masalah yang muncul adalah bila jumlahpengulanagn tidak dapat ditentukan karenapengulangan dilakukan bergantung pada kondisi yangharus dipenuhi.

e) Case A

A = a1 : S1

A = a2 : S2

A = an : Sn

Endcase

Membutuhkan waktu max(TS1,TS2,…,TSn) yang dalamhal ini TS1, TS2,…,TSn dan TS2 adalah kompeksiataswaktu S1,S2,…,Sn.

f) Untuk fungsi /prosedur rekursif, digunakan teknikperhitungan kompleksitas dengan relasi rekurens.

Pengelompokan Algoritma BerdasarkanNotasi O_Besar23 MATEMATIKA DISKRIT

Tiap-tiap algoritam mempunyai kompleksitas waktu asimptotikmasing-masing. Kompleksitas waktu asimptotik ini dapatdigunakan untuk mengelompokan algoritma (tabel 10.2).

Urutan spectrum kompleksitas waktu algoritma adalah :

O (1)<¿

Tabel 10.2 kelompok algoritma berdasarkan kompleksitas waktusimptotiknya

Kelompok algoritma Nama

O(1)O(log n)O(n)O( n log n)O(n2)O(n3)O(2n)O(n!)

KonstanLogaritmikLanjarn log nkuadratikkubikeksponensialfaktorial

Urutan spectrum kompleksitas waktu diatas ditafsirkansebagai berikut. Jika O (f (n) )terletak sebelum O (g (n )), maka ituberarti f (n)≤g (n ) untuk semua bilangan bulat n. Jadi, jikaalgoritma A dan B mempunyai waktu pelaksaan masing-masingO (f (n) )dan O (g (n )) dan O (f (n) )terletak sebulum O (g (n )), makaalgoritma A dikatakan lebih mangkus daripada algoritma Buntuk ukuran masukan yang besar.

Penjelasan masing-masing kelompok algoritma adalah adalahsebagai berikut :

O(1) kompleksitas O(1) berarti waktu pelaksaanaan algoritmaadalah tetap, tidak bergantung pada ukuran masukan.Dengan kata lain, Jumalah operasi abstrak adalah tetapdengan total kebutuhan waktunya dibatasi oleh sebuahkonstanta . Bila n dijadika dua kali semula, misalnya,waktu pelaksanaannya hanya bertambah sejumlah konstanta.

24 MATEMATIKA DISKRIT

Algoritma yang termasuk kelompok ini adalah algoritmayang kebanyakan instruksinya dilaksanakan satu kali ataupaling banyak beberapa kali. Contohnya prosedur tukar dibawah ini.

O(log n) kompleksitas logaritmik berarti laju pertumbuhanwaktunya berjalan lebih lambat dari pada pertumbuhann. Algoritma yang termasuk kelompok ini adalahalgoritma yang memecahkan persoalan besar denganmentransformasikannya menjadi masalah yang lebihkecilyang berukuran sama (misalnya algoritma pencarianbiner). Disini basis algoritma tidak terlalu pentingsebab bila n dinaikkan dua kali semula, misalnya, logn meningkat sebesar sejumlah konstanta. Fungsi log nhanya meningkat dua kali jika n dinaikan sebesar n2

kali semula (basis dua).

O(n) Algoritma yang waktu pelaksanaanya lanjar umumnyaterdapat pada kasus yang setiap elemen masukannyadikenai proses yang sama, misalnya algoritmapencarian_beruntun. Bila n dijadikan dua kalisemula , maka waktu pelaksanaan algoritma juga duakali semula.

O(n log n) waktu pelaksanaan yang n log n terdapat padaalgoritma yang memecahkan persoalan menjadi persoalanyang lebih kecil. Menyelesaikan tiap persoalan secaraindependen, dan menggabung solusi masing-masingpersoalan. Algoritma yang diselesaikan dengan tekhnik

25 MATEMATIKA DISKRIT

Procedur tukar atau (input/output a, b : integer)(mempertukarkan nilai a dan b. setelah pertukaran, a berisi nilai b dan b berisi nilai a semulaMasukan : a dan bKeluaran ; a dan bDeklarasi :Temp : integerAlgoritmaTemp ←a

bagi dan gabung mempunyai kompleksitas asimptotikjenis ini. Bila n=1000, maka n log n mungkin 20.000.Bila n dijadikan dua kali semula, maka n log n menadidua kali semua (tetapi tidak terlalu banyak)

O(n2) Algoritma yang waktu pelaksanaanya kuadratik hanyaprktis digunakan untuk persoalan yang berukuran kecil.Umumnya algoritma yang termasuk kelompok ini memeprosessetiap masukan dalam dua buah kalang bersarang, misalnyapada algoritma urut_maks. Bila n=1000, maka waktupelaksanaan algoritma adalah 1.000.000. Bila n dinaikkandua kali semula, maka waktu pelaksanaan algoritmameningkat menjadi empat kali semula.

O(n3) seperti halnya algoritma kuadratik, algoritma memprosessetiap masukan dalam tiga buah kalang bersarang,misalnya algoritma perkalian matriks. Bila n=100, makawaktu pelaksanaan algoritma adalah 1.000.000. Bila ndinaikkan dua kali semula, waktu pelaksanaan algoitmameningkat menjadi delapan kali semula

O(2n) Algoritma yang termasuk kelompok ini mencari solusipersoalan secara “brute force”, misalnya pada algoritmamencari sirkuit Hamilton. Bila n=20, waktu pelaksanaanalgoritma adalah 1.000.000. Bila n dijadikan dua kalisemula, waktu pelaksanaan meningkat menjadi kuadrat kalisemula.

O(n!) Seperti halnya pada algoitma eksponensial, algoritmajenis ini memproses setiap masukan dan memnghubungkannyadengan n-1 masukan lainnya, misalnya algoritma persoalanpedagang keliling (Trafelling salesperson problem). Bilan n=5 , maka waktu pelaksanaan algoritma adalah 120.Bila n dijadikan dua kali semula, maka waktu pelaksanaanmenjadi factorial dari 2n

Enam buah notasi orde yang pertama O(1) sampai O(n3, adalahorde algoritma yang penting. Disini kebutuhan waktunyadibatasi oleh polinomial , dan algoritmanya dinamakanalgoritma polinomial. Algoritma yang komplektisitas waktu

26 MATEMATIKA DISKRIT

asimptotiknya O(2n) dinamakan algoritma eksponensial, karenabila n diperbesar, kebutuhan waktunya meningkat dengantajam. Algoritma yang kebutuhan waktunya O(2n) tidak dapatdikatakan polinomial karena tidak ada bilangan bulat msehingga sedemikian sehingga polinom nm membatasi 2n. atau 2m≠O(nm) untuk sebarang bilangan bulat m. algoritma yangkebutuhan waktunya O(n!) juga digolongkan sebagai algoritmaeksponensial karena pertumbuhan waktunya mempunyai kemiripandengan fungsi 2n

tabel 10.3 dibawah ini memperlihatkan bagaimana kebutuhanwaktu untuk ketujuh fungsi kompleksitas waktu tumbuh( diandaikan konstanta atau koefisien de depan persamaannyaadalah satu)

Logn

n n logn

n2 n3 2n n!

012345

12491632

0282464160

1416642561024

1864512409632768

2416256655364294967296

122436288020922789888000(terlalu besaruntuk ditulis)

Tabel 10.4 memperlihatkan waktu eksekusi algoritma yangkompleksitas waktunya adalah fungsi-fungsi acuan, yaituf (n)=n, f (n)=logn, f (n)=nlogn, f (n)=n2, f (n)=n3, dan f (n)=2n

[NEA96]. Asumsi yang digunakan adalah satu kali operasidasar pada setiap algoritma membutuhkan satu waktunanodetik (10-9 detik). Tabel tersebut memperlihatkan hasilyang mengejutkan. Orang mungkin berharap selama algoritmanyabukan algoritma eksponensial, ia merupakan algoritma yangmemadai. Tetapi, algoritma kuadratik membutuhkan waktu 31,7tahun untuk memproses informasi sebanyak satu billion,sedangkan algoritma O (nlogn )membutuhkan waktu hanya 29,9

27 MATEMATIKA DISKRIT

Tabel 10.3 nilai masing –masing fungsi

detik untuk memproses masukan sebanyak itu. Sebuah algoritmasebaiknya O (nlogn ) atau kita mengasumsikan bahwa algoritmadapat memproses masukan yang berukuran sangat besar dalamwaktu yang dapat ditoleransi.hal ini tidaklah berarti bahwaalgoritma yang kompleksitas waktunya lebih tinggi tidakberguna. Algoritma dengan kebutuhan waktu kuadratik, kubik,dan yang lebih tinggi sering berguna untuk memproses masukanpada berbagai aplikasi[NEA96]

Tabel 10.4 waktu eksekusi algoritma dengan berbagai macamkompleksitas waktu.

n f(n)=log n F(n)=n F(n)= nlog n

F(n)=n2 F(n)=n3 F(n)=2n

10 0,003 µs 0,01 µs 0,033 µs 0,1 µs 1 µs 1 µs

20 0,004 µs 0,02 µs 0,086 µs 0,4 µs 8 µs 1 ms

30 0,005 µs 0,03 µs 0,147 µs 0,9 µs 27 µs 1 s

40 0,005 µs 0,04 µs 0,213 µs 1,6 µs 64 µs 18,3 menit

50 0,006 µs 0,05 µs 0,282 µs 2,5 µs 125 µs 13 hari

102 0,007 µs 0,10 µs 0,664 µs 10 µs 1 ms 4.1013

tahun

103 0,010 µs 1,00 µs 9,966 µs 1 ms 1 s

104 0,013 µs 10 µs 130 µs 100 ms 16,7menit

105 0,017 µs 0,10 ms 167 ms 10 s 11,6hari

106 0,020 µs 1 ms 19,93 ms 16,7menit

31,7tahun

107 0,023 µs 0,01ms 0,23 s 1,16hari

31,709tahun

108 0,027 µs 0,10 s 2,66 s 115,7hari

28 MATEMATIKA DISKRIT

109 0,030 µs 1 s 29,90 s 31,7tahun

Keterangan

1µs= 10-6 second

1 ms= 10-3 second

Sekarang tinjau secara khusus algoritma yang kebutuhanwaktunya eksponensial, algoritma eksponensial tumbuh sangatcepat dengan bertambahnya nilai n. Algoritma eksponensialhanya bagus untuk nilai n yang sangat kecil, bahkan bilakita menurunkan nilai koefisien didepannya, pengurangankebutuhan waktunya tidak memiliki banyak kemajuan. Agarlebih jelas mengapa perubahan koefisien atau konstanta daripada perubahan orde menghasilkan sedikit perbaikan dalamperubahan waktu pelaksanaan program kita dapat melihatnyapada contoh dibawah ini.

Misalkan orde dari dua buah algoritma adalah O(n2 . 2n)dan O(n . 2n). kedua algoritma adalah eksponensial, tetapifungsi kompleksitas algorima yang pertama memiliki faktortambahan dibanding yang kedua. Koefisien didepanpersamaannya diandaikan sama dengan satu. Untuk bermacam-macam nilai n, nilai setiap fungsi ditunjukan pada table10.5. Dengan menggunakan andaian bahwa satu buah operasimemakan waktu0,001 detik. Kita menemukan bahwa untuk n=30kebutuhan waktu algoritma pertama adalah 8,9 jam danalgoritma kedua8,9 hari. Meskipun faktor tambahan n membuatperbedaan yang berarti ciri eksponensial mendominasiperhitungan dan menyiratkan bahwa kedua algoritmamembutuhkan waktu yang lama. Jika kita dapat mempercepatalgoritma yang kedua dengan faktor 1/10, sehingga menjadi(1/10). n2. 2n, maka untuk ukuran masukan n>10 algoritmapertama masih lebih cepat, selanjutnya untuk n=30 waktu yangdibutuhkan algoritma pertama masih lebih besar 24 jam.Kesimpulan yang dibuat dari contoh ini adalah algoritmaeksponensial membutuhkan waktu yang besar. Pengubahankoefisien atau pemakaian computer yang lebih cepat tidak

29 MATEMATIKA DISKRIT

memberi perbaikan waktu komputasi yang berarti. Jalanalternatifnyaadalah menurunkan algoritma dengan orde yangbaik.

Tabel 10.5 nilai fingsi n2 . 2n dan n . 2n untuk setiapbermacam-macam nilai n

n n2. 2n n . 2n

5

10

15

20

30

160

10240

491520

20971520

3.2 . 1010

800

102400

7372800

419430400

9,6 . 1011

Beberapa catatan lain yang ditambahkan disini adalah :

1. Perlu diingat sekali lagi bahwa kompleksitas waktuasimptotik –f(n)- hanya ukuran kasar kebutuhan waktupelaksanaan sebuah algoritma untuk n yang besar, jadibukan waktu yang sebenarnya. Notasi O_Besarmengekspresikan berapa waktu yang dibutuhkan untukmenyelesaikan masalah dengan meningkatkan ukuranmasukan. Jika kita ingin mengukur kebutuhan waktu yanglebih persis, kita juga harus membandingkan koefisiendengan konstanta dalam persamaan T(n)_nya. Sebagaimisal, meskipun T(n)=1000n log n dan T(n)=(n log n)/10sama sama berorde O(n log n), tetapi T(n)=(n log n)/10lebih cepat untuk n yang besar. Contoh lainnya, andaikanalgoritma A membutuhkan waktu T(n)=300n dan algoritma Bmembutuhkan waktu T(n)=5n2.Untuk ukuran masukan berukurann=5, algoritma A membutuhkan waktu 1500 satuan waktu danalgoritma B membutuhkan waktu 125 satuan waktu. Jadi,untuk ukuran masukan yang lebih kecil algoritma B lebih

30 MATEMATIKA DISKRIT

cepat dari algoritma A . Tentu saja algorima A lebihcepat daripada algoritma B untuk n yang besar.

2. Kompleksitas waktu asimptotik dapat digunakan untukmembandingkan dua buah algoritma . Misalkan adapersoalan yang sama diselesaikan dengan dua algoritmayang berbeda. Algoritma satu mempunyai kompleksitaswaktu O(n), dan algoritma II mempunyai kompleksitaswaktu O(n2). Manakah yang lebih cepat, algoritma I ataualgoritma II untuk n yang besar? Mudah dilihat bahwauntuk n yang cukup besar, waktu untuk algoritma IItumbuh lebih cepat dibandingkan algororitma I. Sedangkanuntuk menghitung kebutuhan waktu yang sebenarnya, kitajuga harus melihat konstanta yang mendahuluinya

Contoh(a): algoritma I → T(n)=2n=O(n)Algoritma II→T(n)=n2=O(n2)

Terlihta untuk n>2 algoritma I yang yeng berorde O(n)paling cepat waktu pelaksanaannya dibanding denganalgoritma II yang berorde O(n2). Jadi algoritma I cepatuntuk n>2.

Contoh (b) Aalgoritma I I →T(n)=104 n =O(n)Aalgoritma II →T(n)=102 n =O(n2)

Terlihat, untuk n< 104 algoritma II paling cepat. Tetapiuntuk n>104 algoritma I yang paling cepat.

3. Sebuah masalah yang mempunyai algoritma dengankompleksitas polinomial pada kasus terburuk dianggapmempunyai algoritma yang bagus, artinya masalahtersebut mempuntai algoritma yang mangkus, dengancatatan polinomial tersebut berderajat rendah. Jikapolinomialnya berderajat tinggi, waktu yang dibutuhkanuntuk mengeksekusi algoritma tersebut panjang.Untunglah pada kebanyakan kasus fungsi polinomnyamempunyai derajat yang rendah.

4. Suatu masalah dikatakan tractable (mudah dari segikomputasi) jika ia dapat diselesaikan dengan algoritma

31 MATEMATIKA DISKRIT

yang mempunyai kompleksitas polinomial kasus terburuk(artinya dengan algoritma yang mangkus), karenaalgoritma akan menghasilkan solusi dalam waktu yanglebih pendek[ROS99]. Sebaliknya, sebuah masalahdikatakan intractable (sukar dari segi komputasi) jikatidak algoritma yang mangkus untuk menyelesaikannya.Untuk menunjukan bahwa suatu masalah tractable kitacukup menunjukan ada algoritma yang mangkus untukmenyelesaikan masalah itu. Sebagi contoh, masalahmenentukan nila imasksimum, masalah pencarian, masalahpengurutan, adalah masalah yang tractable karenasalgoritmanya mempunyai kompleksitas waktu polinom untukkasus terburuk. Untuk menunjukan bahwa suatu algoritamIntractble, kita harus menunjukan bahwa tidak adaalgoritma yang mangkus untuk menyelesaikannya. MaslahTSP (Travelling Salesperson Problem)_ adalah contohmasalah yang belum dapat diselesaikan dengan algoritamapolinomial, karena itu interctable. Namun orang belummampu membuktikan bahwa algoritma yang mangkus untukmenyelesaikan masalah itu tidak mungkin ada. Algoritmayang ada untuk menyelesaikan masalah intractable,seperti TSP itu, mempunyai komplesitas eksponensial.

5. Masalah yang sama sekali tidak memiliki algoritma untukmemecahkahnnya disebut masalh tak terselesaikan(unsolved problem). Sebagai contoh, masalah penghentianadalah masalah yang tak terselesaikan. Masalahpenghentian berbunyi: Jika diberikan program dansejumlah masukan, apakah program tersebut berhenti padaakhirnya [JOH90]?

6. Kebanyakan masalah yang dapat dipecahkan dipercayatidak memiliki algoritma penyelesaian dalamkompleksitas waktu polinomial untuk kasus tersebut,karena itu dianggap intractable. tetapi, jika solusimasalah tersebut ditemukan, maka solusinya dapatdiperiksa dalam waktu polinomial. Masalah yangsolusimya dapat diperiksa dalam waktu polinomial

32 MATEMATIKA DISKRIT

dikatakan termasuk kedalam kelas NP(non-deterministicpolynomial). Masalah yang tractable termasuk kedalamkelas P(polynomial). Jenis kelas masalah yang lainadalah kelas NP_lengkap(NP-Complete). Kelas masalahNP_lengkap memiliki sifat bahwa jika jika ada sembarangmasalah didalam kelas ini dapat dipecahkan dalam waktupolynomial berarti semua masalah dalam kelas tersebutdipecahkan dalam waktu poloinomial. Atau , jika dapatmembuktikan semua masalah dalam kelas tersebutintractable. Meskipun banyak penelitan telah dilakukan,tidak ada algoritma dalam waktu polynomial yang dapatmemecahkan masalah di dalam kelas NP- lengkap. Secaraumum diterima, meskipun tidak terbuktikan, bahwa tidakada masalah di dalam kelas NP lengkap yang dapatdipecahkan dalam waktu polynomial [ROS99]

7. Meskipun algoritma eksponensial secara asimtotik lebihburuk daripada algoritma polynomial, tetapi untuk nyang kecil algoritma eksponensial menunjukkan kinerjayang lebih baik. Contohnya 2n≤100n2, untuk n = 1,2,3… ,14. Jadi untuk n yang kecil lebih tepat menggunakanalgoritma eksponensial

8. Penelitian untuk menemukan algoritma dengankompleksitas waktu yang kecil masih terus beerlangsungsampai saat ini, dan merupakan tantangan bagi ilmuancomputer, terutama para anlisis algoritma. Penemuanyang cukup bersejarah adalah algoritma transformasifourier cepat ( fast fourier Transform)- atau TFC- yangditulis oleh J.W Cooley dan J.W Tukey pada tahun 1965.Sebelumnya, algoritma transformasi fourier farik(discrete) –atau TFD- yang biasa berorde o(n2), tetapiTFC memperkecilnya menjadi O¿ Dengan algoritma TFF,waktu komputasi transformasi fourier berukuran cukuptajam. Transformasi fourier banyak digunakan padabidang pengolahan sinyal.

33 MATEMATIKA DISKRIT

Notasi Omega-Besar dan Tetha-Besar

Notasi O-Besar menyediakan batas atas (upper bound)untuk fungsi T(n), tetapi tidak memberikan batas bawah (lowerbound). Untuk itu, kita mendefinisikan batas yang lebihbawah ( lower bound) untuk kompeksitas waktu, yangdilambangkan dengan Omega-besar ((Big−Ω) definisi Ω-Besaradalah

DEFINISI 10.2 T (n)=Ω (g (n )) dibaca “T(n) adalah omega f(n)” yangartinya T (n)berorde paling kecil g(n) bila terdapat konstantaC dan n0 sedemikian sehingga

T (n)≥C.f(n)

Untuk n≥n0

Kita juga dapat mendeffinisikan Θ−Besar

DEFINISI 10.3T (n)=Θ (h (n )) (dibaca “T (n) adalah tetha h (n )” yangartinya T (n) berorde sama dengan h (n ) jika T (n)=O (h (n ))danT (n)=Ω (g (n )).Contoh

Tentukan notasi Ω dan Θ untuk T (n)=2n2+6n+1

Penyelesaian

Karena 2n2+6n+1≥2n2 untuk n≥1, maka dengan mengambil C=2kita memperoleh 2n2+6n+1=Ω(n2)

Karena 2n2+5n+1=O(n2) dan 2n2+6n+1=Ω(n2), maka 2n2+6n+1=Θ(n2)Contoh

Tentukan notasi O, Ω, dan Θ untuk T (n)=5n3+6n2logn

Penyelesaian

Karena 0≤6n2logn≤6n3, maka 5n3+6n2logn≤11n3 untuk n≥1.Dengan mengambil C=1 maka

34 MATEMATIKA DISKRIT

5n3+6n2logn=O(n3)Karena 5n3+6n2logn≥5n3 untuk n≥1 maka dengan mengambik C=5kita memperoleh

5n3+6n2logn=Ω(n3)

Karena 5n3+6n2logn=O(n3) dan 5n3+6n2logn=Ω(n3), maka5n3+6n2logn=Θ(n3)

Contoh tentukan notasi untuk O, Ω, dan Θ untuk T (n)=1+2+3…+n

Penyelesaian

1+2+…+n=O (n2 ) karena 1+2+…+n≤n+n+…+n=n2 untuk n≥1

1+2+…+n=Ω (n) karena 1+2+…+n≤1+1…+1=n untuk n≥1Kita tidak dapat menurunkan notasi Θ−Besar untuk 1+2+…+nkarena batas bawah n tidak sama dengan batas bawah n2. Satucara untuk mendapatkan batas bawah yang sama dengan batasatas adalah dengan menghilangkan setengah pertama dari suku-suku deret. Dengan menjumlahkan hanya suku –suku yang lebih

besar dari [n2], kita mendapatkan

1+2+…+n≥ [n2 ]+… (n−1 )+n

≥ [n2 ]+…+[n2 ]+[n2 ]¿ [n+1

2 ] [n2 ]¿n2/4

Kita menyimpulkan bahwa

1+2+…+n=Ω (n2)Sebuah fakta yang berguna untuk menentukan orde

kompleksitas adalah dari suku tertinggi didalam polynomial.Sebagai contoh, bila T (n)=3n4+6n3+18n+2, maka T(n) adalah

35 MATEMATIKA DISKRIT

berorde n4 ( yaitu O(n4), Ω (n4), dan Θ(n4). Ini dikatakandengan teorema berikut

TEOREMA 10.3. Bila T (n)=amnm+am−1n

m−1+…+a1n+a0 adalah polinomdengan derajat m maka T(n) adalah berorde nm.

Contoh :

Tentukan notasi Ω dan Θ untuk algoritma pengurutan seleksi(selection sort)

Penyelesaian :

Kompleksitas waktu algoritma pengurutan seleksi sudah

dihitung pada contoh 10.6, yaitu T (n)=n(n−1)2 =

n22 −

n2. Menurut

teorema 10.3, akgoritma ini berorde n2. Jadi, kompleksitasasimptotik pengurutan seleksi adalah O(n2), Ω (n2) dan Θ(n2)

36 MATEMATIKA DISKRIT