You are on page 1of 13

BAB I

PENDAHULUAN
1.1Latar Belakang
Graph merupakan suatu struktur data yang terdiri dari titik dan garis.
Penerapan graph dalam IPTEK sudah lama dikenal dan diterapkan dalam
berbagai bidang. Contoh contoh penerapan graph dalam IPTEK seperti
penyimpanan struktur bangunan, penerapan graph berwarna untuk
menentukan pembagian suatu daerah, penggunaan graph untuk menentukan
rute terpendek dan lain sebagainya. Untuk menerapkan graph kita harus
merepresentasikan graph tersebut.
Representasi graph dalam bentuk matriks merupakan representasi
graph dalam bentuk yang paling umum. Keuntungan representasi dalam
matriks menjanjikan akses yang lebih cepat dalam aplikasi tertentu namun
memakan memori yang jauh lebih besar. Selain representasi dalam bentuk
matriks, terdapat juga representasi dalam bentuk list. Representasi dalam
bentuk list sering digunakan pada sparse graI dengan jumlah simpul yang
jarang, karena struktur data ini membutuhkan memori dalam jumlah yang
lebih sedikit.
Dalam makalah ini kami akan membahas tentang representasi graph
dalam list. Dalam representasinya sebuah graph terdiri dari dua bagian yaitu:
bagian simpul yang disebut list simpul dan sisi yang disebut list sisi.

1.2#:2:8an Ma8alah
erdasarkan latar belakang di atas, rumusan masalah yang dapat
diangkat yaitu : agaimana menyimpan data dari sebuah graph dengan
struktur data list?

1.3%::an
Tujuan yang ingin dicapai dalam makalah ini adalah untuk mengetahui
cara menyimpan data dari sebuah graph dengan struktur data list.

BAB II
LANDASAN %EO#I
2.1raf
GraI dideIinisikan sebagai pasangan himpunan (J,E) ditulis notasi
G(J,E), yang dalam hal ini J adalah himpunan tidak kosong-kosong dari
simpul-simpul (vertices atau node) dan E adalah himpunan sisi (edges atau -
arcs) yang menghubungkan sepasang simpul.
Jenis-Jenis GraI
erdasarkan ada tidaknya gelang atau sisi ganda pada suatu graI, maka secara
umum graI dapat digolongkan menjadi dua jenis :
1) GraI sederhana (simple graph) : graI yang mengandung gelang maupun
sisi-ganda dinamakan graI sederhana. Pada graI sederhana, sisi adalah
pasangan tak terurut (unordered pairs). Jadi, menuliskan sisi (u,v) sama
saja dengan (v,u). deIinisi graI sederhana G(J,E) terdiri dari himpunan
tidak kosong simpul-simpul dan E adalah himpunan pasangan tak-terurut
yang berbeda yang disebut sisi
2) GraI tak sederhana (unsimple graph) : graI yang mengandung sisi ganda
atau gelang dinamakan graI tak sederhana. Ada dua macam graI tak
sederhana yaitu graI ganda dan graI semu.
Sisi graI dapat mempunyai orientasi arah. Secara umum berdasarkan orientasi
arah graI dibedakan menjadi 2 :
1) GraI tak berarah (undirected graph) : graI yang sisinya tidak mempunyai
orientasi arah disebut graI tak berarah. Pada graI tak berarah, urutan
pasangan simpul yang dihubungkan oleh sisi tidak diperhatikan. Jadi (u,v)
(v,u) adalah sisi yang sama
2) GraI berarah (directed graph) : graI yang sisinya diberikan orientasi arah
disebut sebagai graI berarah yang disebut busur (arc). Pada graI berarah,
(u,v) (v,u) menyatakan dua buah busur yang berbeda, dengan kata lain
(u,v) = (v,u). Untuk busur (u,v) simpul u dinamakan 825:l a8al (initial
vertex) dan simpul v dinamakan 825:l ter2nal (terminal vertex)

Terminologi Dasar
1. ertetangga (Adfacent)
2. ersisian (Incident)
. Simpul Terpencil (Isolated Jertex)
4. GraI Kosong (ull Graf atau Empty Graph)
5. Derajat (egree)
6. intasan (!ath)
7. Siklus (ycle) atau Sirkuit (ircuit)
8. Terhubung (onnected)
9. UpagraI ($ubgraph) dan komplemen UpagraI
10.UpagraI Merentang ($panning $ubgraph)
11.Cut-Set
12.GraI erbobot (eighted Graph)

