Fundamentals Of Algorithmics Gilles Brassard & Paul Bratley.

Slides:



Advertisements
Presentasi serupa
REKURSIF.
Advertisements

PROCEDURE Temu IX BANGHER.
Pencarian ( Searching)
Desain Dan Analisis Algoritma
Kompleksitas Algoritma
Algoritma dan Struktur Data
Aryo Pinandito, ST, M.MT - PTIIK UB
Teori P, NP, dan NP-Complete
Analysis of Algorithm KULIAH #2. Analysing Control Structure  SEQUENCING, misal P1 dan P2 : dua bagian algoritma (bisa single instruction atau complicated.
REKURSIF.
Latihan Kalkulus Predikat Part.2
PENGURUTAN (SORTING).
Desain Dan Analisis Algoritma
Bahan Kuliah IF3051 Strategi Algoritma Oleh: Rinaldi Munir
Desain dan Analisis Algoritma
Design and Analysis of ALGORITHM (Session 3)
FUNGSI MATEMATIKA DISKRIT K- 6 Universitas Indonesia
Tim Matematika Diskrit
Modul-8 : Algoritma dan Struktur Data
Kompleksitas Algoritma
FUNGSI STRUKTUR DISKRIT K-8 Program Studi Teknik Komputer
Kompleksitas Algoritma
Algoritma dan Struktur Data
Kompleksitas Algoritma
Algoritma dan Struktur Data
Slides for Parallel Programming Techniques & Applications Using Networked Workstations & Parallel Computers 2nd ed., by B. Wilkinson & M
BASIC FEASIBLE SOLUTION
Diberikan pada Kuliah Sela Teknik Informatika - Universitas Muhammadiyah Malang Tahun 2011.
Desain dan Analisis Algoritma
Matakuliah: T0034 / Perancangan & Analisis Algoritma Tahun: 2008 Pertemuan 1 PENGENALAN PERANCANGAN & ANALISIS ALGORITMA.
Sorting 2007/2008 – Ganjil – Minggu 5.
Pertemuan 3 ALGORITMA & FUNGSI KOMPLEKSITAS
Pertemuan-2 Kriteria kebaikan suatu algoritme Correctness
Analisa Algoritma Running Time.
12-CRS-0106 REVISED 8 FEB 2013 CSG523/ Desain dan Analisis Algoritma Divide and Conquer Intelligence, Computing, Multimedia (ICM)
Algoritma dan Pemrograman – Pertemuan 3 & 4 Sorting (Pengurutan)
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
MATERI PERKULIAHAN ANALISIS ALGORITMA
DIG1G3 Implementasi Struktur Data
KUG1A3 Algoritma& Pemrograman
CSG3F3/ Desain dan Analisis Algoritma
Istiqomah, S.Kom/Tekkom 2013
CSG523/ Desain dan Analisis Algoritma
SUBALGORITMA.
Strategi Algoritma Kuliah 2 : Kompleksitas Algoritma
KUG1A3 Algoritma& Pemrograman
CSG523/ Desain dan Analisis Algoritma
CSG523/ Desain dan Analisis Algoritma
Pertemuan 4 ALGORITMA lanjutan….
Kompleksitas Algoritma
Faktor analisa algoritma
Pengenalan Analisis Algoritma
Analisis dan Perancangan Algoritma Kuliah 4 : Asymptotic pd Kasus
Modul 6 : Analisis Algoritma dan Struktur Data
MATERI PERKULIAHAN ANALISIS ALGORITMA
NOTASI ASIMTOTIK (ASYMTOTIC NOTATION)
Desain dan Analisis Algoritma
STRUKTUR DATA (10) recursive function
ALGORITMA DAN PEMROGRAMAN III
Strategi Algoritma Kuliah 3 : Algoritma Efisien
Kompleksitas Algoritma
Pipelined Computations Dalam teknik pipeline, problem dibagi menjadi deretan yang harus dilaksanakan satu setelah lainnya. Setiap tugas nantinya akan dieksekusi.
Algoritma Divide and Conquer
Algoritma Divide and Conquer
Analisa algoritma rekursif
Konsep Bahasa Pemrograman I Operator
Dr. Mufid Nilmada, SSi., MMSI
Pipelined Computations
Analisis Algoritma E. Haodudin Nurkifli Teknik Informatika
Transcript presentasi:

