Pengenalan Analisa Algoritma

Slides:



Advertisements
Presentasi serupa
Teori Graf.
Advertisements

KINEMATIKA Kinematika adalah cabang ilmu Fisika yang membahas gerak benda tanpa memperhatikan penyebab gerak benda tersebut. Penyebab gerak yang sering.
Solusi Persamaan Diferensial Biasa (Bag. 1)
Pemrograman Terstruktur
Pencarian ( Searching)
START.
Pengendalian Proses : Seleksi (Conditional)
Desain Dan Analisis Algoritma
Algoritma dan Struktur Data
Analisa Algoritma Running Time Pertemuan ke-1 Semester genap 2014
1 ANALISA VARIABEL KOMPLEKS Oleh: Drs. Toto’ Bara Setiawan, M.Si. (
Tugas Praktikum 1 Dani Firdaus  1,12,23,34 Amanda  2,13,24,35 Dede  3,14,25,36 Gregorius  4,15,26,37 Mirza  5,16,27,38 M. Ari  6,17,28,39 Mughni.
4/5/2017 PL/SQL SITI MUKAROMAH,S.Kom.
Matematika Diskrit Dr.-Ing. Erwin Sitompul
Pengantar 2008/2009 – Ganjil – Minggu 1.
Aryo Pinandito, ST, M.MT - PTIIK UB
Matematika Diskrit Dr.-Ing. Erwin Sitompul
9. BILANGAN BULAT.
MATRIKS Trihastuti Agustinah.
WEEK 6 Teknik Elektro – UIN SGD Bandung PERULANGAN - LOOPING.
BARISAN DAN DERET ARITMETIKA
Integral Lipat-Tiga.
Integrasi Numerik (Bag. 2)
Selamat Datang Dalam Kuliah Terbuka Ini
Rabu 23 Maret 2011Matematika Teknik 2 Pu Barisan Barisan Tak Hingga Kekonvergenan barisan tak hingga Sifat – sifat barisan Barisan Monoton.
Bahan Kuliah IF3051 Strategi Algoritma Oleh: Rinaldi Munir
1 Ruli Manurung & Ade AzuratFasilkom UI - IKI /2008 – Ganjil – Minggu 4 Dasar-dasar Rekursif.
Algoritma Runut-balik (Backtracking)
: : Sisa Waktu.
Luas Daerah ( Integral ).
Fungsi Invers, Eksponensial, Logaritma, dan Trigonometri
Pertemuan-4 : Recurrences
Desain dan Analisis Algoritma
Struktur Data & Algoritma Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) ‏ 1 Fasilkom UI SUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P.
FUNGSI MATEMATIKA DISKRIT K- 6 Universitas Indonesia
Pemrograman Terstruktur
KONTROL ALUR EKSEKUSI PROGRAM
Tim Matematika Diskrit
Selamat Datang Dalam Kuliah Terbuka Ini
Peluang.
PENGUJIAN HIPOTESA Probo Hardini stapro.
DEA (Data Encryption Algorithm)
Waniwatining II. HIMPUNAN 1. Definisi
Ruli Manurung & Ade Azurat (acknowledgments: Denny, Suryana Setiawan) ‏ 1 Fasilkom UI Ruli Manurung & Ade AzuratFasilkom UI - IKI20100 IKI 20100: Struktur.
FUNGSI STRUKTUR DISKRIT K-8 Program Studi Teknik Komputer
Bahan Kuliah IF2091 Struktur Diskrit
Algoritma Branch and Bound
Bahan Kuliah IF2120 Matematika Diskrit Oleh: Rinaldi Munir
Karakteristik Respon Dinamik Sistem Lebih Kompleks
Algoritma dan Struktur Data
Kompleksitas Algoritma
9. BILANGAN BULAT.
Bahan Kuliah IF2120 Matematika Diskrit
7. RANTAI MARKOV WAKTU KONTINU (Kelahiran&Kematian Murni)
Pohon (bagian ke 6) Matematika Diskrit.
Slides for Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers 2nd ed., by B. Wilkinson & M
Pengantar sistem informasi Rahma dhania salamah msp.
ADT Tree 2007/2008 – Ganjil – Minggu 8.
Struktur Data & Algoritma Suryana Setiawan, Ruli Manurung & Ade Azurat (acknowledgments: Denny) ‏ 1 Fasilkom UI SUR – HMM – AAFasilkom UI - IKI20100/ IKI80110P.
Sorting 2007/2008 – Ganjil – Minggu 5.
Pertemuan 3 ALGORITMA & FUNGSI KOMPLEKSITAS
Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness
Pertemuan 10 DIVIDE And CONQUER Lanjutan ….
Pengenalan Analisa Algoritma
12-CRS-0106 REVISED 8 FEB 2013 CSG523/ Desain dan Analisis Algoritma Divide and Conquer Intelligence, Computing, Multimedia (ICM)
Algoritma dan Struktur Data
Faktor analisa algoritma
Outline Materi Alpro-2 Prinsip” Analisa Algoritma
Kompleksitas Algoritma
Analisa algoritma rekursif
Transcript presentasi:

