Struktur Data & Algoritme (Data Structures & Algorithms) Wrap Up Denny (denny@cs.ui.ac.id) Suryana Setiawan (setiawan@cs.ui.ac.id) Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2004/2005 Version 2.0 - Internal Use Only Objectives Mengulas kembali dan merangkum konsep-konsep penting dalam kuliah Struktur Data dan Algoritme SDA/WRAP-UP/V2.0/2 1
Struktur Data dan Algoritme Data structure (aka ADT Abstract Data Type) = representation + operations operation allowed may vary between data structure insert delete access (find / get) update Algoritme Suatu set instruksi yang harus diikuti oleh computer 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) SDA/WRAP-UP/V2.0/3 Struktur Data dan Algoritme Mengapa dalam penyimpanan data diperlukan sebuah struktur? Supaya lebih mudah/efisien dalam pengaksesan/pemrosesan data tersebut Mengapa struktur data penting? Bukankan hanya algoritme saja yang menentukan running time? Problem: mencari sebuah integer dalam data-data yang terurut Algoritme: binary search!!! Struktur data: binary search pada array? binary search pada linked list? doubly linked list? Struktur data mana yang lebih efisien? SDA/WRAP-UP/V2.0/4 2
Struktur Data dan Algoritme Contoh Lain: Problem: mengevaluasi ekspresi: (5 + 2) * 7 menggunakan struktur data Stack struktur data + algoritme = program Algorithms require the use of a proper representation of data to achieve efficiency Struktur data membantu tercapainya Component Reusability. Menerapkan konsep OO paradigm: encapsulation, information-hiding dan abstraction. SDA/WRAP-UP/V2.0/5 Analisa Algoritme: what? Mengukur jumlah sumber daya (time dan space) yang diperlukan oleh sebuah algoritme Waktu yang diperlukan (running time) oleh sebuah algoritme cenderung tergantung pada jumlah input yang diproses. Running time dari sebuah algoritme 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) SDA/WRAP-UP/V2.0/6 3
Analisa Algoritme: how? Notasi O (sering disebut sebagai notasi big-oh ) Digunakan sebagai bahasa untuk membahas efisiensi dari sebuah algoritme: log n, linier, n log n, n 2, n 3,... Big Oh digunakan untuk merepresentasikan laju pertumbuhan (growth rate) Dominant Term Mengapa hanya suku yang memiliki pangkat tertinggi/dominan saja yang diperhatikan? Untuk n yang besar, suku dominan lebih mengindikasikan perilaku dari algoritme. Untuk n yang kecil, suku dominan tidak selalu mengindikasikan perilakunya, tetapi program dengan input kecil umumnya berjalan sangat cepat sehingga kita tidak perlu perhatikan. SDA/WRAP-UP/V2.0/7 Orde Fungsi Running-Time Function Name c Constant log N Logarithmic log 2 N Log-squared N Linear N log N N log N N 2 Quadratic N 3 Cubic 2 N Exponential N! Factorial SDA/WRAP-UP/V2.0/8 4
Fungsi Running-Time Untuk input yang sedikit, beberapa fungsi lebih cepat dibandingkan dengan yang lain. SDA/WRAP-UP/V2.0/9 Fungsi Running-Time (2) Untuk input yang besar, beberapa fungsi runningtime sangat lambat - tidak berguna. SDA/WRAP-UP/V2.0/10 5
Sorting Sorting = pengurutan Sorted = terurut menurut kaidah tertentu Sorting umumnya dipakai dalam pre-processing untuk mempercepat proses-proses berikutnya. misalnya: mencari elemen binary search menghilangkan duplikasi SDA/WRAP-UP/V2.0/11 Bubble Sort Idea: Gelembung udara (ringan) dalam air akan naik ke atas, air (berat) yang di atasnya akan turun. Worst case: O(n 2 ) Best case: O(n) -- when? why? SDA/WRAP-UP/V2.0/12 6
Selection sort & Insertion sort Incremental approach 2 array: terurut dan tidak terurut Awalnya array yang terurut kosong. Kosong sorted Ambil 1 elemen dari array yang tidak terurut, masukkan ke array yang terurut sedemikian rupa sehingga tetap menjaga keterurutan data (invariant). Lakukan sebanyak n kali. Selection: Ambil 1 element yang terkecil dari array yang tidak terurut O(n) letakkan di paling belakang di array yang terurut O(1) Insertion: Ambil 1 element (yang mana saja) dari array yang tidak terurut O(1) sisipkan di posisi yang benar dalam array yang terurut supaya array tetap terurut O(n) SDA/WRAP-UP/V2.0/13 Merge Sort & Quick sort Divide and Conquer approach Recursive Merge sort: Divide: bagi array menjadi 2 bagian yang sama besar O(1) Conquer: kalau panjang array 0 atau 1 sudah terurut menggabungkan (merge) dua array yang sudah terurut O(n) Dilakukan log n kali (best case dan worst case) Quick sort: Divide: bagi array menjadi 2 bagian O(n) bagian 1 berisi elemen < pivot bagian 2 berisi elemen >= pivot Conquer: menyambungkan bagian 1 dan bagian 2 O(1) Dilakukan log n kali (best case), n kali (worst case) tergantung cara pemilihan pivot. SDA/WRAP-UP/V2.0/14 7
Other Sorting Algorithms Shell Sort Heap Sort Menggunakan struktur data heap Heapify O(n) Percolate Down O(log n) dilakukan n kali Total: O(n log n) Bucket Sort / Postman Sort Tukang Pos mengurutkan surat berdasarkan kode pos (5 digit). Running time: O(nk) k = jumlah digit External Sorting Algorithms Jumlah data >>> jumlah memory yang tersedia SDA/WRAP-UP/V2.0/15 Struktur Data Linked List vs. Array representation/storage: contiguous vs. non-contiguous growable (dynamic size) vs. static overhead? Access? Stack vs. Queue Access? Implementation of Stack and Queue Linked List vs. Array SDA/WRAP-UP/V2.0/16 8
Struktur Data Tree Binary Tree Representation? Traversing: DFS: Pre-Order, In-Order, Post-Order BFS: Level-Order Binary Search Tree (BST) Balanced BST AVL Tree: Height as balancing information Red-Black Tree: Colour as balancing information n-ary Tree Balanced n-ary Tree Complete Tree: but node can have x children or y children 2-3 Tree, a-b Tree External Data Structure: B Tree, B+Tree Trie SDA/WRAP-UP/V2.0/17 Struktur Data Hash Table Hash Function: map key to address Collition resolution: Closed Hashing (aka Open addressing) Linear Probing primary clustering Quadratic Probing secondary clustering Double Hashing Open Hasing (aka Separate Chaining) Priority Queue Implemented using Heap Insert: Percolate Up O(log n) Delete: Percolate Down O(log n) Heapify SDA/WRAP-UP/V2.0/18 9
Graph Terminology vertices/nodes (simpul) edges (sisi/busur) adjacent vertices undirected vs. directed graph degree (of a vertex), for directed graph: in-degree, outdegree unweighted vs. weighted graph path, simple path, cycle DAG (Directed Acyclic Graph) connected graph subgraph SDA/WRAP-UP/V2.0/19 Graph Representation Edge List Adjancency List Adjancency Matrix Which representation is the best? Graph Problem: Topological Sorting Shortest Path: Djikstra Minimum Spanning Tree: Prim, Kruskal SDA/WRAP-UP/V2.0/20 10
Selamat Ujian! SDA/WRAP-UP/V2.0/21 11