Anda di halaman 1dari 15

LECTURE NOTE

Week 02
Data Structure

ALGORITHM DESIGN AND


ANALYSIS <<Kode mtk – Nama mtk>>
LEARNING OUTCOMES

LO1: Explain fundamental concept of analysis algorithm

OUTLINE MATERI :

1. Data Structures and Algorithms

2. Linked List

3. Stack

4. Queue

5. Priority Queue

6. Trees

7. Heaps

8. Graphs

Algorithm Design and Analysis


ISI MATERI
1. Data Structures and Algorithms

Algoritma memproses data masukan untuk menghasilkan keluaran yang berarti. Efisiensi
suatu algoritma sebagian besar dipengaruhi oleh organisasi data inputnya. Struktur data adalah
bidang ilmu komputer yang berhubungan dengan penyimpanan dan pengambilan data.
Penyimpanan data mengacu pada representasi data dalam memori komputer. Data disimpan
dalam memori komputer sebagai urutan bit, karena komputer hanya dapat memahami binary
digit. Namun, kita tidak dapat memahami Informasi yang disajikan dalam jutaan Nol dan Satu.
Oleh karena itu, kita akan menggunakan tipe data.

Sebagian besar bahasa pemrograman mendukung tipe data primitif seperti bilangan bulat,
bilangan real, dan karakter. Seringkali, bahasa pemrograman mengizinkan penggabungan tipe
data primitif untuk membentuk tipe data komposit atau data yang ditentukan pengguna. Tipe
data abstrak adalah contoh tipe atau data yang ditentukan pengguna.

Tampilan implementasi dari tipe data abstrak disebut struktur data. Misalnya, List adalah tipe
data abstrak dan dapat diimplementasikan sebagai array di sebagian besar bahasa
pemrograman. Perbedaan antara tipe data abstrak dan struktur data disajikan pada tabel 1.

Tipe Data Abstrak Struktur Data


Notasi algoritma dan generalisasi tipe data Notasi pemrograman
yang ditentukan pengguna
Tidak didukung langsung oleh bahasa Dapat didukung secara langsung oleh
pemrograman bahasa pemrograman, misalnya, array

Tipe data abstrak merupakan sebuah pembentukan tipe data baru yang merupakan
penggabungan dari beberapa tipe data built-in Bahasa pemrograman. Konsep ini digunakan
untuk mempermudah dalam pengaksesan proses pembungkusan data. Tipe data abstrak tidak
dapat dikenali oleh prosesor computer Namun oleh compiler Bahasa pemrograman. Tipe data
abstrak biasa digambarkan dengan class atau struct. Berikut merupakan bentuk contoh
penerapan nyatanya List, Stack, Queue, Priority Quene and Heap, Tree, dan Graph. Bentuk
penerapan tersebut lebih berfokus terhadap proses operasi yang dilakukan.

2. Linked List

Linked list terdiri dari urutan elemen atau simpul (node) terbatas yang berisi informasi dan
(kecuali mungkin yang terakhir) tautan (link) ke simpul (node) lain. Jika simpul x menunjuk

Algorithm Design and Analysis


ke simpul y, maka x disebut pendahulu (predecessor) y dan y penerus (successor) x. Ada
tautan ke elemen pertama yang disebut kepala (head) list. Jika ada tautan dari elemen terakhir
ke elemen pertama, disebut circular linked list. Jika dalam linked list tertaut setiap node
(kecuali mungkin yang pertama) menunjuk juga ke pendahulunya, maka daftar tersebut
disebut doubly linked list. Jika node pertama dan terakhir dari doubly linked list dihubungkan
oleh sepasang tautan, maka kita memiliki circular doubly linked list. Linked list dan variasinya
digambarkan pada Gambar 1.

(a) Node

(b) Singly Linked List

(c) Circular Singly Linked List

(d) Doubly Linked List

(e) Circular Doubly Linked List

Gambar 1. Linked List

Dua operasi utama pada linked list adalah penyisipan (insert) dan penghapusan (delete/pop).
Tidak seperti array, hanya membutuhkan waktu yang konstan untuk menyisipkan atau
menghapus elemen dalam linked list.

3. Stack

