Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

ANALISA ALGORITMA Tim Matematika Diskrit. Pendahuluan Algoritma adalah spesifikasi urut-urutan langkah untuk melakukan pekerjaan tertentu. Dalam program.

Presentasi serupa


Presentasi berjudul: "ANALISA ALGORITMA Tim Matematika Diskrit. Pendahuluan Algoritma adalah spesifikasi urut-urutan langkah untuk melakukan pekerjaan tertentu. Dalam program."— Transcript presentasi:

1 ANALISA ALGORITMA Tim Matematika Diskrit

2 Pendahuluan Algoritma adalah spesifikasi urut-urutan langkah untuk melakukan pekerjaan tertentu. Dalam program komputer, algoritma berarti urutan-urutan langkah kasar yang harus dilakukan untuk menyelesaikan masalah. Algoritma harus dibuat sebelum pembuatan program. Algoritma haruslah benar. Algoritma yang baik harus mampu memberikan hasil yang sedekat mungkin dengan nilai yang sebenarnya. Efisiensi algoritma (efisiensi waktu dan memori)

3 Notasi “O” Perbedaan waktu proses sebagai fungsi jumlah data yang diproses sangat erat hubungannya dengan laju pertumbuhan (rate of growth) algoritma yang bersangkutan. Laju pertumbuhan menunjukkan faktor kelipatan waktu proses seiring dengan kenaikan jumlah data. Dalam komputer, laju pertumbuhan dinyatakan dalam notasi-O. (dibaca notasi big-oh) Notasi-O memberikan cara untuk menyatakan laju pertumbuhan algoritma secara global/aproksimasi dan tidak memperhatikan perbedaan faktor konstanta serta perbedaan- perbedaan lain yang tidak begitu berpengaruh.

