Design
and
Analysis
Algorithm
Ahmad Afif Supianto, S.Si., M.Kom
Contents
Insertion and Selection Sort 2
Decrease and Conguer 3
1
DFS and BFS 3 3
Binary Search Tree 4
Decrease and conquer
1.
Mengurangi permasalahan menjadi lebih kecil
pada permasalahan yang sama
2.
Selesaikan permasalahan yang lebih kecil
tersebut
3.
Kembangkan permasalahan yang lebih kecil
itu sehingga menyelesaikan permasalahan
sebenarnya
4.
Dapat dilakukan dengan dengan metode top
down atau bottom up
Variasi decrease and conquer
Decrease by a constant (Mengurangi secara
konstan atau tetap)
The size of a problem instance is reduced by
the same constant factor (usually two) on each
iteration of the algorithm (dikurangi secara
faktar konstan yang sama)
A size reduction pattern varies from one
iteration to another (Ukuran pengurangan
Decrease by a constant (usually by 1):
insertion sort
graph traversal algorithms (DFS and BFS)
topological sorting
algorithms for generating permutations, subsets
Decrease by a constant factor (usually by half)
binary search and bisection method
exponentiation by squaring multiplication à la russe Variable-size decrease Euclid’s algorithm selection by partition Nim-like games
Biasanya menggunakan algoritma rekursif.
Permasalahan eksponensial: Hitung x
n
Brute Force:
Divide and conquer:
Decrease by one:
Decrease by
constant factor:
n-1 multiplications T(n) = 2*T(n/2) + 1 = n-1 T(n) = T(n-1) + 1 = n-1 T(n) = T(n/a) + a-1 = (a-1) n = when a = 2
log
an
2log
6Insertion sort
To sort array A[0..n-1], sort A[0..n-2] recursively
and then insert A[n-1] in its proper place among
the sorted A[0..n-2]
Usually implemented bottom up
(non-recursively)
Example: Sort 6, 4, 1, 8, 5
6 | 4 1 8 5
4 6 | 1 8 5
1 4 6 | 8 5
1 4 6 8 | 5
1 4 5 6 8
7Kompleksitas waktu algoritma Insertion Sort: Penyelesaian: T(n) = cn + T(n – 1) = cn + { c ⋅ (n – 1) + T(n – 2) } = cn + c(n – 1) + { c ⋅ (n – 2) + T(n – 3) } = cn + c ⋅ (n – 1) + c ⋅ (n – 2) + {c(n – 3) + T(n – 4) } = ... = cn+c⋅(n–1)+c(n–2)+c(n–3)+...+c2+T(1) = c{ n + (n – 1) + (n – 2) + (n – 3) + ... + 2 } + a = c{ (n – 1)(n + 2)/2 } + a = cn2/2+cn/2 +(a–c) = O(n2) 11
• Misalkan tabel A berisi elemen-elemen berikut:
Kompleksitas waktu algoritma:
Penyelesaian (seperti pada Insertion Sort):
Depth-First Search (DFS)
Mengunjungi vertex-vertex pada grafik dengan selalu bergerak dari vertex yang terakhir dikunjungi ke vertex yang belum dikunjungi, lakukan backtrack apabila tidak ada vertex tetangga yang belum dikunjungi.
Rekursif atau menggunakan stack Vertex di-push ke stack ketika dicapai untuk pertama kalinya
Sebuah vertex di-pop off atau dilepas dari stack ketika vertex tersebut merupakan vertex akhir (ketika tidak ada vertex tetangga yang belum dikunjungi)
“Redraws” atau gambar ulang grafik dalam bentuk seperti pohon (dengan edges pohon dan back edges untuk grafik tak berarah/undirected graph)Pseudo code DFS
Example: DFS traversal of undirected graph
a b
e f
c d
g h
DFS traversal stack: DFS tree:
a b e f c d g h a ab abf abfe abf ab abg abgc abgcd abgcdh abgcd …
Red edges are tree edges and black edges are back edges. 1 2 5 4 6 3 7 8
Notes on DFS
Time complexity of DFS is O(|V|). Why?
each edge (u, v) is explored exactly once,
All steps are constant time.
Breadth-first search (BFS)
Mengunjungi vertex-vertex grafik dengan berpindah ke semua vertex tetangga dari vertex yang terakhirdikunjungi
BFS menggunakan queue
Mirip dengan level ke level dari pohon merentang
“Redraws” atau gambar ulang grafik dalam bentukseperti pohon (dengan edges pohon dan back edges untuk grafik tak berarah/undirected graph)
Example of BFS traversal of undirected
graph
BFS traversal queue: a b e f c d g h BFS tree: a b e f c d g h a bef efg fg g ch hd dRed edges are tree edges and black edges are cross edges.
1 3 2 6 4 5 7 8 21
Notes on BFS
Asumsi: setiap simpul dapat membangkitkan b buah simpul baru.
Misalkan solusi ditemukan pada aras ke-d
Jumlah maksimum seluruh simpul:
1+b+b2 +b3 +...+bd =(bd+1 –1)/(b–1)
T(n) = O(bd)
Kompleksitas ruang algoritma BFS = sama dengan
kompleksitas waktunya, karena semua simpul daun dari pohon harus disimpan di dalam memori selama proses pencarian.
Breadth First Search (grafik berarah)
s 2 5 4 7 8 3 6 9Breadth First Search
s 2 5 4 7 8 3 6 9 0 Undiscovered Discovered Finished Queue: s Top of queue 2 1 Shortest path from s 25Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: s 2 3 1 1 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: s 2 3 5 1 1 1 Undiscovered Discovered Finished Top of queue 27Breadth First Search
s 5 7 8 3 6 9 0 Queue: s 2 3 5 1 1 1 Undiscovered Discovered Finished Top of queue 4 2Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 2 3 5 4 1 1 1 2 Undiscovered Discovered Finished Top of queue 29Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 2 3 5 4 1 1 1 2 5 already discovered: don't enqueue Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 2 3 5 4 1 1 1 2 Undiscovered Discovered Finished Top of queue 31Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 3 5 4 1 1 1 2 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 3 5 4 1 1 1 2 6 2 Undiscovered Discovered Finished Top of queue 33Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 3 5 4 6 1 1 1 2 2 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 5 4 6 1 1 1 2 2 Undiscovered Discovered Finished Top of queue 35Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 5 4 6 1 1 1 2 2 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 4 6 1 1 1 2 2 Undiscovered Discovered Finished Top of queue 37Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 4 6 1 1 1 2 2 8 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 4 6 8 1 1 1 2 2 3 Undiscovered Discovered Finished Top of queue 39Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 6 8 1 1 1 2 2 3 7 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 6 8 7 1 1 1 2 2 3 9 3 3 Undiscovered Discovered Finished Top of queue 41Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 6 8 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 8 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queue 43Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queue 45Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 7 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queue 47Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queue 49Breadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 9 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queueBreadth First Search
s 2 5 4 7 8 3 6 9 0 Queue: 1 1 1 2 2 3 3 3 Undiscovered Discovered Finished Top of queue 51Breadth First Search
s 2 5 4 7 8 3 6 9 0 Level Graph 1 1 1 2 2 3 3 3
Latihan: Gunakan algoritma BFS dan DFS untukmenemukan pohon merentang (spanning tree) dari graf G di bawah ini jika traversalnya dimulai dari simpul e. Dalam menjawab soal ini, perlihatkan traversal
BFS/DFS sebagai pohon berakar dengan e sebagai akarnya.
Binary Search Tree
Several algorithms on BST
requires recursive processing of
just one of its subtrees, e.g.,
Searching
Insertion of a new key
Finding the smallest (or the
largest) key
k
Binary Search Tree
A binary search tree Not a binary search tree
Searching (Find)
Find X: return a pointer to the node that has key X, or NULL if there is no such node
Time complexity: O(height of the tree)BinaryNode * BinarySearchTree::Find(const float &x, BinaryNode *t) const {
if (t == NULL) return NULL;
else if (x < t->element)
return Find(x, t->left); else if (t->element < x)
return Find(x, t->right); else
return t; // match }
Algorithm BST(x, v)
//Searches for node with key equal to v in BST rooted at node x
if x = NIL return -1
else if v = K(x) return x
else if v < K(x) return BST(left(x), v) else return BST(right(x), v)
Efficiency
worst case: C(n) = n
average case: C(n) ≈ 2ln n ≈ 1.39log2 n, if the BST was built from n random keys and v is chosen randomly.
Aplikasi DFS dan BFS
Search Engine (google, yahoo, altavista).Komponen search engine: Web Spider : program penjelajah web (web surfer)
Index: basisdata yang menyimpan kata-kata penting pada setiap halaman web
Query: pencarian berdasarkan string yang dimasukkan oleh pengguna (end- user)
Secara periodik (setiap jam atau setiap hari), spider menjejalahi internet untuk mengunjungi
halaman-halaman web, mengambil kata-kata penting di dalam web, dan menyimpannya di dalam index. Query
dilakukan terhadap index, bukan terhadap website yang aktual.