Stack merupakan salah satu bentuk penerapan dari tipe data abstrak yang memiliki konsep
operasi berbasis Last In First Out (LIFO). Stack yang berarti tumpukan melakukan proses
pengambilan data berdasarkan data yang paling terakhir masuk. Penerapan Stack dapat
dilakukan dengan Array maupun dengan Linked list.

Algorithm Design and Analysis


Bentuk konsep dari Stack akan diterapkan oleh algoritma pencarian khususnya algoritma
pencarian Depth First Search (DFS)

Gambar 2. Stack

4. Queue

Queue merupakan salah satu bentuk penerapan dari tipe data abstrak yang memiliki konsep
operasi berbasis First In First Out (FIFO). Queue yang berarti antrian melakukan proses
pengambilan data berdasarkan data yang paling awal masuk. Penerapan queue dapat
dilakukan dengan Array maupun dengan Linked list.

Bentuk konsep dari queue akan diterapkan oleh algoritma pencarian khususnya algoritma
pencarian Breadth First Search (BFS)

Gambar 3. Queue

5. Priority Queue

Priority queue adalah tipe data abstrak untuk menyimpan kumpulan elemen yang
diprioritaskan yang mendukung penyisipan elemen arbitrer (elemen tidak sepenuhnya
ditentukan) tetapi mendukung penghapusan elemen dalam urutan prioritas, yaitu elemen
dengan prioritas pertama dapat dihapus kapan saja. ADT ini pada dasarnya berbeda dari
struktur data berbasis posisi seperti stack, queue, deques, linked list, dan bahkan tree. Struktur

Algorithm Design and Analysis


data lain ini menyimpan elemen pada posisi tertentu, yang sering kali merupakan posisi dalam
susunan linier elemen yang ditentukan oleh operasi penyisipan dan penghapusan yang
dilakukan. ADT antrian prioritas menyimpan elemen sesuai dengan prioritasnya, dan tidak
memiliki gagasan eksternal tentang "posisi".

6. Trees

Tree merupakan struktur data non-linier yang direpresentasi dalam hubungan hierarki antar
object data. Tree didefinisikan sebagai kumpulan node (elemen) yang dapat kosong (atau)
memiliki node yang dirancang sebagai root (mewakili elemen di bagian atas hierarki) di mana
memiliki nol atau lebih subtree dan cabang.

Struktur data tree dasar menentukan informasi data dan memiliki tautan ke item data lainnya.
Setiap item data yang ada di tree disebut sebagai node. Ketinggian simpul ni, adalah jalur
terpanjang dari ni ke leaf. Pada pohon tertentu, derajat suatu node adalah jumlah subtree dari
suatu node.

Root adalah node paling atas dari tree atau node yang tidak memiliki parent disebut sebagai
root. Leaf adalah node yang tidak memiliki anak. Node leaf juga disebut sebagai node terminal

Gambar 4. Tree

6.1. Binary Tree

Binary Tree merupakan bentuk penerapan lebih lanjut dari konsep tree dimana pada
struktur ini tidak ada node yang memiliki anak lebih dari 2. Operasi insert dimulai dari
mengisi node parent dulu, diikuti anaknya. Namun operasi insert dapat ditentukan oleh
pengguna, secara umum dilakukan insert terhadap anak kiri terlebih dahulu kemudian
anak kanan.

Bentuk operasi yang dapat dilakukan dalam struktur binary tree ini antara lain adalah

1) Pengisian data

2) Pencarian data

Algorithm Design and Analysis


3) Penghapusan data

4) Pengurutan data

Berikut merupakan bentuk contoh dari struktur binary tree

Gambar 5. Binary Tree

6.2. Tree Traversal

Tree traversal merupakan proses pengunjungan semua node pada struktur tree. Pada
umumnya tree traversal terbagi menjadi 4, yakni:

1) Pre-order traversal (parent-left-right)

2) Level-order traversal (parent-left-right) (each level)

3) In-order traversal (left-parent-right)

4) Post-order traversal (left-right-parent)

6.3. Depth First Search and Breadth First Search

Baik Depth First Search (DFS) maupun Breadth First Search (BFS) merupakan metode
pencarian heuristic. Dimana penggambarannya Depth First Search berjalan secara
mendalam seperti halnya proses Pre-Order pada Binary Search Tree. Prosesnya adalah
dimulai dari node itu sendiri dan terus menjalani dan mengecek node sebelah kiri selama
node kiri masih ada, jika tidak maka lanjutkan ke node sebelah kanan. Sebaliknya metode
Breadth First Search merupakan metode yang berjalan secara bertahap ke setiap levelnya.
Untuk data yang memiliki level yang dalam (data besar) maka metode Depth First Search
di klaim dapat berjalan lebih cepat dibanding Breadth First Search.

