Anda di halaman 1dari 25

1

DESAIN & ANALISIS ALGORITMA


3/9/2010

PERTEMUAN 2

ALGORITMA
2

Algoritma bukan merupakan jawaban dari masalah. Algoritma dapat dianggap sebagai serangkaian instruksi untuk memecahkan masalah.

3/9/2010

Langkah-langkah Pembuatan Algoritma


Pemahaman Permasalahan Memutuskan: sarana komputasi, pencarian solusi tepat atau approksimasi, struktur data, teknik desain algoritma

Desain algoritma

Pembuktian kebenaran algoritma

Analisis algoritma

Penulisan kode (source code)

1. Pemahaman Masalah

Sebelum memulai merancang algoritma, permasalahan harus benar-benar dipahami terlebih dahulu. Ada beberapa kategori permasalahan yang sering muncul di dunia komputing dan telah memiliki algoritma penyelesaiannya. Jika permasalahan yang akan diselesaikan termasuk dalam kategori tersebut, kita dapat mengacu kepada algoritma penyelesaiannya.

2.1. Penentuan Kemampuan Alat Komputasi

Algoritma yg digunakan sekarang ini masih mengacu ke model komputer John von Neumann (1903-1957), yaitu arsitektur Random Access Memory (RAM). Arsitektur RAM mengasumsikan bahwa instruksi2 komputer dieksekusi satu per satu, baris per baris instruksi. Algoritma yang didesain untuk dieksekusi pada jenis mesin tersebut disebut sequential algorithm. Generasi terbaru komputer saat ini memungkinkan proses eksekusi secara paralel (parallel computing). Algoritmanya disebut parallel algorithm.

2.2. Exact vs Approximate Solution


Exact solution: solusi tepat untuk pemecahan masalah Approximate solution: solusi yang paling mendekati solusi pemecahan masalah Beberapa permasalahan yang menggunakan approximate solution:

Pencarian akar kuadrat Persamaan non-linier Permasalahan2 yg exact solution nya membutuhkan waktu yang sangat lama karena tingkat kompleksitasnya tinggi

2.3. Penentuan Struktur Data


Pemilihan struktur data yang paling tepat sangat menentukan performa dari algoritma yang akan didesain. Algorithms + Data Structures = Programs (Wirth1976) Macam2 struktur data: array, linked list, stack, queue, hash table

2.4. Teknik Desain Algoritma

Teknik Desain Algoritma merupakan pendekatan umum untuk memecahkan masalah dengan algoritma yang dapat diterapkan ke berbagai permasalahan pada area yang berbeda di dunia komputing. (LEV2007) Mempelajari berbagai macam teknik desain algoritma dapat membantu kita dalam mendesain algoritma untuk permasalahan baru. Teknik desain algoritma mengelompokkan algoritma sesuai ide dasarnya, sehingga dapat mempermudah pengkategorian dan pembelajarannya.

3. Metode untuk Menspesifikasikan Algoritma

Beberapa metode yang dapat digunakan untuk menggambarkan algoritma adalah:

Pseudocode Gabungan antara bahasa natural dan bentuk bahasa pemrograman. Contoh:
ALGORITHM Euclid(m,n) //Menghitung FPB(m,n) while n0 do r m mod n m n n r return m

Flowchart Menggunakan bentuk geometri yang mendeskripsikan langkah-langkah algoritma

4. Pembuktian Kebenaran Algoritma

Merupakan langkah untuk membuktikan apakah algoritma menghasilkan hasil yang diinginkan untuk sembarang input yang sah dalam waktu yang finite. Contoh: Pada Algoritma Euclid, FPB(m,n), nilainya akan semakin kecil pada setiap iterasi dan algoritma berhenti ketika angka kedua bernilai 0. Teknik yang umumnya digunakan untuk pembuktian algoritma adalah dengan induksi matematika. Catatan: Tracing tidak menjamin kebenaran suatu algoritma. Jika algoritma terbukti tidak benar, maka dilakukan redesign atau pertimbangkan untuk mengubah struktur data yang digunakan.

5. Analisis Algoritma

Kita ingin agar algoritma kita berkualitas. Beberapa faktor yang dipertimbangkan:
Efficiency
Time

efficiency (seberapa cepat algoritma) Space efficiency (berapa memori yang dibutuhkan)
Simplicity

(berkaitan dengan keindahan dan kesederhanaan) Generality (berkaitan dengan ruang lingkup permasalahan yang diselesaikan dan range input yang dapat diterima oleh algoritma)

6. Penulisan Kode

Transisi dari algoritma ke source code merupakan hal yang beresiko, karena berpotensi menghasilkan program yang salah atau sangat tidak efisien. Validitas program perlu dicek dengan melakukan testing dan debugging. RULE: A

good algorithm is a result of repeated effort and rework

Tipe Permasalahan Penting

Sorting (Pengurutan)

Mengurutkan sejumlah item secara menaik atau menurun, berdasarkan key (kunci). Sorting memudahkan pencarian sebuah item (Contoh: kamus, buku telepon, daftar absensi, dll). Ada banyak algoritma sorting, beberapa algoritma lebih unggul dari yang lain, tetapi tidak ada algoritma terbaik yang dapat menyelesaikan semua permasalahan. Dua sifat yang perlu diperhatikan: Stabil : Menjaga urutan 2 item dengan nilai yang sama In place : Tidak membutuhkan memori tambahan

Searching (Pencarian)