Pengenalan Analisa Algoritma Semester Ganjil – 2008/2009

Algoritma al•go•rithm n. 1 Math. a) any systematic method of solving a certain kind of problem b) the repetitive calculations used in finding the greatest common divisor of two numbers (called in full Euclidean algorithm)‏ 2 Comput. a predetermined set of instructions for solving a specific problem in a limited number of steps Suatu set instruksi yang harus diikuti oleh komputer untuk memecahkan suatu masalah. Program harus berhenti dalam batas waktu yang wajar (reasonable)‏ Tidak terikat pada programming language atau bahkan paradigma pemrograman (mis. Procedural vs Object-Oriented)‏ Semester Ganjil – 2008/2009

Analisa Algoritma: Motivasi perlu diketahui berapa banyak resource (time & space) yang diperlukan oleh sebuah algoritma Menggunakan teknik-teknik untuk mengurangi waktu yang dibutuhkan oleh sebuah algoritma Semester Ganjil – 2008/2009

Tujuan Pengajaran Mahasiswa dapat memperkirakan waktu yang dibutuhkan sebuah algoritma. Mahasiswa memahami kerangka matematik yang menggambarkan running time. Mahasiswa mengenali beberapa teknik sederhana yang dapat memperbaiki running time. Mahasiswa memahami bahwa suatu permasalahan dapat diselesaikan dengan beberapa algoritma dengan running time yang berbeda-beda. Semester Ganjil – 2008/2009

Outline Apa itu analisa algoritma?- what Bagaimana cara untuk analisa/mengukur? - how Notasi Big-Oh Studi kasus: The Maximum Contiguous Subsequence Sum Problem (Nilai jumlah berurutan terbesar)‏ Algoritma 1: A cubic algorithm Algoritma 2: A quadratic algorithm Algoritma 3: An N log N algorithm Algoritma 4: A linear algorithm Semester Ganjil – 2008/2009

Analisa Algoritma: What? Mengukur jumlah sumber daya (time dan space) yang diperlukan oleh sebuah algoritma Waktu yang diperlukan (running time) oleh sebuah algoritma cenderung tergantung pada jumlah input yang diproses.  Running time dari sebuah algoritma adalah fungsi dari jumlah inputnya Selalu tidak terikat pada platform (mesin + OS), bahasa pemrograman, kualitas kompilator atau bahkan paradigma pemrograman (mis. Procedural vs Object-Oriented)‏ Semester Ganjil – 2008/2009

Analisa Algoritma: How? Bagaimana jika kita menggunakan jam? Jumlah waktu yang digunakan bervariasi tergantung pada beberapa faktor lain: kecepatan mesin, sistem operasi (multi- tasking), kualitas kompiler, dan bahasa pemrograman. Sehingga kurang memberikan gambaran yang tepat tentang algoritma Process 1: Process 2: Process 3: Idle: Wall-Clock time Wall-Clock time CPU time Semester Ganjil – 2008/2009

Analisa Algoritma: how? Notasi O (sering disebut sebagai “notasi big-Oh”)‏ Digunakan sebagai bahasa untuk membahas efisiensi dari sebuah algoritma: log n, linier, n log n, n2, n3, ... Dari hasil run-time, dapat kita buat grafik dari waktu eksekusi dan jumlah data. Semester Ganjil – 2008/2009

