• Tidak ada hasil yang ditemukan

Algoritma dan Struktur Data. Performansi Algoritma

N/A
N/A
Protected

Academic year: 2021

Membagikan "Algoritma dan Struktur Data. Performansi Algoritma"

Copied!
32
0
0

Teks penuh

(1)

Performansi Algoritma

Teknik Informatika Universitas Muhammadiyah Malang 2016

(2)

Mana yang lebih baik?

• pilihan 1 :

Algoritma biasa dengan komputer yang cepat.

• pilihan 2 :

Menggunakan algoritma yang efisien dengan

komputer standart.

(3)

Studi Kasus

1. Algoritma dengan waktu eksekusi dalam orde

eksponensial

2. Sebuah komputer yang mampu menjalankan

program dengan masukan n dalam waktu

detik.

n = jumlah data.

n 2 -4 10

(4)

Penyelesaian

Dapat dihitung T(n) dari persamaan 10

-4

x 2

n

:

• n = 10, waktu eksekusi kurang lebih 1/10 detik.

• n=20, waktu eksekusi kurang lebih 2 menit.

• n=30, waktu eksekusi lebih dari satu hari.

• Semakin banyak data yang diproses, waktu yang

dibutuhkan semakin lama.

(5)

Efficiency Hardware

• Jika kecepatan komputer di-upgrade sebesar 100 kali

(

). Maka dengan algoritma yang sama :

jumlah masukan = n, waktu =

detik.

n=35, waktu yang dibutuhkan kurang lebih 9,5 jam.

-6 10

-6 n 10 x 2

(6)

Efficiency Algorithms

• Misal ada algoritma baru yang dapat menyelesaikan

masalah tsb dalam orde kubik

(

)

• Dengan menggunakan komputer pertama waktu

yang dibutuhkan

detik.

• Sehingga :

hanya dengan waktu 1 hari data yang dapat diproses

sebanyak n = 900.

3 n

-4 3 10 x n

(7)

Efficiency Algorithms

• Efficiency algoritma lebih baik dari efficiency

hardware.

KOMPUTER 1 Waktu n Algoritma 1 1 hari 30 Algoritma 2 1 hari 900 KOMPUTER 2 Waktu n Algoritma 1 1 hari 35 Algoritma 2 1 hari 31500

(8)

Performance of Program

• Performansi program adalah besar memory

komputer dan banyaknya waktu yang

dibutuhkan untuk menjalankan sebuah

program.

• Ukuran performansi sebuah program

ditentukan oleh dua faktor :

1. Space complexity

2. Time complexity

(9)

Space & Time complexity

• Space complexity adalah besar memory yang

dibutuhkan untuk menjalankan program.

• Time complexity adalah banyaknya waktu

(10)

Space complexity

• Faktor-faktor yang mempengaruhi space complexity :

1. Instruction space

space yang dibutuhkan untuk menyimpan hasil

compile dari program.

2. Data space

space yang dibutuhkan untuk menyimpan semua

variabel maupun konstanta.

3. Environment stack space

space yang dibutuhkan untuk menyimpan informasi

dari eksekusi yang tertunda.

(11)

Time complexity

• Perhitungannya didapatkan dari seluruh faktor

yang ada pada space complexity dan

operasi/perintah yang ada pada program.

• Sangat dipengaruhi oleh algoritma program.

(12)

Time Complexity

• Dibedakan menjadi 3 macam :

1. Tmax(n) => worst case

2. Tmin(n) => best case

(13)

Kompleksitas Waktu

Aturan penghitungan kompleksitas waktu T(n) :

a. Pengisian nilai(assignment), perbandingan, operasi aritmatik, read, write : membutuhkan waktu 1

b. Pengaksesan array, memilih field dari sebuah record : waktu 1.

c. If C then S1 else s2, membutuhkan waktu Tc + max(Ts1, Ts2) yang dalam hal

ini Tc, Ts1, dan Ts2 adalah kompleksitas waktu C, S1, dan S2.

d.Perulangan for, kompleksitas waktunya adalah jumlah perulangan dikali dengan kompleksitas waktu dari body perulangan.

e. While C do S atau repeat S until C. Untuk kedua perulangan tersebut kompleksitas waktu yang dibutuhkan adalah jumlah perulangan dikali dengan kompleksitas waktu dari body C dan S.