4 Misalkan f dan g adalah fungsi berharga riil yang didefinisikan pada himpunan bilangan-bilangan riil. Fungsi f berorder g (ditulis f(x) = O(g(x)) bila dan hanya bila terdapat suatu bilangan positif M dan bilangan riil x 0 sedemikian hingga |f(x)| ≤ M |g(x)| untuk x > x 0 f(x) = O(g(x)) dibaca “g adalah aproksimasi big-oh untuk f”. Definisi di atas dapat digambarkan sbb. Perhatikan bahwa grafik M |g(x)| berada di atas grafik |f(x)| untuk x > x 0. Y grafik M.g(x) grafik f(x) x 0 X

5 Contoh 1 Nyatakan pertidaksamaan-pertidaksamaan sbb dalam notasi-O a. |17x 6 – 3x 3 + 2x + 8 | ≤ 30 |x 6 | untuk semua bilangan riil x > 1 b. | x + 3x( 2 log x) | ≤ 4 | x( 2 log x) | untuk semua bilangan riil x > 2 Penyelesaian: a. f(x) = 17x 6 – 3x 3 + 2x + 8; g(x) = x 6 Ambil M = 30 dan x 0 = 1, maka pertidaksamaan dapat dituliskan sebagai | f(x) | ≤ M g(x)  x > x 0 sehingga f(x) = 17x 6 – 3x 3 + 2x + 8 adalah O (x 6 ) b. f(x) = x + 3x( 2 log x); g(x) = x ( 2 log x) Ambil M = 4 dan x 0 = 2. Maka pertidaksamaan dapat dituliskan sebagai | f(x) | ≤ M g(x)  x > x 0 sehingga f(x) = x + 3x ( 2 log x) adalah O (x ( 2 log x))

6 Contoh 2 Buktikan bahwa: a. 3x 3 + 2x + 7 adalah O(x 3 ) untuk x > 1 b. 7x 3 – 2x + 3 adalah O(x 3 ) untuk x > 1 Penyelesaian: a.  x > 1, | 3x 3 + 2x + 7 | = 3x 3 + 2x + 7 ≤ 3x 3 + 2x 3 + 7x 3 karena 2x 1  | 3x 3 + 2x + 7 | ≤ 12x 3 = 12 | x 3 | untuk setiap x > 1 karena x 3 tidak negatif. Ambil M = 12 dan x 0 = 1. maka pertidaksamaan di atas berarti | 3x 3 + 2x + 7 | ≤ M | x 3 |  x > x 0. Atau berarti bahwa 3x 3 + 2x + 7 adalah O (x 3 )

7 b. | 7x 3 – 2x + 3 | ≤ | 7x 3 + 2x + 3 | ≤ | 7x 3 | + |2x| + |3| karena x > 1  | 7x 3 – 2x + 3 | ≤ 7x 3 + 2x + 3 karena x > 1 sehingga | x | = x  | 7x 3 – 2x + 3 | ≤ 7x 3 + 2x 3 + 3x 3 karena 2x < 2x 3 dan 3 < 3x 3  | 7x 3 – 2x + 3 | ≤ 12x 3  | 7x 3 – 2x + 3 | ≤ 12 | x 3 | karena x > 1 sehingga | x | = x Ambil M = 12 dan x 0 = 1 maka | 7x 3 – 2x + 3| ≤ M | x 3 |  x > x 0 yang berarti 7x 3 – 2x + 3 adalah O (x 3 ) Teorema 1. Jika a 0, a 1, …, a n adalah bilangan riil dengan a n ≠ 0 maka f(x) = a n x n + … + a 1 x + a 0 adalah O (x n )

8 Contoh 3 Carilah order deret … + n Penyelesaian: … + n = ½ n (n+1) = ½ n 2 + ½ n Menurut teorema 1, ½ n 2 + ½ n adalah O (n 2 ) sehingga … + n adalah O (n 2 )

9 Teorema 2. Jika b adalah bilangan riil > 1 maka: b logx adalah O(x n ) untuk semua bilangan bulat n  1 x n adalah O(b x ) untuk semua bilangan bulat n  0 x b logx adalah O(x 2 )  x  b. y = 2 x y = x 2 y = x 2 log x y = x y = 2 log x

10 Notasi-O yang menyatakan bahwa f(x) = O(g(x)) hanyalah mensyaratkan bahwa |f(x)|  M g(x)  x > x 0. Tidak ada syarat bahwa batas g(x) tersebut harus dibuat sedekat mungkin dengan f(x). Secara praktis memang sulit untuk mencari fungsi g(x) yang grafiknya tepat terletak di atas f(x) untuk x > x 0. Biasanya digunakan fungsi g(x) yang lazim dipakai dan cukup dekat dengan f(x). Oleh karena itu, order suatu fungsi tidaklah tunggal. Sebagai contoh, polinomial f(x) = a n x n + … + a 1 x + a 0 mempunyai order O(x n ), tetapi polinomial itu juga O(b x ). Karena kedua order tersebut sering dipakai, sedangkan grafik fungsi f(x) = b x lebih atas dibanding x n, maka dikatakan bahwa polinomial a n x n + … + a 1 x + a 0 adalah O(x n ) dan bukan O(b x ).

11 Teorema 3. Hirarki fungsi yang sering dipakai untuk menyatakan order adalah sebagai berikut: (setiap fungsi merupakan big-oh dari fungsi di kanannya) 1, 2 log(n), …, 4 √n, 3 √n, √n, n, n( 2 log(n)), n√n, n 2, n 3, …, 2 n, n!, n n

12 Teorema 4. a. Jika f(n) = O(g(n)) dan c adalah konstanta, maka c f(n) = O(g(n)) b. Jika f(n) = O(g(n)) dan h(n) = O(g(n)), maka f(n) + h(n) = O(g(n)) c. Jika f(n) = O(a(n)) dan g(n) = O(b(n)), maka f(n) g(n) = O(a(n) b(n)) d. Jika a(n) = O(b(n)) dan b(n) = O(c(n)), maka a(n) = O(c(n)) e. Jika f(n) = O(a(n)) dan g(n) = O(b(n)), maka f(n) + g(n) = O(max {|a(n)|, |b(n)|}

13 Bukti: a. f(n) = O(g(n)) berarti terdapat M > 0 dan n0 sedemikian hingga |f(n)|  M |g(n)|  n > n0 Jika kedua ruas dikalikan dengan |c| maka |c| |f(n)|  |c| M |g(n)| atau |c f(n)|  |c| M |g(n)| Sebut |c| M = M 1. Karena M dan c adalah konstanta, maka M 1 = |c| M juga konstanta sehingga |c f(n)|  M 1 |g(n)|. Ini berarti bahwa c f(n) = O(g(n))

14 b. f(n) = O(g(n)) berarti terdapat M 1 > 0 dan n 1 sedemikian hingga |f(n)|  M 1 |g(n)|  n > n 1 h(n) = O(g(n)) berarti terdapat M 2 > 0 dan n 2 sedemikian hingga |h(n)  M 2 |g(n)|  n > n 2 |f(n) + h(n)|  |f(n)| + |h(n)| Ambil n 0 = max (n 1, n 2 ). Karena |f(n)|  M 1 |g(n)| dan |h(n)|  M 2 |g(n)|, maka |f(n) + h(n)|  M 1 |g(n)| + M 2 |g(n)|  n > n 0 |f(n) + h(n)|  (M 1 + M 2 ) |g(n)|  n > n 0 |f(n) + h(n)|  M |g(n)| dengan M = M 1 + M 2 Pertidaksamaan terakhir ini berarti bahwa f(n) + h(n) = O(g(n))

15 Contoh 4. Nyatakan fungsi di bawah ini sebagai notasi-O fungsi-fungsi yang ada dalam teorema 3. a. n + n ( 2 log n) b. √n 3 sin n ( 2 log n) c. ½ n ( 2 log n) + 3n + 15

16 Penyelesaian: a. n = O(n), n ( 2 log n) = O(n( 2 log n)) Menurut teorema 4(e), maka n + n( 2 log n) = O (max {n, n( 2 log n)}) Dalam teorema 3, O(n) terletak lebih kiri dibandingkan dengan n ( 2 log n) maka max { n, n ( 2 log n)} = n ( 2 log n), sehingga n + n ( 2 log n) adalah O(n ( 2 log n)) b. √n 3 sin n  n 3 karena sin n  1, sehingga √n 3 sin n adalah O(√n 3 ). Di samping itu, 2 log n adalah O(√n) Menurut teorema 4 (c) maka √n 3 sin n ( 2 log n) adalah O(√n 3 √n) = O(n 2 )

17 c. ½ n ( 2 log n) adalah O(n ( 2 log n) 3n adalah O(n), 15 adalah O(1) menurut teorema 4(e) maka ½ n ( 2 log n) + 3n + 15 adalah O(max { n ( 2 log n), n, 1}). karena n ( 2 log n) terletak paling kanan, maka max { n ( 2 log n), n, 1} = n ( 2 log n), sehingga ½ n ( 2 log n) + 3n + 15 adalah O(n ( 2 log n))

18 Contoh 5. Buktikan bahwa 2 n bukan O(n a ) untuk semua bilangan bulat a > 1. Penyelesaian: Akan dibuktikan metode kontradiksi. Misalkan 2 n = O(n a ). Maka terdapatlah bilangan bulat M > 0 dan bilangan riil n 0 sehingga |2 n |  M |n a | untuk n > n 0. Karena n dan a positif maka harga mutlak bisa dihilangkan. Jadi 2 n  M n a. Jika kedua ruas dilogaritmakan, akan menghasilkan pertidaksamaan: 2 log (2 n )  2 log (M n a ) n  2 log M + a ( 2 log n) n / ( 2 log n)  ( 2 log M)/( 2 log n) + a Untuk n > 2 maka 2 log n > 1 sehingga ( 2 log M)/( 2 log n) < 2 log M

19 Didapat pertidaksamaan n/( 2 log n)  2 log M + a Terjadilah kontradiksi karena M dan a adalah suatu konstanta sehingga 2 log M + a adalah suatu besaran yang harganya tetap. Sebaliknya ruas kiri dapat menjadi semakin besar untuk n yang semakin besar, sehingga dapat melebihi besarnya konstanta ruas kanan. Jadi pengandaian 2 n = O(n a ) salah. Yang benar 2 n bukan O(n a )

20 Efisiensi Algoritma Analisa yang paling sering dilakukan pada suatu algoritma adalah waktu proses. Menentukan waktu proses secara tepat merupakan pekerjaan yang sngat sulit, karena waktu proses secara eksak sangat tergantung pada implementasi algoritma dan perangkat keras yang dipakai. Analisa yang diinginkan untuk menyatakan efisiensi algoritma haruslah dibuat seumum mungkin sehingga bisa dipakai pada semua algoritma, terlepas dari implementasi maupun perangkat keras yang digunakan. Kompleksitas algoritma cukup dinyatakan dalam order waktu proses (Big-Oh) sebagai fungsi jumlah data masukan yang diberikan.

21 Contoh 6. Perhatikan potongan program untuk menghitung jumlahan n buah bilangan riil yang disimpan dalam suatu vektor V Sum = 0 bagian (a) For i = 1 to n Sum = sum + V[i] bagian (b) End For I Write (sum) bagian (c) Carilah operasi aktif program tersebut dan nyatakan order waktu proses sebagai fungsi jumlah masukan (n).

22 Penyelesaian: Untuk mencari operasi aktif, haruslah ditentukan berapa kali program dieksekusi pada tiap-tiap bagiannya. - Bagian (a) dieksekusi 1 kali - Bagian (b) merupakan suatu kalang (loop). Kalang ini akan diproses berdasarkan kenaikan harga i, dari i = 1 hingga i = n. Jadi statemen Sum = sum + V[i] akan diproses sebanyak n kali sesuai dengan kenaikan harga i. - Bagian (c) akan diproses 1 kali. Karena bagian (b) merupakan bagian yang paling sering diproses, maka bagian (b) merupakan operasi aktifnya. Bagian (a) dan (c) dapat diabaikan karena bagian-bagian tsb tidak diproses sesering bagian (b). Bagian (b) diproses sebanyak data yang dimasukkan (n). Maka program penjumlahan bilangan riil mempunyai order sebanding dengan n. Jadi, program mempunyai order O(n).

23 Contoh 7. Carilah order waktu proses bagian-bagian program di bawah ini (n adalah bilangan bulat positif yang menyatakan jumlah data). a. For i = 2 to n A = 2*n + i*n End For i b. For i = 1 to n For j = 1 to i A = n + i*j End For i End For j

24 Penyelesaian: a. Jumlah pemrosesan statemen A = 2*n + i*n mengikuti iterasi dalam i, yaitu dari i = 2 hinggan i = n. Jadi sebanyak (n-2) + 1 = (n-1) kali. Perhatikan bahwa yang dipentingkan di sini bukanlah berapa nilai variabel A (yang merupakan fungsi dari i dan n), tetapi frekuensi pemrosesan A. Jadi algoritma mempunyai order O(n). b. Pada i=1, j berjalan dari 1 hingga 1 sehingga A diproses 1 kali Pada i=2, j berjalan dari 1 hingga 2 sehingga A diproses 2 kali dst Pada i=n, j berjalan dari 1 hingga n sehingga A diproses n kali. Secara keseluruhan A akan diproses sebanyak (1+2+…+n) = n(n+1)/2 kali. Maka algoritma mempunyai order O(n 2 ).

25 Latihan 1. Carilah bilangan bulat N sedemikian hingga jika n > N, maka n/log n > Mana fungsi yang lebih besar (grafiknya lebih atas): log(n) ataukah log (log(n))? Jelaskan alasan saudara. Carilah Big-Oh fungsi soal nomor 3-8 berikut ini: 3. f(n) = n 2 + 3n – 1 4. f(n) = (3n 2 + 5n – 13) 2 5. f(n) = (3 log n + n) 2 6. f(n) = (n ( 2 log n) + 1) 2 7. f(n) = … + 2 n 8. f(n) = n + n/2 + n/4 + … + n/2 n

26 Carilah konstanta M sehingga f(n) = O(g(n)) untuk tiap-tiap soal nomor 9 – 12 berikut ini: 9. f(n) = 17n + 31;g(n) = n 10.f(n) = 3n 2 – 4n + 5:g(n) = n 2 11.f(n) = 0,2n ;g(n) = n 12.f(n) = n 3 + 3n 2 + 5n + 11;g(n) = n Buktikan bahwa f(n) = n 2 bukanlah O(n) 14. Ada 2 buah program (misal L dan Q) yang masing-masing dapat menyelesaikan suatu masalah yang sama dengan benar. Program L bersifat linier dan membutuhkan waktu 20 menit untuk menyelesaikan masalah dengan 10 data. Program Q adalah kuadratis yang membutuhkan waktu 5 menit untuk menyelesaikan masalah yang sama dengan 10 data. Andaikan kita mempunyai masalah dengan 10 data, program mana yang lebih cepat untuk menyelesaikan?

27 Dalam potongan program soal nomr 15 – 16 di bawah ini: a. Hitunglah jumlah operasi (seperti penjumlahan, perkalian dan lain-lain) yang harus dilakukan oleh program tersebut. b. Hitunglah order/kompleksitas algoritma tersebut yang dinyatakan sebagai fungsi jumlah data (= n) 15. For i=3 to (n-1) a = 3*n + 2*i- 1 End For i 16. Max = A[1] For i=2 to n If max < a[i] then max = a[i] End For i


Download ppt "ANALISA ALGORITMA Tim Matematika Diskrit. Pendahuluan Algoritma adalah spesifikasi urut-urutan langkah untuk melakukan pekerjaan tertentu. Dalam program."

Presentasi serupa


Iklan oleh Google