Graph

Sebuah graph itu direpresentasikan dengan dua buah himpunan, himpunan vertex (yang bulet”) sama edge (jalan dari 1 vertex ke vertex lain) G= (V,E)

 

Graph ada 2 jenis yaitu :

1.Undirected graph : graph yang edgenya tidak ada arah  (1,3) dan (3,1) sama saja

2.Directed graph : graph yang edgenya ada arah <1,3> dan <3,1> berbeda

E(edge) Maximum bisa dicari dengan rumus dan tergantung dari jenis graph nya

1.Undirected graph : (N(N-1))/2

2.Directed graph :  N(N-1)

Dimana N adalaj jumlah vertex

Contoh Undirected graph

Directed graph

 

Dari gambar diatas ada 4 vertex dan 6 edge

V = {0,1,2,3}

E = {(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}

Contoh Directed Graph

graph

Dari gambar diatas ada 7 vertex dan 12 edge

V = {0,1,2,3,4,5,6,7,8,9}

E = {(0,1),(0,2),(1,4),(1,3),(3,0),(3,2),(3,5),(3,6),(4,3),(4,6),(5,2),(6,5)}

 

Terminologi 

Simple path : Path yang verteks pertama dan terakhir berbeda

Cycle path : Simple path yang verteks pertama dan terakhir sama

Weighted graph : Graph yang setiap edgenya diberi bobot (nilai)

Degree (v) : Banyaknya edge yang berhubungan dengan verteks v

Indegree (v) :  Banyaknya edge yang masuk (menuju) verteks v pada sebuah graph

Outdegree (V) :  Banyaknya edge yang keluar dari verteks v pada sebuah graph

 

 

Adjacency List

adjacency list adalah jalan / path dari vertex X ke vertex Y

contoh (Unweighted Graph)

Directed graph

Ajdlist dari graph diatas (dari X bisa ke Y)

0 -> 1               1 -> 2           2 -> 3

0 -> 2               1 -> 3

0 -> 3

intinya adj list sama aja kyk edge (unweighted)

Misalkan graph diatas diberikan weight masing 2

adjlistnya menjadi (dari X bisa ke Y, dengan weight)

0 -> 1, 2               1 -> 2, 2          2 -> 3, 2

0 -> 2, 2               1 -> 3, 2

0 -> 3, 2

 

 

 

Transversal Graph

Mencari jalan atau transversal di graph ada 2 algoritma :

1.BFS (Breadth First Search)

2.DFS (Depth Fisrt Search)

 

BFS (Breadth First Search)

Di BFS intinya kita cari jalan menyebar, algoritma ini dibantu dengan menggunakan queue dan dilakukan sampai queue kosong

Contoh :

kentang

Misalkan kita mau tau path nya

proses nya (Visited = 0 belum pernah, visited = 1 sudah pernah d visited) dengan kondisi semua vertex visited = 0
Queue : 0
Visited[0] = 1
Selama Queue Tidak kosong
Dari 0 ternyata bisa ke 1 dan 2
Queue : 0 1 2
visited[1] = 1
visited[2] = 1
Printf : 0
Dequeue : 0
Queue : 1 2
Dari 1 ternyata bisa ke 3 dan 4
Queue : 1 2 3 4
visited[3] = 1
visited[4] = 1
printf : 1
Dequeue 1:
Queue : 2 3 4
Dari 2 ternyata bisa ke 5 dan 6
Queue 2 3 4 5 6
visited[5] = 1
visited[6] = 1
printf : 2
Dequeue : 2
Queue 3 4 5 6
dari 3 ternyata bisa ke 7
Queue 3 4 5 6 7
visited[7] = 1
printf : 3
Dequeue : 3
Queue 4 5 6 7
Dari 4 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 4
Dequeue : 4
Queue 5 6 7
Dari 5 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 5
Dequeue : 5
Queue : 6 7
Dari 6 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 6
Dequeue : 6
Queue : 7
Dari 7 g bisa kemana”
printf : 7
Dequeue : 7
Queue : Kosong
Program stop !

Path : 1 2 3 4 5 6 7

 

DFS (Depth Fisrt Search)

Depth Fisrt Search itu kita menelusuri sebuah graph sampe ke yang paling dalem baru telusuri yg lain, dibantu dengan stack atau bisa menggunakan rekursif. DFS dilakukan sampai stack kosong atau sampai semua vertex dikunjungi (jika menggunakan rekursif)

Contoh :

kentang

Misalkan kita mau tau path nya (cara berikut ini dibahas menggunakan rekursif)

proses nya (Visited = 0 belum pernah, visited = 1 sudah pernah d visited) dengan kondisi semua vertex visited = 0

 

visited[0] = 0 ?? Yes
printf : 0
visited[0] = 1
dari 0 ternyata bisa ke 1 dan 2
Menelusuri 1
visited[1] = 0 ?? Yes
printf : 1
visited[1] = 1
dari 1 ternyata bisa ke 3 dan 4
Menelusuri 3
visited[3] = 0 ?? Yes
printf : 3
visited[3] = 1
dari 3 ternyata bisa ke 7
Menelusuri 7
visited[7] = 0 ?? Yes
printf : 7
visited[7] = 1
dari 7 ternyata tidak bisa kemana – mana lagi, balik ke vertex sebelumnya
dari 3 ternyata tidak bisa kemana – mana lagi, balik ke vertex sebelumnya
dari 1 ternyata bisa ke 3 dan 4 tetapi visited[3] = 1 jadi tidak bisa dilalui
Menelusuri 4
visited[4] = 0 ?? Yes
printf : 4
visited[4] = 1
dari 4 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 1 ternyata bisa ke 3 dan 4 tetapi visited[3] = 1 dan visited[4] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
dari 0 ternyata bisa ke 1 dan 2 tetapi visited[1] = 1 jadi tidak bisa dilalui
Menelurusi 2
visited[2] = 0 ?? Yes
printf : 2
visited[2] = 1
dari 2 ternyata bisa ke 5 dan 6
menelusuri 5
visited[5] = 0 ?? Yes
printf : 5
visited[5] = 1
dari 5 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 2 ternyata bisa ke 5 dan 6 tetapi visited[6] = 1 jadi tidak bisa dilalui
Menelurusi 6
visited[6] = 0 ?? Yes
printf : 6
visited[6] = 1
dari 6 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 2 ternyata bisa ke 5 dan 6 tetapi visited[5] = 1 dan visited[6] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
dari 0 ternyata bisa ke 1 dan 2 tetapi visited[1] = 1 dan visited[2] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
Program Selesai !

Path : 0 1 3 7 4 2 5 6

Tree Week 10

TREE

Tree adalah suatu struktur data (tipe data abstrak) yang teridiri dari sejumlah simpul (node) yang memiliki :
– Terdapat 1 simpul khusus yang di sebut root
– Simpul lainnya di bagi kedalam sejumlah himpunan terpisah (T1,T2,T3,…)
– Himpunan ini disebut sebuah Tree
– T1,T2,T3,… disebut Subtree dari root

Berikut adalah bagian-bagian yang terdapat dalam Tree :
– Root
– Leaf
– Depth
– Height
– Node

admin-ajax

 

BINARY TREE

Sama seperti Tree dan setiap simpulnya memiliki paling banyak 2 subtree atau yang kita sebut sebagai left subtree dan right subtree

Full binary Tree : setiap subtree harus terisi semua leafnya sebanyak anak setiap parentnya

 

Representasi Tree dalam Array

 

Untitled-1

Representasi Tree Dalam LinkedList

Untitled-2

TRAVERSAL

Simbol  : <L> untuk subtree kiri
<R> untuk subtree kanan
<P> untuk proses
Contoh Traversal : PLR, LPR, LRP
PRL,RPL,RLP

PLR (Pre Order) : Induk, Kiri, Kanan
LPR (Inorder) : Kiri, Induk, Kanan
LRP (Postorder) : Kiri, Kanan, Induk

Contoh :

Untitled-3

PLR : A,B,D,G,H,E,I,C,F,J,L,K,M,N
LPR : G,D,H,I,E,B,A,C,J,L,F,M,K,N
LRP : G,H,D,I,E,B,L,J,M,N,K,F,C,A

 

 

AVL Tree week 12

AVL tree
AVL tree adalah binary tree yang memiliki perbedaan height maksimal 1 dengan subtreenya. Metode ini di lakukan juga agar mempermudah waktu pencarian. Untuk menentukan apakah sebuah binary tree AVL atau tidak dapat di tentukan dengan cara Balance factor = h(subtree kiri) – h(subtree kanan), H=height.
Contoh AVL tree
difftree01

Cara untuk membalance sebuah binary tree yang tidak AVL tree dengan cara rotation tree. Rotation tree adalah suatu operasi binary tree yang mengubah stukturnya tanpa mengganggu urutan elemen.
Contoh ilustrasi:
File-Tree_rotation_animation_250x250

Secara keseluruhan kasus dibagi 2 kasus dalam membalance sebuah tree yaitu:
Kasus luar dibagi 2:
1.masuknya data ke subtree kiri dari anak yang kiri.
2.masuknya data ke subtree kanan dari anak yang kanan.
Kasus dalam di bagi 2 :
3.masuknya data ke subtree kanan dari anak yang kiri.
4.masuknya data ke subtree kiri dari anak yang kanan.
Rotation tree di bagi menjadi 2 yaitu:

Single rotation
Single rotation adalah rotasi yang di lakukan hanya sekali agar sebuah tree AVL cara ini dapat menyelesaikan kasus luar.
012111java_avl-fig01

Double rotation
Double rotation adalah rotasi yang dilakukan lebih dari sekali dan sedangkan cara ini untuk menyelesaikan kasus dalam.
avlrotate5

Sekian ringakasan kami dari matakuliah struktur data yang dibimbing oleh dosen Yonathan pada tanggal 25 november 2015 tentang AVL tree dan maaf jika terdapat kesalahan komen saja kesalahan kami dan akan kami perbaiki secepatnya..
Terima Kasih

catatan:
Rekan saya sedang dalam proses memahami materi ini sehingga tidak dapat menumbangkan tulisannya di blog