2.2Str:kt:r Data raf
Dalam bidang ilmu komputer, sebuah graI dapat dinyatakan sebagai
sebuah struktur data, atau secara spesiIik dinamakan sebagai ADT(abstract
data type) yang terdiri dari kumpulan simpul dan sisi yang membangun
hubungan antar simpul. Konsep ADT graI ini merupakan turunan konsep graI
dari bidang kajian matematika.
Pokok bahasan sebelumnya menjelaskan bahwa graI menampilkan
visualisasi data dan hubungannya. Sedangkan jika berbicara masalah
implementasi struktur data graI itu sendiri, isu utama yang dihadapi adalah
bagaimana inIormasi itu disimpan dan dapat diakses dengan baik, ini yang
dapat disebut dengan representasi internal.
Secara umum terdapat dua macam representasi dari struktur data graI
yang dapat diimplementasi. Pertama, disebut adfacency list, dan
diimplementasi dengan menampilkan masing-masing simpul sebagai sebuah
struktur data yang mengandung senarai dari semua simpul yang saling
berhubungan.
Yang kedua adalah representasi berupa adfacency matrix dimana baris
dan kolom dari matriks (jika dalam konteks implementasi berupa senarai dua

dimensi) tersebut merepresentasikan simpul awal dan simpul tujuan dan


sebuah entri di dalam senarai yang menyatakan apakah terdapat sisi di antara
kedua simpul tersebut.
Adfacency List
Dalam teori graI, adfacency list merupakan bentuk representasi dari
seluruh sisi atau busur dalam suatu graI sebagai suatu senarai. Simpul-simpul
yang dihubungkan sisi atau busur tersebut dinyatakan sebagai simpul yang
saling terkait. Dalam implementasinya, hash table digunakan untuk
menghubungkan sebuah simpul dengan senarai berisi simpul-simpul yang
saling terkait tersebut.

Gambar 2.1 Undirected yclic Graph
GraI pada gambar dapat dideskripsikan sebagai senarai a,b},a,c},b,c}.
Dan representasi adjacency list dapat digambarkan melalui tabel di bawah ini.
Tabel 2.1 Representasi Adfacency List






BAB III
PEMBAHASAN
3.1#e5re8enta8 raf dala2 Lnked L8t
Dalam representasinya, sebuah graph dibagi menjadi 2 bagian, yaitu
bagian simpul yang disebut sebagai list simpul (vertex) dan bagian sisi yang
disebut dengan list sisi (edge).
ist simpul adalah list yang yang anggotanya merupakan elemen-
elemen simpul/nodes penyusun graI. Setiap titik akan direpresentasikan
menjadi sebuah elemen simpul. Elemen simpul tersebut akan dikaitkan
sehingga tersusun menjadi sebuah list simpul. Elemen Simpul terbagi menjadi
bagian, yaitu inIormasi, next dan list sisi. InIormasi merupakan bagian dari
elemen simpul yang akan menyimpan setiap inIormasi yang akan dikaitkan
dalam graI tersebut. InIormasi merupakan bagian inti dari sebuah graI yang
direpresentasikan. next, merupakan bagian untuk menyimpan inIormasi node
berikutnya, sedangkan list sisi adalah bagian untuk menyimpan elemen-
elemen yang direlasikan oleh elemen simpul tersebut.
ist sisi adalah kumpulan dari elemen yang yang merupakan
representasi dari relasi satu simpul dengan simpul yang lain. Elemen-elemen
yang tergabung dalam list sisi disebut sebagai elemen sisi. Setiap elemen pada
list elemen, memiliki satu list sisi, yang berarti bahwa elemen tersebut
memiliki keterkaitan dengan anggota list elemen yang lain.

Gambar .1 Representasi Graph dalam inked ist

ila ingin direpresentasikan dalam bentuk linked list, dapat


diilustrasikan secara sederhana seperti gamabar 4b. Dari ilustrasi sederhana
tersebut terlihat ada 5 buah simpul A,,C,D,dan E yang dibariskan dari atas
kebawah seperti pada gambar 4a. Kemudian dari masing-masing simpul
`keluar` pointer kearah kanan yang menunjuk simpul-simpul lain. Salah satu
contoh, yang dapat dilihat pada gambar 4b dimana A menunjuk simpul dan
simpul D.

Gambar .2 Contoh Untuk Vertex A, Memiliki 2 Edge Yang Terhubung Yaitu
E1 Dan E2
Dalam Adjacency ist, kita perlu membedakan antara simpul-vertex
dan simpul-edge. Simpul-vertex untuk menyatakan simpul atau vertex, dan
simpul-edge untuk menyatakan hubungan antar simpul yang biasa disebut
busur. Struktur keduanya bisa sama, bisa juga tidak sama,tergantung
kebutuhan.Untuk memudahkan pembuatan program, struktur kedua macam
simpul dibuat sama seperti yang digambarkan pada gambar 5c. Yang
membedakan antara simpul-vertex dan simpul-edge, adalah anggapan
terhadap simpul tersebut. Dalam contoh ini, terlihat struktur simpul dibuat
terdiri dari elemen. Satu elemen untuk INFO, dua elemen untuk pointer,
pointer kiri (leIt) dan pointer kanan (right).
O ila simpul dianggap sebagai simpul-vertex, maka :
Pointer leIt digunakan untuk menunjuk simpul berikutnya dalam untaian
simpul-simpul yang ada,atau diisi NU bila sudah tidak ada simpul yang
pelu ditunjuk.Sedangkan pointer Right digunakan untuk menunjuk simpul
edge yang pertama.