Analisa Algoritma: How? Contoh: Mencari elemen terkecil dalam sebuah array Algoritma: sequential scan / linear search Orde-nya: O(n) – linear public static int smallest (int a[]) { assert (length of array > 0); int elemenTerkecil = a[0]; for (ii = 1; ii < a.length; ii++) { if (a[ii] < elemenTerkecil) { elemenTerkecil = a[ii]; } return elemenTerkecil ; Semester Ganjil – 2008/2009

Analisa Algoritma: How? input size running time worst case average case best case Worst-case running time is a bound over all inputs of a certain size N. (Guarantee - Pesimistic)‏ Average-case running time is an average over all inputs of a certain size N. (Prediction)‏ Best-case running time is defined by the minimum number of steps taken on any instance of size n. (Optimistic)‏ n Semester Ganjil – 2008/2009

Big Oh: contoh Sebuah fungsi kubik adalah sebuah fungsi yang suku dominannya (dominant term) adalah sebuah konstan dikalikan dengan n3. Contoh: 10 n3 + n2 + 40 n + 80 n3 + 1000 n2 + 40 n + 80 n3 + 10000 Semester Ganjil – 2008/2009

Dominant Term Mengapa hanya suku yang memiliki pangkat tertinggi/dominan saja yang diperhatikan? Untuk n yang besar, suku dominan lebih mengindikasikan perilaku dari algoritma. Untuk n yang kecil, suku dominan tidak selalu mengindikasikan perilakunya, tetapi program dengan input kecil umumnya berjalan sangat cepat sehingga kita tidak perlu perhatikan. Semester Ganjil – 2008/2009

Big Oh: issues Apakah fungsi linier selalu lebih kecil dari fungsi kubik? Untuk n yang kecil, bisa saja fungsi linier > fungsi kubik Tetapi untuk n yang besar, fungsi kubik > fungsi linier Contoh: f(n) = 10 n3 + 20 n + 10 g(n) = 10000 n + 10000 n = 10, f(n) = 10.210, g(n) = 110.000  f(n) < g(n)‏ n = 100, f(n) = 10.002.010, g(n) = 1.010.000  f(n) > g(n)‏ Mengapa nilai konstan/koefesien pada setiap suku tidak diperhatikan? Nilai konstan/koefesien tidak berarti pada mesin yang berbeda  Big Oh digunakan untuk merepresentasikan laju pertumbuhan (growth rate)‏ Semester Ganjil – 2008/2009

Orde Fungsi Running-Time Semester Ganjil – 2008/2009

Fungsi Running-Time Untuk input yang sedikit, beberapa fungsi lebih cepat dibandingkan dengan yang lain. Semester Ganjil – 2008/2009

Fungsi Running-Time (2)‏ Untuk input yang besar, beberapa fungsi running-time sangat lambat - tidak berguna. Semester Ganjil – 2008/2009

Contoh Algoritma Mencari dua titik yang memiliki jarak terpendek dalam sebuah bidang (koordinat X-Y)‏ Masalah dalam komputer grafis. Algoritma brute force: hitung jarak dari semua pasangan titik cari jarak yang terpendek Jika jumlah titik adalah n, maka jumlah semua pasangan adalah n * (n - 1) / 2 Orde-nya: O(n2) - kuadratik Ada solusi yang O(n log n) bahkan O(n) dengan cara algoritma lain. Semester Ganjil – 2008/2009

Contoh Algoritma Tentukan apakah ada tiga titik dalam sebuah bidang yang segaris (colinier). Algoritma brute force: periksa semua tripel titik yang terdiri dari 3 titik. Jumlah pasangan: n * (n - 1) * (n - 2) / 6 Orde-nya: O(n3) - kubik. Sangat tidak berguna untuk 10.000 titik. Ada algoritma yang kuadratik. Semester Ganjil – 2008/2009

Studi Kasus Mengamati sebuah masalah dengan beberapa solusi. Masalah Maximum Contiguous Subsequence Sum Diberikan (angka integer negatif dimungkinkan) A1, A2, …, AN, cari nilai maksimum dari (Ai + Ai+1 + …+ Aj ). maximum contiguous subsequence sum adalah nol jika semua integer adalah negatif. Contoh (maximum subsequences digarisbawahi)‏ -2, 11, -4, 13, -4, 2 1, -3, 4, -2, -1, 6 Semester Ganjil – 2008/2009 19

Brute Force Algorithm (1)‏ Algoritma: Hitung jumlah dari semua sub-sequence yang mungkin Cari nilai maksimumnya Contoh: jumlah subsequence (start, end)‏ (0, 0), (0,1), (0,2), …, (0,5)‏ (1,1), (1,2), …, (1, 5)‏ … (5,5)‏ 2 -4 13 11 -2 5 4 3 1 Semester Ganjil – 2008/2009

Brute Force Algorithm (2)‏ public static int maxSubSum1( int [] A )‏ { int maxSum = 0; for(int ii = 0; ii < A.length; ii++) { for( int jj = ii; jj < A.length; jj++)‏ int thisSum= 0; for(int kk = ii; kk <= jj; kk++)‏ thisSum += A[kk]; if( thisSum > maxSum )‏ maxSum = thisSum; } return maxSum ; TODO: give illustration of an array! and pointer of i, j, k. 2 -4 13 11 -2 ii jj Semester Ganjil – 2008/2009

Analisa Iterasi (kk) sebanyak N dalam iterasi (jj) sebanyak N dalam iterasi (ii) sebanyak N artinya: O(N3), atau algoritma kubik. Slight over-estimate yang dihasilkan dari perhitungan iterasi yang kurang dari N adalah tidak terlalu penting (kk <= jj). Loop N kali di dalam loop N kali di dalam loop N kali  O(N3), atau algoritma kubik Semester Ganjil – 2008/2009 22

Running Time yang sesungguhnya Untuk N = 100, waktu sebenarnya adalah 0.47 detik pada sebuah komputer. Dapat menggunakan informasi tersebut, untuk memperkirakan waktu untuk input yang lebih besar: T(N) = cN 3 T(10N) = c(10N)3 = 1000cN 3 = 1000T(N)‏ Ukuran input meningkat dengan kelipatan 10 kali, yang artinya meningkatkan running time dengan kelipatan 1000 kali. Untuk N = 1000, perkiraan waktu 470 detik. (waktu sebenarnya 449 detik). Untuk N = 10,000, perkiraan waktu 449000 detik (6 hari). Semester Ganjil – 2008/2009 23

Bagaimana memperbaikinya? Membuang sebuah iterasi; Tidak selalu bisa. Dalam contoh sebelumnya dimungkinkan: iterasi paling dalam (kk) tidak diperlukan karena informasi nya terbuang. Nilai thisSum untuk nilai jj selanjutnya dapat dengan mudah diperoleh dari nilai thisSum yang sebelumnya: Yang diperlukan: Aii + A ii+1 + … + A jj-1 + Ajj Yang telah dihitung: Aii +A ii+1 + …+ A jj-1 Yang dibutuhkan adalah yang telah dihitung + Ajj Dengan kata lain: sum (ii, jj) = sum (ii, jj - 1) + Ajj Semester Ganjil – 2008/2009

The Better Algorithm { int maxSum = 0; public static int maxSubSum2( int [ ] A )‏ { int maxSum = 0; for( int ii = 0; ii < A.length; ii++ )‏ int thisSum = 0; for( int jj = ii; jj < A.length; jj++ )‏ thisSum += A[jj]; if( thisSum > maxSum )‏ maxSum = thisSum; } return maxSum ; Semester Ganjil – 2008/2009 25

Analisa Dengan logika yang sama: Saat ini running time adalah quadratic, or O(N2)‏ Perkirakan waktu eksekusi untuk input berukuran ribuan. Algoritma ini masih dapat digunakan untuk ukuran input 10 ribu. Ingat, bahwa algoritma kubik sudah tidak practical lagi bila digunakan untuk ukuran input tersebut. Semester Ganjil – 2008/2009 26

Actual running time Untuk N = 100, waktu sebenarnya adalah 0.011 detik pada sebuah komputer. Perkirakan waktu sebenarnya untuk input lebih besar: T(N) = cN 2 T(10N) = c(10N)2 = 100cN 2 = 100T(N)‏ Input diperbesar dengan kelipatan 10 artinya running time akan membesar dengan kelipatan 100. Untuk N = 1000, perkiraan running time adalah 1.11 detik. (waktu sebenarnya 1.12 detik). Untuk N = 10,000, perkiraan 111 detik (= actual). Semester Ganjil – 2008/2009 27

Algoritma Rekursif Gunakan pendekatan divide-and-conquer : Membagi (divide) permasalahan ke dalam bagian yang lebih kecil Menyelesaikan (conquer) masalah per bagian secara recursive Menggabung penyelesaian per bagian menjadi solusi masalah awal divide et impera Semester Ganjil – 2008/2009 28

Algoritma Rekursif (2)‏ Urutan dengan nilai jumlah terbesar kemungkinan berada pada: terletak di setengah input awal terletak di setengah input akhir. berawal disetengan input awal dan berakhir di setengah input akhir. Hitung ketiga kemungkinan tersebut. Cari yang lebih besar. Kedua kemungkinan pertama dapat dengan mudah dihitung secara rekursif. Semester Ganjil – 2008/2009

Menghitung kemungkinan ketiga dapat dilakukan dengan dua iterasi; lihat program kemungkinan ketika berasal dari penjumlahan dua bagian, bagian pertama berawal pada setengah bagian input pertama berakhir di tengah. Bagian kedua berasal dari urutan index setengah +1 hingga setengah bagian input akhir. Untuk bagian pertama gunakan iterasi dari kanan-ke-kiri (right-to-left) mulai dari element terakhir pada setengah input awal. Untuk bagian kedua, gunakan iterasi dari kiri-ke-kanan, (left-to-right) mulai dari awal setengah input akhir. Semester Ganjil – 2008/2009

Ilustrasi Tengah-tengah Semester Ganjil – 2008/2009

Versi Rekursif private int maxSumRec (int[] a, int left, int right) { int center = (left + right) / 2; if(left == right) { // Base case return a[left] > 0 ? a[left] : 0; } int maxLeftSum = maxSumRec (a, left, center); int maxRightSum = maxSumRec (a, center+1, right); for(int ii = center; ii >= left; ii--) { leftBorderSum += a[ii]; if(leftBorderSum > maxLeftBorderSum) maxLeftBorderSum = leftBorderSum; ... Semester Ganjil – 2008/2009

Versi Rekursif (lanj.)‏ ... for(int jj = center + 1; jj <= right; jj++) { rightBorderSum += a[jj]; if(rightBorderSum > maxRightBorderSum)‏ maxRightBorderSum = rightBorderSum; } return max3 (maxLeftSum, maxRightSum, maxLeftBorderSum + maxRightBorderSum); // publicly visible routine (a.k.a driver function)‏ public int maxSubSum (int [] a) { return maxSumRec (a, 0, a.length-1); Semester Ganjil – 2008/2009

Detil Program Pastikan dalam rekursif program anda ada base case untuk mengatasi zero-element arrays. Gunakan method “driver” yang public (method rekursif dibuat private)‏ Aturan Rekursif : Memiliki base case Membuat progress menuju ke base case Asumsikan bahwa panggilan rekursif bekerja dengan baik. Hindari menghitung sebuah penyelesaian dua kali. Semester Ganjil – 2008/2009 34

Analisa Misalkan T( N ) adalah waktu untuk menyelesaikan masalah dengan ukuran input N. maka T( 1 ) = 1 (1 adalah quantum time unit ketika memproses base case; ingat konstanta tidak terlalu penting. ). T( N ) = 2 T( N / 2 ) + N Dua buah pemanggilan rekursif, masing-masing berukuran N / 2. Waktu yang dibutuhkan untuk menyelesaikan masing- masing-nya adalah T( N / 2 ) Kasus ketiga membutuhkan O( N ) . Semester Ganjil – 2008/2009 35

Bottom Line T(1) = 1 = 1 * 1 T(2) = 2 * T(1) + 2 = 4 = 2 * 2 T(N) = N(1 + log N) = N + N log N = O(N log N)‏ Semester Ganjil – 2008/2009 36

N log N Setiap algoritma rekursif yang menyelesaikankan permasalahan dengan membagi dua permasalahan kemudian melakukan proses linear (menggabung atau memecah) akan selalu O( N log N ) karena analisa yang sama tetap berlaku. Algoritma yang O( N log N ) adalah jauh lebih baik dibanding quadratic. Tapi masih belum lebih baik dibanding O( N ), namun tidak terlalu jauh berbeda. Untuk permasalahan ini terdapat solusi yang linear. Menganalisa running time cukup jelas, namun memeriksa kebenaran program ataupun menyusun algoritma tersebut tidak mudah . Semester Ganjil – 2008/2009 37

Algoritma linear Algoritma Linear merupakan yang terbaik. Ingat: linear artinya O( N ). Running time yang linear selalu sebanding dengan ukuran input. Sulit untuk membuat algoritma yang lebih baik dari linear (kecuali ada rumusan tertentu). Jika input membesar dengan kelipatan 10, maka running time juga hanya akan membesar dengan kelipatan yang sama. Semester Ganjil – 2008/2009

Ide Ai,j adalah kumpulan bilangan mulai dari urutan i hingga urutan j. Si,j adalah dari kumpulan bilangan tersebut. Theorema: Untuk Ai,j dengan Si,j < 0. Jika q > j, maka Ai,q bukanlah deretan terurut yang terbesar. Semester Ganjil – 2008/2009

Bukti Theorema Bukti: Si,q = Si,j + Sj+1,q Si,j < 0  Si,q < Sj+1,q Semester Ganjil – 2008/2009

Program – versi 1 static public int maximumSubSequenceSum3 (int a[]) { int maxSum = 0; int thisSum = 0; for (int jj = 0; jj < a.length; jj++) { thisSum += a[jj]; if (thisSum > maxSum) { maxSum = thisSum; } else if (thisSum < 0) { thisSum = 0; } return maxSum; Semester Ganjil – 2008/2009

Program – versi 2 static public int maximumSubSequenceSum3b (int a[]) { int thisSum = 0, maxSum = 0; for (int ii = 0; ii < a.length; ii++) { thisSum = Max(0, a[ii] + thisSum); maxSum = Max(thisSum, maxSum); } return maxSum; Semester Ganjil – 2008/2009

Running Time Semester Ganjil – 2008/2009

Running Time: on different machines Algoritma Kubik pada mesin Alpha 21164 at 533 Mhz menggunakan C compiler (mewakili mesin yang cepat)‏ Algoritma Linear pada mesin Radio Shack TRS-80 Model III (a 1980 personal computer with a Z-80 processor running at 2.03 Mhz) using interpreted Basic (mewakili mesin lambat)‏ Semester Ganjil – 2008/2009

Running Time: Moral Of The Story Bahkan teknik programming yang terbaik tak akan dapat membuat sebuah algoritma yang tidak efisien menjadi cepat. Sebelum kita menginvestasikan waktu untuk mencoba mengoptimisasi program, kita harus pastikan algoritma nya sudah yang paling efisien. Semester Ganjil – 2008/2009

Algoritma Logaritme Definisi Formal Contoh: Untuk setiap B, N > 0, logB N = K, if B K = N. Jika (base) B diabaikan, maka default-nya adalah 2 dalam konteks ilmu komputer (binary representation). Contoh: log 32 = 5 (karena 25 = 32)‏ log 1024 = 10 log 1048576 = 20 log 1 milyard = sekitar 30 logaritme berkembang jauh lebih lambat dari N dan lebih lambat dari akar kuadrat dari N. Semester Ganjil – 2008/2009

Contoh Algoritma Logaritme BITS IN A BINARY NUMBER Berapa banyak bits dibutuhkan untuk merepresentasikan bilangan bulat? REPEATED DOUBLING Mulai dari X = 1, berapa kali X harus dikalikan dua agar mendekati nilai N? REPEATED HALVING Mulai dari X = N, jika N dibagi dua terus menerus, berapa kali iterasi agar membuat N lebih kecil atau sama dengan 1 (Halving rounds up). Jawaban untuk seluruh pertanyaan diatas adalah: log N (dibulatkan). Semester Ganjil – 2008/2009

Mengapa log N? B bits menyatakan 2B bilangan bulat. Maka 2B adalah minimal sebesar N, maka B adalah minimal log N. Karena B bilangan bulat, maka pembulatan dibutuhkan. Pendekatan serupa untuk contoh-contoh lain. Semester Ganjil – 2008/2009

Repeated Halving Principle Sebuah algoritma adalah O( log N ) jika membutuhkan waktu konstan untuk membagi input permasalahan dan mengerjakan masing-masing-nya secara rekursif. (biasanya 1/2). Penjelasan: Akan terjadi sebanyak log N dari proses konstan tersebut. Semester Ganjil – 2008/2009

Linear Search Bila diberikan sebuah bilangan bulat X dan sebuah array A, kembalikan posisi X dalam A atau sebuah tanda bila tidak ada X dalam A. Jika X muncul lebih dari sekali, kembalikan posisi manapun. Array A tidak perlu diubah. Jika array input tidak terurut, solusinya adalah menggunakan linear search. Running times: pencarian tidak berhasil: O( N ); setiap element diperiksa pencarian berhasil: Worst case: O( N ); setiap element diperiksa Average case: O( N ); setengah bagian diperiksa Apakah kita akan dapat melakukannya lebih baik bila diketahui array input terurut? Semester Ganjil – 2008/2009

Binary Search Ya! Gunakan binary search. Lihat bilangan ditengah (asumsi array terurut dari kiri ke kanan)‏ Kasus 1: Jika X lebih kecil dari bilangan ditengah, maka hanya perlu lihat sub array bagian kiri. Kasus 2: Jika X lebih besar dari bilangan ditengah, maka hanya perlu lihat sub array bagian kanan Kasus 3: Jika X sama dengan bilangan ditengah, maka selesai. Base Case: Jika input sub array kosong, X tidak ditemukan. Logaritme sesuai dengan the repeated halving principle. Algoritma binary search pertama dipublikasikan tahun 1946. Published binary search pertama tanpa bugs tidak muncul hingga 1962. Semester Ganjil – 2008/2009

Performs the standard binary search using two comparisons per level. /** Performs the standard binary search using two comparisons per level. @param a the array @param x the key @exception ItemNotFound if appropriate. @return index where item is found. */ public static int binarySearch (Comparable [ ] a, Comparable x ) throws ItemNotFound { int low = 0; int high = a.length - 1; int mid; while( low <= high )‏ mid = (low + high) / 2; if (a[mid].compareTo (x) < 0) { low = mid + 1; } else if (a[mid].compareTo (x) > 0) { high = mid - 1; } else { return mid; } throw new ItemNotFound( "BinarySearch fails" ); Semester Ganjil – 2008/2009

Analisa program Binary Search Dapat melakukan satu perbandingan tiap iterasi dari pada dua iterasi dengan cara menggantikan base case: Save the value returned by a[mid].compareTo (x) Average case dan worst case dalam algoritma hasil revisi adalah sama : 1 + log N perbandingan (dibulatkan). Contoh: If N = 1,000,000, maka 20 bilangan dibandingkan. Sequential search akan lebih banyak 25,000 kali dalam kondisi rata-rata (average case). Semester Ganjil – 2008/2009

Big-Oh Rules (1)‏ Ekspresi matematika untuk menyatakan tingkat laju pertumbuhan relatif: DEFINITION: (Big-Oh) T(N) = O(F(N)) jika ada konstan positif c dan N0 sehingga T(N) c F(N) untuk N N0. DEFINITION: (Big-Omega) T(N) = (F(N)) jika ada konstan c dan N0 sehingga T(N) c F(N) untuk N N0 DEFINITION: (Big-Theta) T(N) = (F(N)) jika dan hanya jika T(N) = O(F(N)) dan T(N) = (F(N)). DEFINITION: (Little-Oh) T(N) = o(F(N)) jika dan hanya jika T(N) = O(F(N)) dan T(N)   (F(N)). Semester Ganjil – 2008/2009

Big-Oh Rules (2)‏ Arti dari beberapa fungsi tingkat laju. Jika ada lebih dari satu parameter, maka aturan tersebut berlaku untuk setiap parameter. 4 n log(m) + 50 n2 + 500 m + 1853  O(n log(m) + n2 + m)‏ 4 m log(m) + 50 n2 + 500 m + 853  O(m log(m) + n2)‏ Semester Ganjil – 2008/2009

Latihan Urutkan fungsi berikut berdasarkan laju pertumbuhan (growth rate)‏ N, N, N1.5, N2, N log N, N log log N, N log2 N, N log (N2), 2/N, 2N, 2N/2, 37, N3, N2 log N A5 + B5 + C5 + D5 + E5 = F5 0  A  B  C  D  E  F  75 hanya memiliki satu solusi. berapa? Semester Ganjil – 2008/2009