Mencari sebuah item tertentu dalam sebuah himpunan, berdasarkan key. Ada banyak algoritma pencarian, mulai dari yang sederhana hingga yang kompleks. Tidak ada algoritma yang paling sesuai untuk semua kondisi. Beberapa algoritma bekerja lebih cepat tetapi membutuhkan memori tambahan; algoritma lainnya, cepat tetapi hanya dapat bekerja pada array yang sudah terurut, dst. Umumnya searching digunakan bersamaan dengan proses penambahan (add), pengubahan (update), dan penghapusan (delete) item.

String Processing (Pemrosesan String)


String: Kumpulan karakter dari alfabet. Macam-macam string: Text string: terdiri dari abjad (A-Z), angka (0-9), karakter spesial (!, #) Bit string: terdiri dari nilai 0 dan 1 Gene sequence: dimodelkan dengan string karakter terdiri dari huruf A (Adenine), C (Cytosine), G (Guanine), T (Thymine)

Algoritma pemrosesan string sudah digunakan sejak komputer diciptakan (untuk pemrosesan bahasa komputer dan kompilasi) String matching (Pencocokan string): pencarian sebuah kata dalam sebuah teks.

Permasalahan Graph
Graph: Sekumpulan vertex yang dihubungkan oleh garis yang disebut edge Graph dapat digunakan untuk memodelkan permasalahan, di antaranya jaringan transportasi & telekomunikasi, penjadwalan proyek, dan game. Beberapa algoritma Graph: Penelusuran graph (graph traversal) Pencarian path terpendek (shortest-path) Pengurutan graph secara topologis Beberapa permasalahan graph: Traveling Salesman Problem (TSP) Graph-coloring Problem

Combinatorial Problem

Permasalahan Kombinatorik: permasalahan yang mencari objek kombinatorik (misal: permutasi, kombinasi, atau himpunan bagian) yang memenuhi batasan tertentu dan sifat yang diinginkan (misal: memaksimalkan nilai atau meminimalkan biaya) Contoh: Traveling Salesman Problem Secara umum, merupakan permasalahan tersulit di dunia komputing untuk 2 alasan:

Jumlah objek kombinatorik tumbuh sangat cepat jika ukuran permasalahan semakin besar Tidak ada algoritma yang dapat dengan tepat menyelesaikan permasalahan ini dalam waktu yang reasonable

Permasalahan Geometrik

Algoritma Geometrik berhubungan dengan objek geometrik seperti titik, garis, dan poligon. Algoritma geometrik dapat diaplikasikan pada aplikasi seperti computer graphic, robotika, dan tomografi (pengambilan gambar dengan metode section contoh: alat CT-Scan). Contoh algoritma geometrik:

Closest-pair problem: Mencari jarak terdekat antara dua titik pada sebuah bidang Convex-hull problem: Mencari poligon konveks terkecil yang mencakup semua titik yang ada pada sebuah bidang

Permasalahan Numerik

Merupakan permasalahan yang melibatkan penggunaan objek matematika yang kontinyu: penyelesaikan persamaan, penghitungan integral, evaluasi fungsi, dsb. Mayoritas dapat diselesaikan secara aproksimasi saja. Sempat menjadi primadona bagi ilmuwan untuk menyelesaikan permasalahan sains dan engineering. Sejak 25 tahun lalu, dunia komputing bergeser ke arah bisnis, sehingga algoritma yang dibutuhkan adalah algoritma untuk penyimpanan informasi, temu kembali (retrieval), transportasi melalui jaringan, dan presentasi kepada pengguna.

Small Quiz
20

1. 2.

3.

Jelaskan langkah2 pembuatan algoritma! Jelaskan perbedaan antara exact solution dan approximation solution! Apa yang dimaksud dengan permasalahan kombinatorik? Jelaskan dan berikan contohnya!

3/9/2010

Fundamental Data Structures


21

Linear Data Structures


Array
Item[0] Item[1] Item[2] .. Item[n-1]
Menyimpan

data yang memiliki tipe yang sama Data diakses dengan menspesifikasikan index dari array

3/9/2010

22

Fundamental Data Structures (contd)


Linked

List

Tiap elemen disebut sebagai node yang menyimpan 2 info: sebuah data dan pointer ke node lain dalam list Jika pointer dari sebuah node bernilai null, maka node tersebut tidak memiliki node lanjutan (successor) Node diakses dengan menunjuk pada node pertama dan menelusuri pointer sampai ditemukan node yang dicari

Array dan Linked List digunakan untuk merepresentasikan abstract data type (tipe data abstrak) LIST
3/9/2010

23

Fundamental Data Structures (contd)


Stacks : Proses insert dan delete hanya dapat dilakukan dari 1 ujung saja (top) Queue: Proses delete dilakukan dari front (dequeue) dan proses insert dilakukan dari rear (enqueue) Priority queue: queue yang sudah terurut Heap: Pengembangan dari priority queue (minimum heap dan maximum heap)

3/9/2010

24

Fundamental Data Structures (contd)

Graphs
Terdiri

dari sekumpulan vertex yang saling terhubung oleh edge Direpresentasikan dengan adjacency matrix Weighted graph: Graph yang edge-nya memiliki bobot
8 a 4 d 2 3 4 c b 6 5 e
3/9/2010

12

25

Trees

Graph yang tidak memiliki cycle (acyclic)

Sets and Dictionaries


Set: Himpunan elemen tidak terurut yang berbeda satu sama lain Multiset: Himpunan elemen tidak terurut yang tidak harus berbeda satu sama lain Dictionary: Struktur data yang mengimplementasikan pencarian, penambahan, penghapusan item di dalam set/multiset

3/9/2010

Anda mungkin juga menyukai