Breadth First Search dapat dianggap sebagai algoritma Dijsktra pada pencarian shortest
path hanya saja setiap edge memiliki bobot yang sama. Selain itu, proses ini lebih simple

Algorithm Design and Analysis


karena tidak membutuhkan data yang terstruktur hanya graph yang nantinya akan
memiliki output berupa spanning tree. Berikut adalah algoritma dari BFS.

Hal terpenting yang harus diperhatikan dalam hal ini adalah menjaga konsep FIFO (First
in First Out) dimana harus memastikan untuk menghapus node yang telah di datakan
diposisi paling terakhir dan memastikan bahwa node masuk akan berada di depan.

Berikut contoh penerapan dari BFS pada angka terurut.

BFS dapat sangat berguna untuk diterapkan pada pembacaan pola yang sama (Pattern
Matching) dimana BFS memiliki kompleksitas yang linear.

Depth First Search merupakan salah satu penerapan dari bentuk traversal pada tree
dimana dapat digambarkan sebagai proses pre-order pada tree. Perhatikan algoritma pre-
order berikut.

Hanya saja perbedaannya adalah proses ini dijalankan pada graph dimana graph memiliki
jalur yang berulang. Perhatikan algoritma DFS berikut.

Algorithm Design and Analysis


Algoritma ini akan berjalan dengan konsep stack dimana memiliki proses berupa LIFO
(Last In First Out). Hasil yang dikeluarkan adalah spanning tree, yakni sama dengan hasil
yang diberikan oleh BFS. Hanya saja hasil yang diberikan oleh BFS bersifat “short and
bushy” sedangkan hasil yang diberikan oleh DFS bersifat “long and stringy”. Dengan kata
lain, spanning tree yang dibentuk oleh BFS akan lebih seimbang dan cenderung pendek,
sedangkan hasil yang diberikan oleh DFS akan cenderung tidak seimbang dan mendalam.
Dalam penerapannya DFS dan BFS menyerupai algoritma Prim dan algoritma Dijsktra.
Perhatikan algoritma berikut.

Algorithm Design and Analysis


7. Heap

Heap merupakan bentuk struktur tree (heap tree) yang menerapkan konsep yang sama
seperti halnya priority queue. Terdapat tiga jenis heap, yakni min-heap tree, max-heap tree,
dan min-max heap. Heap merupakan konsep complete binary tree dikarenakan pengisian
berlangsung dari kiri ke kanan.

Setiap node dalam heap memiliki nilai. Node leaf memiliki external nodes. Pada penerapan
priority queue menggunakan konsep minimum atau maximum heap.

1) Minimum Heap (min-heap)


Jika nilai pada node induk lebih kecil dari nilai anak kiri dan nilai anak kanan. Proses
insert akan melakukan proses upheap (penukaran node anak dengan induk) apabila nilai
anak lebih kecil dari induk. Proses delete root akan dilanjutkan dengan proses downheap
setelah dilakukan penukaran node root dengan node anak yang terakhir. Proses downheap
akan membandingkan nilai dari induk dan anak, apabila nilai induk lebih besar dari anak
maka proses downheap dilakukan.
Berikut merupakan contoh dari minimum heap.

Gambar 6. Min-Heap

2) Maximum Heap (max-heap)


Jika nilai pada node induk lebih besar dari nilai anak kiri dan nilai anak kanan. Proses
insert akan melakukan proses upheap (penukaran node anak dengan induk) apabila nilai
anak lebih besar dari induk, proses delete root akan dilanjutkan dengan proses downheap
setelah dilakukan penukaran node root dengan node anak yang terakhir. Proses downheap
akan membandingkan nilai dari induk dan anak, apabila nilai induk lebih kecil dari anak
maka proses downheap dilakukan.
Berikut merupakan contoh dari maksimum heap.

Algorithm Design and Analysis


Gambar 7. Max-Heap

