Struktur Data & Algoritme (
Data Structures & Algorithms)
Denny ([email protected]) Suryana Setiawan ([email protected])
Fakultas Ilmu Komputer Universitas Indonesia Semester Genap - 2004/2005
Version 2.0 - Internal Use Only
Wrap Up
SDA/WRAP-UP/V2.0/2
Objectives
Mengulas kembali dan merangkum konsep-konsep penting dalam kuliah Struktur Data dan Algoritme
SDA/WRAP-UP/V2.0/3
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 languageatau bahkan paradigma pemrograman (mis. Procedural vs Object-Oriented)
SDA/WRAP-UP/V2.0/4
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/5
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.
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 timedari 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/7
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, n2, n3, ...
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.
Orde Fungsi Running-Time
Function Name c Constant log N Logarithmic
log
2N Log-squared
N Linear N log N N log N
N
2Quadratic
N
3Cubic
2
NExponential
N! Factorial
SDA/WRAP-UP/V2.0/9
Fungsi Running-Time
Untuk input yang sedikit, beberapa fungsi lebih cepat dibandingkan dengan yang lain.
SDA/WRAP-UP/V2.0/10
Fungsi Running-Time (2)
Untuk input yang besar, beberapa fungsi running- time sangat lambat - tidak berguna.
SDA/WRAP-UP/V2.0/11
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/12
Bubble Sort
Idea: Gelembung udara (ringan) dalam air akan naik ke atas, air (berat) yang di atasnya akan turun.
Worst case: O(n2)
Best case: O(n) -- when? why?
SDA/WRAP-UP/V2.0/13
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)
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) Î
SDA/WRAP-UP/V2.0/15
Other Sorting Algorithms
Shell Sort
Heap Sort
Menggunakan struktur data heap
Heapify ÎO(n)
Percolate Down O(log n) dilakukan nkali
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
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/17
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/18
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/19
Graph
Terminology
vertices/nodes (simpul)
edges (sisi/busur)
adjacent vertices
undirected vs. directed graph
degree (of a vertex), for directed graph: in-degree, out- degree
unweighted vs. weighted graph
path, simple path, cycle
DAG (Directed Acyclic Graph)
connected graph
subgraph
SDA/WRAP-UP/V2.0/20
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/21