O ila Simpul dianggap sebagai simpul-edge, maka :


Pointer leIt digunakan untuk menunjuk simpul-vertex tujuan` yang
berhubungan dengan simpul-vertex asal` dan pointer right digunakan
untuk menunjuk simpul-edge berkiutnya bila masih ada, atau diisi NU
bila tak ada lagi simpul-busur yang ditunjuk.

Representasi graph dengan menggunakan linked list mempunyai


beberapa keunggulan dibandingkan dengan matriks. Merepresentasikan graph
dengan matriks adjacency seperti pada array tidak mencukupi karena
membutuhkan inIo lebih lanjut mengenai jumlah node. Jika sebuah graph
harus dibentuk dalam rangka pemecahan masalah, atau harus diperbarui secara
dinamik selama program berlangsung, sebuah matriks baru harus dibuat pada
setiap penambahan atau penghapusan suatu node sehingga tidak eIisien,
khususnya dalam dunia nyata dimana suatu graph bisa memiliki ratusan atau
lebih node. Jadi akan lebih baik jika membuat graph menggunakan linked list.

3.2Algort2a ra5h dala2 Baha8a C
typedeI struct vertex

char nama|100|;
Iloat x, y;
Iloat status;
Iloat jarak;
struct vertex *next,*connector;

};
typedeI struct vertex *pvertex;
typedeI struct edge

Iloat jarak;
char titik1|100|;
char titik2|100|;
edge * next;
};
typedeI struct edge * garis;
garis awalga NU, akhirga NU;
pvertex makeptree (Iloat x, Iloat y, char nama||)

pvertex baru;
baru(pvertex)malloc(sizeoI(struct vertex));
baru-~xx;
baru-~yy;
baru-~status0;
baru-~nextNU;
baru-~connectorNU;
strcpy(baru-~nama,nama);
}
void makevertex (pvertex *vertex,Iloat x,Iloat y,char nama||)

pvertex p , q ;
p makeptree(x,y,nama);
q *vertex;
iI(q NU)
*vertex p ;
else

Ior(;q-~next;qq-~next)


}
q-~next p;
}
}
void makeedge(garis * awalga, garis * akhirga, char titik1||, char titik2||, Iloat
jarak)

garis baru;
baru(garis)malloc(sizeoI(edge));
baru-~jarakjarak;
strcpy(baru-~titik1,titik1);
strcpy(baru-~titik2, titik2);
iI(*awalgaNU)

*awalgabaru;
*akhirgabaru;
}
else

(*akhirga)-~nextbaru;
(*akhirga)baru;
}
}
void cek(pvertex vertex, int jumlah)

pvertex awal,p,q;
Iloat jarak;
Iloat min ;
Iloat temp;
awal vertex;
p awal;

Ior(int i0;i

min 999;
p-~status 1;
Ior(qawal-~next;q!NU;qq-~next)

iI(q-~status!1)

jarak(((p-~x)-(q-~x))*((p-~x)-(q-~x)))(((p-~y)-(q-~y))*((p-~y)-(q-~y)));
jaraksqrt(jarak);
iI (min~jarak)

min jarak;
p-~jarak min;
p-~connector q;
}
makeedge(&awalga,&akhirga,p-~nama,q-~nama,p-~jarak);
}
}
p p-~connector;
}
temp(((p-~x)-(awal-~x))*((p-~x)-(awal-~x)))(((p-~y)-(awal-~y))*((p-~y)-
(awal-~y)));
p-~jarak sqrt(temp);
p-~connector awal;
}
void displayedge(pvertex vertex,int jumlah)

pvertex list vertex;
Iloat tot;
tot vertex-~jarak;
printI("\n\ts ke s\n", list-~nama,list-~connector-~nama);

list list-~connector;
Ior(int a0; a

printI("\n\ts ke s\n", list-~nama,list-~connector-~nama);
tot list-~jarak;
list list-~connector;
}
printI("\n");
}

BAB IV
PENU%UP
4.1S25:lan
erdasarkan rumusan masalah dan pembahasan diatas maka dapat
disimpulkan bahwa

























DAF%A# PUS%AKA

Munir, Rinaldi. 2010. Matematika iskrit. Revisi Keempat. andung : Penerbit
InIormatika
Himawan, ondan dkk . 2008. Implementasi GraI Dalam Penyimpanan Data
Struktur angunan. Diseminarkan dalam Seminar Nasional Aplikasi
Teknologi InIormasi 2008 (SNATI 2008)
http://t4urusboy08.blogspot.com/ F diakses tanggal 25 November 2011 pukul
18.00 WITA

You might also like