Heap sort merupakan bentuk proses pengurutan dari data pada struktur heap dimana proses
dilakukan dengan menghapus satu persatu nilai dari node root. Urutan order dari heap
tergantung dari jenis heap-nya, jika berupa minimum heap tree maka hasil pengurutannya
adalah dari kecil ke besar. Sebaliknya, untuk maksimum heap tree.

8. Graph
Graph merupakan tipe data abstrak (abstract data type – ADT) yang terdiri dari sekumpulan
node dan edge. Graph pada umumnya digunakan dalam penggambaran dan pembentukan
struktur data dari sebuah peta dimana sebuah node mendeskripsikan tempat tertentu dan edge
mendeskripsikan jalan yang menghubungkan dua buah tempat. Pada penerapannya edge
menghubungkan dua node.
Graph dapat diterapkan dengan penggunaan linked-list maupun array dua dimensi. Untuk
penggambaran hubungannya sendiri dapat digambarkan dengan penerapan adjacency matrix
dan cost matrix.
Graph terbagi menjadi 2 jenis, yakni
1) Graph dengan arah (Directed Graph)
Pada graph ini menunjukkan bahwa jalan pergi dari node a ke node b tidak sama dengan
jalur dari node b ke node a atau bisa digambarkan dengan cost yang berbeda dari edge a
ke b dan edge b ke a.

Gambar 8. Directed Graph

Algorithm Design and Analysis


2) Graph tanpa arah (Undirected Graph)
Pada graph ini menunjukkan bahwa jalan pergi dari node a ke node b sama dengan jalur
dari node b ke node a atau bisa digambarkan satu buah edge dari node a ke b tanpa arah

Gambar 9. Undirected Graph


Contoh Graph:

a. Berikut merupakan contoh dari adjacency list beserta graph-nya

b. Berikut merupakan contoh dari adjacency matrix beserta graph-nya

Algorithm Design and Analysis


c. Berikut merupakan contoh dari cost matrix Beserta graphnya

Algorithm Design and Analysis


KESIMPULAN

Tipe data abstrak merupakan suatu pembentukan tipe data baru yang berisi penggabungan dari tipe
data lainnya. Untuk pembuatan tipe data abstrak dapat menggunakan class maupun struct. Tipe
data abstrak ini nantinya akan diterapkan dalam beberapa bentuk pengolahan data antara lain
linked list, stack, queue, tree, heap, dan graph.

Stack dan queue merupakan salah satu bentuk penerapan dari tipe data abstrak dengan konsep
pengelolaan data berbasis LIFO dan FIFO. Priority queue salah satu pembahasan lanjutan dari
queue dimana berfokus pada prioritas. Salah satu bentuk masalah yang menggunakan konsep ini
adalah minimum spanning tree.

Tree merupakan bentuk penerapan dari tipe data abstrak untuk struktur perancangan yang berbeda
dimana node parent terhubung dengan node anaknya. Bentuk proses yang dilakukannya pun
berbeda. Tree traversal merupakan penamaan dari proses pengunjungan terhadap semua anak yang
terdapat dalam struktur tree. Sedangkan Heap merupakan bentuk ADT berupa tree yang juga
menggunakan konsep priority queue.

Graph merupakan tipe data abstrak (abstract data type – ADT) yang terdiri dari sekumpulan node
dan edge. Graph pada umumnya digunakan dalam penggambaran dan pembentukan struktur data
dari sebuah peta dimana sebuah node mendeskripsikan tempat tertentu dan edge mendeskripsikan
jalan yang menghubungkan dua buah tempat.

Algorithm Design and Analysis


DAFTAR PUSTAKA

Sridhar, S. (2015). Design and Analysis of Algorithms. Oxford University Press.Chapter 5.


V, R. (2020). Design and Analysis of Algorithms: The Learners Approach.

Data structures: Introduction to graphs [Video], www.youtube.com/watch?v=gXgEDyodOJU

Data structures: Properties of Graphs [Video], www.youtube.com/watch?v=AfYqN3fGapc

Data Structures: Stacks and Queues, www.youtube.com/watch?v=wjI1WNcIntg

Data Structures: Trees [Video], www.youtube.com/watch?v=oSWTXtMglKE

Priority Queue Introduction [Video], www.youtube.com/watch?v=wptevk0bshY

Algorithm Design and Analysis

Anda mungkin juga menyukai