f. Prosedur dan fungsi. Waktu yang dibutuhkan untuk memindahkan kendali dari fungsi yang dipanggil adalah 1.

(14)

Contoh Perhitungan T(n)

Perhatikan sintax berikut :

Public static Computable(....) {

if(a.length==0) return null; a[0]=0;

for(int i=0;i<n;i++){ sum.increment(a[i]); return sum;

(15)

Contoh Perhitungan T(n)

Perhatikan sintax berikut :

Untuk worst case didapatkan : T(n) = 2n+4

Public static Computable(....) {

if(a.length==0) return null; a[0]=0; for(int i=0;i<n;i++){ sum.increment(a[i]); return sum; } 0 0 1 1 n+1 n 1

(16)

Contoh Perhitungan T(n)

Perhatikan sintax berikut :

Untuk best case didapatkan : T(n) = 5

Public static Computable(....) {

if(a.length==0) return null; a[0]=0; for(int i=0;i<n;i++){ sum.increment(a[i]); return sum; } 0 0 1 1 1 1 1

(17)

Contoh Perhitungan T(n)

Perhatikan sintax berikut :

Untuk average case didapatkan dari rata-rata T(n) worst dan best case : T(n) = (2n+4+5)/2 => T(n) = n+9/2

Public static Computable(....) {

if(a.length==0) return null; a[0]=0;

for(int i=0;i<n;i++){ sum.increment(a[i]); return sum;

(18)

Latihan

1. Dari program berikut tentukan T(n) worst, best dan average case.

Public static void main(...) { for(int i=0;i<n;i+=2) x[i]+=2; int i=1; while(i<=n/2){ x[i] +=x[i+1]; i++; } } }

(19)

Penyederhanaan Persamaan T(n)

• Misal worst case dari sebuah algoritma adalah

T(n) = 2n2 + 6n + 1. persamaan ini dapat disederhanakan

dengan 2n2

• Perhatikan tabel berikut :

• Untuk n bernilai besar, bisa dikatakan bahwa = 2n2 + 6n + 1 sebanding dengan 2n2 , sehingga :

T(n) = 2n2 n T(n) = 2n2 + 6n + 1 2n2 10 261 200 100 2061 2000 1000 2.006.001 2.000.000 10000 2.000.060.001 2.000.000.000

(20)

Big-O

• Pada

kompleksitas

waktu

asimptotik,

kinerja

algoritma

diukur

dengan

membuat

makna

“sebanding”. Yaitu dengan menghilangkan faktor

koefisien dalam ekspresi T(n).

• Big-O

digunakan

untuk

menyederhanakan

persamaan dari T(n).

(21)

Notasi Big-O

Notasi O disebut notasi Big-O yang merupakan notasi

untuk kompleksitas waktu asimptotik. Dituliskan : O(f(n)).

Cara penyederhanaan :

Jika kompleksitas waktu T(n) dari algoritma diketahui, maka kompleksitas waktu asimptotik dapat langsung ditentukan denganmengambil suku yang mendominasi fungsi T dan menghilangkan koefisien-nya.

Contoh :

T(n) = n-1 , maka : T(n)= O(n) T(n)=(n+1)/2 , maka : T(n)=O(n)

(22)

Aturan Koefisien Big-O

• T(n) = O(f(n))

dibaca Tn adalah O dari f(n)

• Jika pada persamaan big-O memiliki koefisien, maka T(n) <=

O(C[f(n)]). Untuk memenuhi aturan tersebut yang perlu

dilakukan adalah menemukan pasangan C dan n0 sehingga memenuhi aturan:

(23)

Penjelasan

• Suku-suku yang tidak mendominasi pada T(n) dapat diabaikan, sehingga kompleksitas waktu untuk T(n) adalah :

2 n2 + suku-suku lainnya.

• Dengan mengabaikan suku-suku yang lain yang tidak

mendominasi pada 2 n2 maka :

T(n) = O(2 n

2

)

[dibaca : T(n) adalah O dari 2n

2

]

• Jadi kita telah mengganti ekspresi T(n) = 2n2 + 6n + 1 dengan

(24)

Contoh

• Jadi untuk T(n) = 2n2 + 6n + 1 jika disederhanakan dengan

menggunakan aturan big-O harus memenuhi aturan T(n)<=C(f(n)). • Sehingga penyederhanaannya sbb : Untuk C(f(n)) = 9n2 koefisien (c) =9, n 0 =1 (memenuhi) Untuk C(f(n)) = 2n2 koefisien (c) =2, n 0 =1 (Tidak memenuhi

(25)

Latihan

Tentukan Big-O dari T(n). Kemudian tunjukan bahwa

T(n) <=C(f(n)) untuk pasangan C dan n

0

yang sesuai:

1. T(n) = 3n +2

2. T(n) = 6n

3

+12n

2

+1

3. T(n) = 10n

2

+4n+2

4. T(n) = 6n

3

+12n

2

+1

(26)

Latihan

1. T(n) = n

2

/10+2

n

= O(2

n

)

2. T(n) = 6n

2

+ 2

n

= O(2

n

)

3. T(n) = 3n

2

+2n+5 = O(n

2

)

(27)

Latihan

1. Dari program berikut tentukan T(n).

2. Dari T(n) yang telah didapatkan tentukan big-O. 3. Kemudian tentukan pasangan C dan n yg mungkin.

Public static void main(...) { for(int i=0;i<n;i+=2) x[i]+=2; int i=1; while(i<=n/2){ x[i] +=x[i+1]; i++; } }

(28)

Teorema Big-O

• Misal T1(n) = O(f(n)) dan T2(n) = O(g(n)), maka :

1. T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n),g(n))) 2. T1(n)T2(n) = O(f(n))O(g(n)) = O(f(n)g(n))

3. O(cf(n)) = O(f(n)), c adalah tetapan 4. f(n) = O(f(n))

(29)

Pengelompokan Algoritma

(Berdasarkan Notasi Big-O)

Constant

O(1)

Logarithmic

O(log n)

Linear

O(n)

Quadratic

O(n

2

)

Cubic

O(n

3

)

Polynomial

O(n

p

)

Exponential

O(a

n

)

(30)

Notasi Big-Omega dan Big-Tetha

• Big-Ω (Big-Omega)

Digunakan untuk mendefinisikan batas bawah (lower bound) dalam kompleksitas waktu.

T(n) = Ω (g(n))(dibaca T(n) adalah Omega dari f(n))

T(n) berorde paling kecil g(N) bila terdapat koefisien C dan no sedemikian sehingga :

T(n) ≥ C(f(n)) untuk n ≥ no

• Big-Θ (Big-Tetha)

T(n) = Θ (h(n)) (dibaca T(n) adalah tetha dari h(n))

(31)

Contoh

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

jawab :

 2n2+6n+1 ≤ 9n2 n ≥ 1 (C=9) maka :

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

2n2+6n+1 ≥ 2n2 n ≥ 1 (C=2) maka :

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

Karena 2n2+6n+1 =O(n2 ) dan 2n2+6n+1 =Ω(n2 ),

(32)

Pustaka

• Sartaj Sahni , “Data Structures & Algorithms”,

Presentation L20-24.

• Mitchell Waite, “Data Structures & Algorithms in

Java”, SAMS, 2001

Referensi

Dokumen terkait

menukar nilai variabel sehingga method fungsi tersebut dapat dipanggil oleh method main. Lalu pada menu kedua dilakukan hal yang sama, dengan membuat

Algoritma diatas akan mengulang kalimat saya akan giat belajar demi cita-cita sebanyak 100 kali, apabila sudah terpenuhi maka perulangan

Rekursif berarti suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif

Kompleksitas waktu, dinyatakan oleh T(n) , diukur dari jumlah tahapan komputasi yang dibutuhkan untuk menjalankan algoritma sebagai fungsi dari ukuran masukan n, di

 Kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan untuk pencarian data

n Waktu yang diperlukan ( running time ) oleh sebuah algorithm cenderung tergantung pada jumlah input yang diproses.. n Running time dari sebuah algoritme adalah fungsi dari

syntax (cara penulisan) sesuai dengan bahasa pemrograman yang digunakan yang mempunyai komponen-komponen : Input, Output, Proses,.. Percabangan

Tujuan dari modular adalah membuat program menjadi terstruktur dan mengurangi coding... PROCEDURE Prosedur Sebenarnya di bahasa C tidak mengenal prosedur, tidak seperti bahasa lain