Fundamentals Of Algorithmics Gilles Brassard & Paul Bratley

Elementary Algorithmics Problems & Instances, algoritma harus bekerja dengan benar pada setiap instance dari permasalahan (problem) yang di-klaim akan diselesaikan. Domain of definition, ketika permasalahan ditentukan, maka hal penting yang harus dilakukan adalah mendefinisikan “domain of definition”, yaitu himpunan semua instances yang diperhitungkan.

The Efficiency Of Algorithms Empirical (a posteriori) approach, untuk memilih algoritma yang terdiri dari pemrograman teknik 2 yang dibandingkan, dan mencoba mereka pada instances yang berbeda dengan bantuan komputer. Theoretical (a priori) approach, terdiri dari penentuan secara matematik kuantitas dari sumber (resource) yang diperlukan oleh masing 2 algoritma sebagai fungsi dari ukuran instance yang diperhitungkan.

The Efficiency Of Algorithms (cont) Contoh resource : # of processors yang diperlukan oleh algoritma parallel. Ukuran (size) instance bersesuaian secara formal dengan # of bits yang diperlukan untuk menyatakan (represent) instance tersebut pada komputer, menggunakan suatu skema coding yang didefinisikan secara tepat dan sangat beralasan. Dalam bahasan, size berarti sebarang integer yang mengukur # of components dalam instance. (dalam sorting, size : # of items being sorted.)

The Efficiency Of Algorithms (cont) Manfaat theoretical approach tidak tergantung pada komputer yang digunakan, programming language, maupun keahlian programmer nya. Algoritma mungkin juga dianalisa dengan menggunakan “hybrid approach”, di mana bentuk function yang menggambarkan “algorithm’s efficiency” ditentukan secara teoritis, kemudian setiap parameter numerik yang diperlukan ditentukan secara empiric untuk program dan mesin tertentu, biasanya dengan suatu jenis regresi.

The Efficiency Of Algorithms (cont) Untuk mengukur “amount of storage” yang digunakan algoritma sebagai function dari size of the instances, ada satuan natural yang tersedia, yaitu “bit”. (tanpa memperhatikan mesin yang digunakan, konsep “one bit of storage” terdefinisikan dengan baik. Tetapi tidak berlaku jika efisiensi algoritma ingin diukur dalam “term” waktu yang diperlukan untuk menghasilkan jawaban.

The Efficiency Of Algorithms (cont) (Jawaban) “principle of invariance”, yang menyatakan bahwa dua implementasi yang berbeda dari algoritma yang sama tidak akan berbeda efisiensi nya lebih dari suatu konstanta pengali (multiplicative constant). Secara lebih tepat, jika dua implementasi dari algoritma yang sama masing 2 memerlukan t 1 (n) dan t 2 (n) detik, maka untuk menyelesaikan instance dengan size n, akan selalu ada konstanta 2 positif c dan d sedemikian hingga t 1 (n)  ct 2 (n) dan t 2 (n)  dt 1 (n), ketika n cukup besar.

The Efficiency Of Algorithms (cont) Prinsip tetap benar, apapun komputer yang digunakan untuk mengimplementasikan algoritma, tidak peduli programming language dan compiler apa yang digunakan, dan bahkan tidak mempedulikan keahlian (skill) dari programmer. Perubahan mesin bisa menyelesaikan 10 kali atau 100 kali lebih cepat, sehingga menaikkan kecepatan dengan faktor konstan. Sebaliknya, perubahan algoritma bisa meng-improve secara besar 2 an seiring dengan peningkatan ukuran instance.

The Efficiency Of Algorithms (cont) Algoritma untuk suatu permasalahan memerlukan waktu “in the order of” t(n), untuk suatu function t, jika ada suatu konstanta positif c dan implementasi algoritma mampu menyelesaikan setiap instance ukuran n  ct(n) detik (atau sebarang satuan waktu yang lain). Algoritma memerlukan waktu “in the order of” n, atau lebih sederhana dengan mengatakan waktu linier (linear algorithm).

Average & worst-case Analyses Waktu yang diperlukan, atau “storage” yang digunakan oleh suatu algoritma sangat bervariasi antara dua instances yang berbeda dengan ukuran sama. (Ilustrasi), perhatikan dua algoritma “elementary sorting”, yaitu “sorting by insertion”, dan “sorting by selection”.

Average & worst-case Analyses (cont) procedure insert( T[1..n] ) for i  2 to n do x  T[i]; j  i – 1 while j > 0 and x < T[j] do T[j+1]  T[j] j  j – 1 T[j+1]  x

Average & worst-case Analyses (cont) procedure select( T[1..n] ) for i  1 to n – 1 do minJ  i; minX  T[i] for j  i+1 to n do if T[j] < minX then minJ  j minX  T[j] T[minJ]  T[i] T[i]  minX

Average & worst-case Analyses (cont) Analisis worst-case cocok untuk algoritma yang response time nya kritis (critical). (controlling a nuclear power plant). Menganalisa perilaku rata 2 algoritma biasanya lebih sulit dibanding menganalisa perilaku algoritma dalam worst-case nya. Oleh karena itu, analisis yang bermanfaat dari perilaku rata 2 algoritma memerlukan suatu pengetahuan sebelumnya tentang distribusi instances yang akan diselesaikan.

Elementary Operations Operasi elementer : operasi yang waktu eksekusinya bisa dibatasi (nilai) atasnya dengan suatu konstanta yang hanya tergantung pada implementasi tertentu yang digunakan – seperti, mesin, programming language, dll. Sehingga, konstanta tidak tergantung pada size maupun parameter 2 lain dari instance yang diperhitungkan.

Elementary Operations (cont) Contoh, algoritma memerlukan a additions, m multiplications, dan s assignment instructions. Selanjutnya, addition tidak lebih lebih dari t a msec, multiplication tidak lebih dari t m msec, dan assignment tidak lebih dari t s msec, dengan t a, t m, dan t s konstanta 2 yang tergantung pada mesin yang digunakan. Selanjutnya, addition, multiplication, dan assignment bisa dianggap sebagai operasi 2 elementer. Total time t yang diperlukan algoritma bisa dibatasi oleh t  at a + mt m + st s  max(t a, t m, t s )  (a + m + s)

Elementary Operations (cont) Dalam algoritma, satu baris program bisa bersesuaian dengan sejumlah (variabel) operasi 2 elementer. Contoh, T : array dari n elemen (n > 0), maka waktu yang diperlukan untuk menghitung (compute) x  min  T[i]  1  i  n  menaik (increase) berdasarkan n.

Elementary Operations (cont) function Wilson( n ) { mengembalikan true jika dan hanya jika n prima, n > 1 } if n dibagi habis oleh (n – 1)! + 1 then return true else return false

Elementary Operations (cont) function Sum ( n ) { menghitung jumlahan integers dari 1 ke n } sm  0 for i  1 to n do sm  sm + i return sm

Elementary Operations (cont) function Fibonacci ( n ) { menghitung suku ke-n dari barisan fibonacci } i  1 j  0 for k  1 to n do j  i + j I  j – 1 return j

Elementary Operations (cont) Tidak ada real machine yang bisa mengeksekusi penjumlahan ini, jika n dipilih cukup besar. Sehingga, analisa algoritma harus tergantung pada domain aplikasi yang dimaksudkan. Kasus di Fibonacci, hanya diperlukan n = 47 untuk terakhir kalinya bisa mengeksekusi “j  i+j” yang menyebabkan “arithmetic overflow” pada mesin 32-bits.

Elementary Operations (cont) Sehingga untuk menampung hasil saat n = diperlukan bits, atau lebih dari 1420 computer-words. (Dalam permasalahan praktis tidak realistik.) Untuk kasus perkalian, masih bisa dianggap elementary operation selama operand nya cukup kecil. (lebih mudah menghasilkan operands besar dengan perkalian berulang dari pada dengan jumlahan  yang penting, operasi aritmatik tidak “overflow”.)

Elementary Operations (cont) Permasalahan serupa muncul ketika mengnalisa algoritma yang melibatkan real numbers, yaitu jika presisi yang dikehendaki meningkat seiring dengan size of instance yang akan diselesaikan. Satu contoh tipikal untuk fenomena ini digunakan “de Moivre’s formula”. Yaitu, suku ke-n (f n ) dari barisan didekati dengan  n /√5, dengan  = (1 + √5)/2 yang disebut “golden ratio”.

Algorithm’s Efficiency (Fact) computing equipment berkembang sangat cepat (khususnya dalam kemampuan computation nya), sehingga terlihat tidak begitu bermanfaat untuk meluangkan waktu mencoba merancang algoritma yang lebih efisien. Apakah tidak lebih mudah menunggu “the next generation of computers” ? (Jawaban) : argumentasi tidak benar.

Algorithm’s Efficiency (cont) (ilustrasi) : algoritma eksponensial, dan komputer bisa me-run algoritma pada instance dengan size n dalam x 2 n detik. Jadi, program bisa menyelesaikan instance dengan size 10 dalam x 2 10 detik (atau sekitar 1/10 detik). n= 20, t = 1000 x 1/10 = 100 detik ≈ 2 menit; n = 30, t = 1000 x 100 detik = detik > 1 hari penuh. (ekstrim) : misal komputer mampu run tanpa interruption / error dalam setahun, ukuran instance yang bisa diselesaikan baru 38. Untuk n > 38, tetapi ada komputer yang kecepatannya x x 2 n ( x 2 n ), ternyata dalam setahun komputer hanya mampu menyelesaikan instance dengan ukuran (n = 45 ).

Algorithm’s Efficiency (cont) (Pada umumnya), jika komputer sebelumnya mampu menyelesaikan instance dengan size n dalam waktu t, maka komputer baru (dalam waktu yang sama, t) akan menyelesaikan instance dengan size terbaiknya n + lg 100, atau sekitar n + 7. (investasi di algoritma) dengan algoritma kubik, misal komputer semula mampu menyelesaikan instance dengan size n dalam x n 3 detik. Maka n= 10, t= 10 detik; n= 20, t= 1 s.d 2 menit; n= 30, t= 4.5 menit; dalam satu hari mampu menyelesaikan untuk n > 200, dan dalam setahun bisa menyelesaikan instance dengan size hampir 1500.

Algorithm’s Efficiency (cont) x 2 n x 2 n x n x n 3 Computation time (in second) Size of the instance

Some Examples (Calculating Determinants) Dua algoritma terkenal untuk menghitung determinan : (1) berdasar pada definisi rekursif, dan (2) disebut “Gauss-Jordan elimination”. Algoritma rekursif memerlukan waktu proporsional dengan n! (untuk menghitung determinant matriks n x n). Algoritma “Gauss-Jordan” memerlukan waktu proporsional dengan n 3 untuk pekerjaan yang sama.

Some Examples (Calculating Determinants - Cont) Kedua algoritma diprogram pada komputer (mesin) yang sama. Algoritma “Gauss- Jordan” menghitung determinan matriks 10 x 10 dalam waktu 1/100 detik, dan untuk matriks 100 x 100 memerlukan waktu 5.5 detik. Algoritma rekursif, untuk matriks 5 x 5 memerlukan waktu > 20 detik, dan 10 menit untuk matriks 10 x 10. Untuk matriks 20 x 20, algoritma rekursif memerlukan waktu > 10 juta tahun.

Some Examples (Sorting) Perbedaan praktis antara waktu dalam order n 2 dengan n log n, bisa dilihat dengan memprogram algoritma “insertion sort” dengan “quicksort” pada mesin (komputer) yang sama. Quicksort hampir 2 x lebih cepat dengan “insertion sort” ketika n = 50 elemen, dan 3 x lebih cepat ketika n = 100. Untuk mengurutkan 1000 elemen, “insertion” memerlukan waktu lebih dari 3 detik, sementara “quicksort” memerlukan waktu kurang dari 1/5 detik.