1. TIPE DATA
(v)
Tipe data adalah jenis data yang
mampu ditangani oleh suatu bahasa pemrograman pada komputer.
Contoh
Tipe Data :
a.
Tipe data Char dan String
Ini merupakan tipe data dasar, tipe data ini didefinisikan pada deklarsi var dibagian algoritma/program.
Example : Var Nama : String
Nilai : Char
Ini merupakan tipe data dasar, tipe data ini didefinisikan pada deklarsi var dibagian algoritma/program.
Example : Var Nama : String
Nilai : Char
b. Tipe data Boolean
Tipe data ini digunakan untuk pengambilan keputusan dalam operasi logika. Terdiri dari true disimbolkan ‘T’ dan False yang disimbolkan ‘F’. Ketika kita ingin mendapatklan hasil yang valid/pasti, kita menggunakan tipe data boolean untuk memperoleh keputusan dalam suatu penyelesaian yang pasti.
Tipe data ini digunakan untuk pengambilan keputusan dalam operasi logika. Terdiri dari true disimbolkan ‘T’ dan False yang disimbolkan ‘F’. Ketika kita ingin mendapatklan hasil yang valid/pasti, kita menggunakan tipe data boolean untuk memperoleh keputusan dalam suatu penyelesaian yang pasti.
c. Tipe Data Integer
Merupakan tipe data bilangan bulat.
Merupakan tipe data bilangan bulat.
Tipe Data
Rentang nilai
Memori
Byte
0…255
1 byte
Word
0…65.555
1 byte
Integer
-32.768 s.d 32.767
2 byte
Long Integer
-2.147.483.648
4 byte
Rentang nilai
Memori
Byte
0…255
1 byte
Word
0…65.555
1 byte
Integer
-32.768 s.d 32.767
2 byte
Long Integer
-2.147.483.648
4 byte
d. Tipe Data Real
Merupakan tipe data bilangan pecahan seperti real, single, double, comp, extend.
Merupakan tipe data bilangan pecahan seperti real, single, double, comp, extend.
e. Tipe Data Subrange
Merupakan tipe data bilangan yang punya jangkauan nilai tertentu sesuai dengan definisi pada pemrogram.
Example:
Type Variabel=Nilai_awal…Nilai_akhir
Merupakan tipe data bilangan yang punya jangkauan nilai tertentu sesuai dengan definisi pada pemrogram.
Example:
Type Variabel=Nilai_awal…Nilai_akhir
f. Tipe Data Enumerasi
Merupakan tipe data yang memiliki elemen-elemen tertentu yang disebut satu/satu dari bernilai konstanta integer sesuai dengan urutannya. Pada tipe data ini elemen masukan diwakili oleh suatu nama variable yang ditlis di dalam kurung.
Example :
Indeks_Hari = (Nol, Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu)
Merupakan tipe data yang memiliki elemen-elemen tertentu yang disebut satu/satu dari bernilai konstanta integer sesuai dengan urutannya. Pada tipe data ini elemen masukan diwakili oleh suatu nama variable yang ditlis di dalam kurung.
Example :
Indeks_Hari = (Nol, Minggu, Senin, Selasa, Rabu, Kamis, Jumat, Sabtu)
g. Tipe Data Array (Larik)
Tipe data ini sudah terstruktur dengan baik, walaupun masih sederhana. Tipe data ini menampung sejumlah data dengan tipe data sama (homogen) dalam sebuah variabel.
Cara mendefinisikan tipe data array :
Berdimensi satu
Var
Nama_Variabel_Array[1...N]of tipe_data
1 Nomor Indeks
Berdimensi dua
Var
Nama_Variabel_Array=Array[1...N,1...M]of tipe_data
2 buah Nomor Indeks
Tipe data ini sudah terstruktur dengan baik, walaupun masih sederhana. Tipe data ini menampung sejumlah data dengan tipe data sama (homogen) dalam sebuah variabel.
Cara mendefinisikan tipe data array :
Berdimensi satu
Var
Nama_Variabel_Array[1...N]of tipe_data
1 Nomor Indeks
Berdimensi dua
Var
Nama_Variabel_Array=Array[1...N,1...M]of tipe_data
2 buah Nomor Indeks
h. Tipe Data Record
Tipe data komposit yang sudah terstruktur denagn baik. Tipe data ini digunakan untuk menampung data suatu obyek. Datanya berupa campuran dari tipe data seperti string, numerik, char, boolean, atau tipe data lainnya. Tipe data ini merupakan struktur dasar dari suatu sistem database.
Tipe data komposit yang sudah terstruktur denagn baik. Tipe data ini digunakan untuk menampung data suatu obyek. Datanya berupa campuran dari tipe data seperti string, numerik, char, boolean, atau tipe data lainnya. Tipe data ini merupakan struktur dasar dari suatu sistem database.
i. Tipe Data Array Record
Tipe data array yang dibangun dari tipe data record.
Tipe data array yang dibangun dari tipe data record.
j. Tipe Data Citra
Berisi grafik/gambar yang banyak digunakan pada aplikasi video.
Berisi grafik/gambar yang banyak digunakan pada aplikasi video.
2. PROCEDURE
& FUNCTION
A. PROCEDURE
Merupakan
blok program yg terpisah dr program lain ( modul / sub program ), dan
dapat dipanggil dari program lain dengan menyebutkan nama dari procedure yg
bersangkutan.
Contoh :
program pemakaian_procedure;
uses crt;
procedure input_data;
begin
write ( “ NIM = “ ); readln ( nim ) ;
write ( “ Nama = “ ); readln ( nama ) ;
end;
var nim : string [ 14 ] ;
nama : string [ 20 ] ;
begin
clrscr ;
input_data;
writeln ( “ Selesai … “ ) ;
end
Contoh :
program pemakaian_procedure;
uses crt;
procedure input_data;
begin
write ( “ NIM = “ ); readln ( nim ) ;
write ( “ Nama = “ ); readln ( nama ) ;
end;
var nim : string [ 14 ] ;
nama : string [ 20 ] ;
begin
clrscr ;
input_data;
writeln ( “ Selesai … “ ) ;
end
B. FUNCTION
Blok
fungsi hampir sama dengan procedure, hanya saja fungsi harus di deklarasikan
dengan tipe nya. Buat program untuk menghitung jumlah 2 bilangan yg dilakukan
dg fungsi & nilai dari kedua bilangan tsb, dikirimkan dr luar fungsi, yg
mana nilai dari kedua bilangan harus diinputkan.
Program penjumlahan;
Uses crt :
Var bil1, bil2: byte;
function hasil (var A,B: byte) : integer;
Begin
hasil:=A+B;
end;
begin
clrscr;
write (‘Bilangan 1=‘);readln(bil1);
write (‘Bilangan 2=‘);readln(bil2);
write (‘Bilangan1+Bilangan2=“, hasil(bil1,bil2));
end
Program penjumlahan;
Uses crt :
Var bil1, bil2: byte;
function hasil (var A,B: byte) : integer;
Begin
hasil:=A+B;
end;
begin
clrscr;
write (‘Bilangan 1=‘);readln(bil1);
write (‘Bilangan 2=‘);readln(bil2);
write (‘Bilangan1+Bilangan2=“, hasil(bil1,bil2));
end
3. ARRAY
& RECORD (v)
A. ARRAY
Pengertian
Array adalah Array (larik) merupakan tipe data tersetruktur dimana didalamnya
terdiri dari komponen-komponen yang mempunyai tipe data yang sama. Didalam
suatu array jumlah komponen banyaknya adalah tetap. Didalam suatu larik atau
array setiap kompoenen ditunjukan oleh suatu index yang unik. Index dari setiap
komponen array menunjukan urutan data atau identitas yang mewakili data yang
ada didalamnya.Logika sederhananya array itu bisa disamakan dengan dua orang
dengan nama yang sama didalam suatu komunitas, untuk membedakan antara nama
yang satu atau dengan nama yang lain maka diberikan initial tambahan untuk
setiap nama.
a. Deklarasi Array
Didalam penulisan bahasa pemograman setiap penggunaan array harus dideklarsikan terlebih dahulu. Pendeklarasian array diawali dengan nama variabel array diikuti dengan indeks array yang dituliskan didalam tanda “[]” , diikuti dengan kata cadangan of dan tipe data yang dibutuhkan.
Bentuk Umum Penulisan
Tanda_pengenal : array [..tipe index ..] of tipe data;
Contoh :
Var
A : array[1..4] of integer;
B : array[1..5] of string;
C: array[1..10] of real;
Didalam penulisan bahasa pemograman setiap penggunaan array harus dideklarsikan terlebih dahulu. Pendeklarasian array diawali dengan nama variabel array diikuti dengan indeks array yang dituliskan didalam tanda “[]” , diikuti dengan kata cadangan of dan tipe data yang dibutuhkan.
Bentuk Umum Penulisan
Tanda_pengenal : array [..tipe index ..] of tipe data;
Contoh :
Var
A : array[1..4] of integer;
B : array[1..5] of string;
C: array[1..10] of real;
Keterangan
:
a. A,B,C merupakan tanda pengenal/ nama variabel dari array;
b. 1..4 : merupakan tipe indek dari array, yang menunjukan
banyaknya data yang mampu disimpan.
c.
Integer : menunjukan bahwa data yang
diinput berupa bilangan bulat.
b. Contoh Program Array 1 dimensi
program INT_ARRAY;
uses wincrt;
const N=10;
type int_array = ARRAY [1..N] of
integer;
var bil : int_array;
indeks : integer;
BEGIN
Writeln('masukkan sepuluh bilangan
integer.');
for indeks := 1 to 10 do
begin
readln(bil[indeks]); { loop untuk
memasukkan elemen array }
end;
writeln('Isi dari array ini
adalah'); { tampilkan setiap elemen }
for indeks := 1 to 10 do
begin
writeln('bil[', indeks:2,'] adalah
',bil[indeks] );
end
END.
B. RECORD
Pengertian
Sebuah record rekaman disusun oleh beberapa field. Tiap field berisi data dari
tipe dasar / bentukan tertentu. Record mempunyai kelebihan untuk menyimpan
suatu sekumpulan elemen data yang berbeda-beda tipenya (di banding array).
Contoh
Program record :
program
RECORD_INTRO;
type
tanggal = record
bulan,
hari, tahun : integer;
end;
var
waktu : tanggal;
begin
waktu.hari
:=25;
waktu.bulan:=09;
waktu.tahun:= 1983;
writeln('hari ini adalah
',waktu.hari,':',waktu.bulan,':',
waktu.tahun)
End.
4. REKURSIF
Rekursif
berarti bahwa suatu proses bisa memanggil dirinya sendiri. Menurut definisi
dalam Microsoft Bookshelf, Rekursif
adalah kemampuan suatu rutin untuk memanggil dirinya sendiri. Dalam Rekursif
sebenarnya terkandung pengertian prosedur dan fungsi. Perbedaannya adalah bahwa
rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus
dipanggil lewat pemanggil prosedur dan fungsi. Rekursif merupakan teknik
pemrograman yang penting dan beberapa bahasa pemrograman mendukung keberadaan
proses rekursif ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri
bisa berarti proses berulang yang tidak bisa diketahui kapan akan berakhir.
Kelebihan Perulangan Rekursif:
Kelebihan Perulangan Rekursif:
a. Sangat mudah untuk melakukan perulangan dengan batasan yang
luas dalam artian melakukan perulangan dalam skala yang besar.
b. Dapat melakukan perulangan dengan batasan fungsi.
Kekurangan Perulangan Rekursif:
Kekurangan Perulangan Rekursif:
c.
Tidak bisa melakukan nested loop
atau looping bersarang.
d. Biasanya membuat fungsi sulit untuk dipahami, hanya cocok
untuk persoalan tertentu saja.
e.
Trace error sulit.
f.
Memerlukan stack yang
lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter
formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan stack tak
cukup lagi (Stack Overrun).
g. Proses agak berbelit-belit karena terdapat pemangilan fungsi
yang berulang-ulang dan pemanggilan data yang ditumpuk.
Contoh
paling sederhana dari proses rekursif ini adalah proses menghitung nilai
factorial dari suatu bilangan bulat positif dan mencari deret Fibbonacci dari
suatu bilangan bulat.
Nilai factorial secara rekursif
dapat ditulis sebagai :
0 ! = 1
N ! = N x (N-1) !
yang secara pemrograman dapat
ditulis sebagai :
Faktorial(0) = 1 (1)
Faktorial(N) = N*Faktorial(N-1) (2)
Persamaan (1) tidak bersifat
rekursif, disebut nilai awal atau basis. Setiap fungsi rekursif paling
sedikit mempunyai satu nilai awal, jika
tidak fungsi tersebut tidak bisa dihitung secara eksplisit.
Persamaan (2) di atas adalah contoh
hubungan rekurens (recurrence relation), yang berarti bahwa nilai suatu fungsi
dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang
lebih kecil.
Bilangan Fibbonacci didefinisikan sebagai
berikut :
1 1
2 3 5
8 13 21
34 55 89
…
dari barisan tersebut dapat dilihat
bahwa bilangan ke-N (N>2) dalam barisan dapat dicari dari dua bilangan
sebelumnya yang terdekat dengan bilangan N, yaitu bilangan ke-(N-1) dan
bilangan ke-(N-2),
sehingga dapat dirumuskan sebagai :
Fibbonacci(1) = 1 (1)
Fibbonacci(2) = 1 (2)
Fibbonacci(N) = Fibbonacci(N-1) +
Fibbonacci(N-2) (3)
Dengan persamaan (1) dan (2) adalah
basis dan persamaan (3) adalah rekurensnya.
5. SORTING
Sorting adalah suatu proses
pengurutan data yang sebelumnya disusun secara acak atau tidak teratur menjadi
urut dan teratur menurut suatu aturan tertentu.
Sorting dapat dibedakan menjadi dua
jenis yaitu ascending dan descending.
Ø Ascending adalah pengurutan data
dari kecil ke besar
Ø Descending adalah pengurutan data
dari besar ke kecil.
Dengan cara program
yang dibuat harus dapat membandingkan antar data yang di inputkan. Artinya
jika ada deretan data, maka data yang pertama akan membandingkan
dengan data yang kedua. Jika data yang pertama lebih besar dari pada data yang
kedua maka data yang pertama akan bertukar posisi dengan data yang kedua, begitu
seterusnya sampai benar-benar data terurut dari yang terbesar hingga yang
terkecil.
6. SEARCHING
Searching
adalah pencarian data dengan cara menelusuri data-data tersebut.
Tempat pencarian data dapat berupa array dalam memori, bisa juga pada file pada external storage.
Tempat pencarian data dapat berupa array dalam memori, bisa juga pada file pada external storage.
Ada dua macam teknik pencarian yaitu
pencarian sekuensial dan pencarian biner. Perbedaan dari dua teknik ini
terletak pada keadaan data. Pencarian sekuensial digunakan apabila data dalam
keadaan acak atau tidak terurut (contoh: sequential search).
Sebaliknya, pencarian biner digunakan pada data yang sudah dalam keadaan urut
(contoh: Binary serach dan interpolation search).
7. POINTER
Pointer (variabel
penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel
lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di
dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain,
variabel pertama dikatakan menunjuk ke variabel kedua.
Deklarasi
Pointer
Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.
Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.
Bentuk Umum : Tipe_data
*nama_pointer;
Contoh
Program :
#include <constream.h>
int *px;
char *sh;
void main()
{ int x, y; /* x dan y bertipe
int */
int *px; /* px pointer yang
menunjuk objek */
clrscr();
x = 87;
px = &x; /* px berisi
alamat dari x */
y = *px; /* y berisi nilai
yang ditunjuk px */
cout<<“Alamat x
=”<<&x <<\n”;
cout<<“Isi px = \n”,
px);
cout<<“Isi x = \n”, x);
cout<<“Nilai yang ditunjuk
oleh px = \n”, *px);
cout<<“Nilai y = \n”,
y);
getch();}
Operasi
Pointer
a. Operasi Penugasan
Suatu variable pointer seperti
halnya variable yang lain, juga bisa mengalami operasi penugasan. Nilai dari
suatu variable pointer dapat disalin ke variable pointer yang lain.
Contoh
Program :
#include <constream.h>
void main()
{float *x1,y, *x2;
clrscr();
y = 13.45;
x1 =
&y;
/* Alamat dari y disalin ke variabel x1 */
x2 = x1;
/* Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y
= "<<y<< " ada di alamat "<<
x1<<"\n";
cout<<"Nilai variabel y
= "<<y<< " ada di alamat "<<
x2<<"\n";
getch();}
b. Operasi Aritmatika
Suatu
variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer
saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan.
Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index
selanjutnya) dalam memori. Begitu juga operasi pengurangan.
Contoh Program :
#include <constream.h>
void main()
{int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai
"<<*penunjuk <<" ada di alamat memori "
<<penunjuk<<"\n";
cout<<"Nilai
"<<*(penunjuk+1) <<" ada di alamat memori "
<<penunjuk+1<<"\n";
cout<<"Nilai
"<<*(penunjuk+2) <<" ada di alamat memori "
<<penunjuk+2<<"\n";
getch();}
c.
Operasi Logika
Suatu pointer juga dapat dikenai
operasi logika.
Contoh Program :
#include<constream.h>
void main()
{int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
cout<<"nilai pa=
"<<pa<< " nilai pb=
"<<pb<<"\n";
if(pa < pb)
cout<<"pa menunjuk ke
memori lebih rendah dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke
memori yang sama dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke
memori lebih tinggi dari pb\n";
getch();}
8. STACK
(TUMPUKAN)
Dalam ilmu komputer, stack atau tumpukan merupakan
sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First
Out), yaitu data yang terakhr
kali dimasukkan akan pertama kali keluar dari stack tersebut.
Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan
tabel fix).
Ciri
Stack :
Elemen TOP (puncak) diketahui
penisipan dan penghapusan elemen selalu dilakukan di TOP
LIFO
Pemanfaatan
Stack :
Perhitungan ekspresi aritmatika
(posfix) algoritma backtraking (runut balik) algoritma rekursif.
Operasi
Stack yang biasanya :
Push (input E : typeelmt, input/output
data : stack): menambahkan sebuah elemen ke stack.
Pop (input/output data :
stack, output E : typeelmt ) : menghapus sebuah elemen stack.
v
IsEmpty ()
v
IsFull ()
dan beberapas selektor yang lain.
9. QUEUE (ANTREAN)
Struktur data antrean
atau queue adalah suatu bentuk khusus dari linear list, dengan operasi
penyisipan (insertion) hanya diperbolehkan pada salah satu sisi, yang disebut sisi belakang (REAR), dan operasi
penghapusan (deletion) hanya diperbolehkan pada sisi lainnya, yang disebut sisi
depan (FRONT), dari list.
Sebagai contoh dapat kita lihat antrean (Q1, Q2,…,QN). Kita notasikan bagian depan dari antrean Q sebagai FRONT(Q) dan bagian belakang sebagai REAR(Q).
Jadi untuk antrean Q = [Q1, Q2, …, QN] :
FRONT(Q) = Q1 dan REAR(Q) = QN
Kita menggunakan notasi NOEL(Q) untuk menyatakan jumlah elemen di dalam antrean Q. NOEL(Q) mempunyai harga integer. Untuk antrean Q = [Q1,Q2,…, QN],
maka NOEL(Q) = N.
Operator penyisipan (insertion) disebut INSERT dan operator penghapusan (deletion)
disebut REMOVE.
Sebagai contoh dapat kita lihat antrean (Q1, Q2,…,QN). Kita notasikan bagian depan dari antrean Q sebagai FRONT(Q) dan bagian belakang sebagai REAR(Q).
Jadi untuk antrean Q = [Q1, Q2, …, QN] :
FRONT(Q) = Q1 dan REAR(Q) = QN
Kita menggunakan notasi NOEL(Q) untuk menyatakan jumlah elemen di dalam antrean Q. NOEL(Q) mempunyai harga integer. Untuk antrean Q = [Q1,Q2,…, QN],
maka NOEL(Q) = N.
Operator penyisipan (insertion) disebut INSERT dan operator penghapusan (deletion)
disebut REMOVE.
10. LINKED
LIST
Linked
List ada dua macam, yaitu :
Linked List
adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang
tersusun secara sekuensial, saling sambungmenyambung, dinamis dan
terbatas.
Ø Linked List sering disebut juga
Senarai Berantai
Ø Linked List saling terhubung dengan
bantuan variabel pointer
Ø Masing-masing data dalam Linked List
disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan
biasanya berupa struct yang terdiri dari beberapa field.
Single Linked List
adalah sebuah LINKED LIST yang menggunakan sebuah variabel pointer
saja untuk menyimpan banyak data dengan metode LINKED LIST, suatu
daftar isi yang saling berhubungan.
11. TREE
Contoh Binary
Search Tree pada c++ - sebuah binary search tree (bst) adalah sebuah pohon
biner yang boleh kosong, dan setiap nodenya harus memiliki identifier/value.
value pada semua node subpohon sebelah kiri adalah selalu lebih kecil dari
value dari root, sedangkan value subpohon di sebelah kanan adalah sama atau
lebih besar dari value pada root, masing – masing subpohon tersebut
(kiri&kanan) itu sendiri adalah juga bst.sebuah bst, pada dasarnya adalah
sebuah pohon biner (binary tree), oleh karena itu, kita dapat melakukan
traversal pada setiap node dengan metode inorder, preorder maupun postorder.
dan jika kita melakukan traversal dengan metode inorder, pada dasarnya kita
telah melakukan traversal valuenya secara terurut dari kecil ke besar, jadilah
ini sebagai sorting algoritma.
Struktur
data bst ( binary search tree )sangat penting dalam struktur pencarian,
misalkan, dalam kasus pencarian dalam sebuah list, jika list sudah dalam
keadaan terurut maka proses pencarian akan sangat cepat,
jika kita menggunanan list contigue dan melakukan pencarian biner.
akan tetapi, jika kita ingin melakukan perubahan isilist (insert atau
delete), menggunakan list contigue akan sangat lambat, karena proses insert dan
delete dalam list contigue butuh memindahkan banyak elemen setiap saat. mungkin
kita bisa juga menggunakan linked-list, yang untuk operasi insert atau delete
tinggal mengatur – atur pointer, akan tetapi pada n-linked list, kita tidak
bisa melakukan pointer sembarangan setiap saat, kecuali hanya satu kali dengan
kata lain hanya secara sequential. Sebaliknay binary tree memberikan
jawaban sempurna atas semua permasalahan ini, dengan memanfaatkan binary tree
kita dapat melakukan pencarian elemen/node value dalam kompleksitas algorimta
(big O) O(n log n) langkah saja.
Contoh Binary Tree :
Traversal (Penelusuran) Pohon
Ada tiga algoritma,
yaitu: Pre Order, In Order dan Post Order
Ø
Pre Order
a. Proses akar
b. Telusur Anak kiri dalam Pre Order
c.
Telusur Anak kanan dalam Pre Order
Ø In Order
a. Telusur Anak kiri dalam In Order
b. Proses
c.
Telusur Anak kanan dalam In Order
Ø Post Order
a. Telusur Anak kiri dalam Post Order
b. Telusur Anak kanan
dalam Post Order
c.
Proses
12. GRAPH
Graph adalah
sekelompok simpul-simpul (nodes/vertices) V, dan sekelompok sisi (edges) E yang
menghubungkan sepasang simpul. Bayangkan simpul-simpul tersebut sebagai
lokasi-lokasi, maka himpunan dari simpul-simpul tersebut adalah himpunan
lokasi-lokasi yang ada. Dengan analogi ini, maka sisi merepresentasikan jalan
yang menghubungkan pasangan lokasi-lokasi tersebut.
Graf juga didefinisikan sebagai himpunan benda-benda yang disebut verteks (node) yang terhubung oleh sisi (atau edge ata u arc). biasanya graf digambarkan sebagai kumpulan titik-titik (melambangkan verteks) yang dihubungkan oleh garis-garis (melambangkan sisi).
Contoh implementasi graf pada struktur data :
Graf juga didefinisikan sebagai himpunan benda-benda yang disebut verteks (node) yang terhubung oleh sisi (atau edge ata u arc). biasanya graf digambarkan sebagai kumpulan titik-titik (melambangkan verteks) yang dihubungkan oleh garis-garis (melambangkan sisi).
Contoh implementasi graf pada struktur data :
1. Graf tak berarah (undirected graph)
Graf yang sisinya tidak mempunyai
orientasi arah disebut graf tak berarah. Paragraf tak-berarah, urutan
pasangan simpul yang dihubungkan oleh sisi tidak diperhatikan. salah
satu contoh graf tak berarah dimana sisi-sisi yang menghubungkan
antar simpul dalam graf tersebut tidak memiliki orientasi arah.
2. Graf Berarah (directed graph)
Graf yang setiap sisinya memiliki
orientasi arah disebut sebagai graf berarah. Sisi berarah dalam graf ini dapat
dinamakan sebagai busur (arc). Lain halnya dengan graf tak-berarah, urutan
pasangan simpul disini sangat diperhatikan karena dapat menyatakan hal yang
berbeda. contoh dari graf berarah yang memiliki sisi-sisi dengan
orientasi arah (busur).
Digraph & Undigraph
1. Graph Berarah (directed graph atau digraph)
Jika
sisi-sisi pada graph, misalnya {x, y} hanya berlaku pada arah-arah
tertentu saja, yaitu dari x ke y tapi tidak
dari y ke x; verteks x disebut origin
dan vertex y disebut terminus dari sisi tersebut. Secara grafis
maka penggambaran arah sisi-sisi digraph dinyatakan dengan anak panah yang
mengarah ke verteks terminus, secara notasional sisi graph berarah ditulis
sebagai vektor dengan (x, y).
2. Graph Tak Berarah (undirected graph atau undigraph)
Setiap
sisi {x, y} berlaku pada kedua arah:
baik x ke y maupun y ke x. Secara grafis sisi
pada undigraph tidak memiliki mata panah dan secara notasional menggunakan
kurung kurawal.
Dalam
masalah-masalah graph undigraph bisa dipandang sebagai suatu digraph dengan
mengganti setiap sisi tak berarahnya dengan dua sisi untuk masing-masing arah
yang berlawanan.
Selain itu, berdasarkan definisi ini maka struktur data linear maupun hirarkis adalah juga graph. Node-node pada struktur linear atupun hirarkis adalah verteks-verteks dalam pengertian graph dengan sisi-sisinya menyusun node-node tersebut secara linear atau hirarkis. Sementara kita telah ketahui bahwa struktur data linear adalah juga tree dengan pencabangan pada setiap node hanya satu atau tidak ada. Linear 1-way linked list adalah digraph, linear 2-way linked list bisa disebut undigraph.
Aspek
Algoritmis
Walau secara konseptual struktur
linear adalah subset dari tree dan demikian pula tree adalah subset dari graph,
dalam aplikasinya perlu dibedakan cara penanganan struktur-struktur tersebut
untuk mencapai efisiensi algoritmis. Algoritma-algoritma untuk graph secara
umum terlalu mahal apabila digunakan pada struktur hirarkis (tree), apalagi
pada struktur linear. Jadi apabila masalah yang dihadapi pada dasarnya hanya
merupakan masalah dengan struktur data hirarkis saja maka cukup lah kita
menggunakan representasi dan algoritma-algoritma tree.
Konektivitas
pada Undigraph
Adjacency: Dua
verteks x dan y yang berlainan disebut berhubungan langsung
(adjacent) jika terdapat sisi {x, y} dalam E.
Ø
Path
Sederetan verteks yang mana setiap
verteks adjacent dengan verteks yang tepat berada disebelahnya.
Ø
Panjang dari path
Jumlah sisi yang dilalui path.
Ø Siklus
Suatu
path dengan panjang lebih dari satu yang dimulai dan berakhir pada suatu
verteks yang sama.
Ø Siklus sederhana
Dalam
undigraph, siklus yang terbentuk pada tiga atau lebih verteks-verteks yang
berlainan yang mana tidak ada verteks yang dikunjungi lebih dari satu kali
kecuali verteks awal/akhir.
Dua
verteks x dan y yang berbeda dalam suatu undigraph disebut
berkoneksi (connected) apabila jika terdapat path yang menghubungkannya.
Himpunan bagian verteks S disebut terkoneksi (connected) apabila dari setiap
verteks x dalam S terdapat path ke setiap
verteks y (y bukan x) dalam S. Suatu komponen terkoneksi
(connected components) adalah subgraph (bagian dari graph) yang berisikan satu
himpunan bagian verteks yang berkoneksi. Suatu undigraph dapat terbagi atas
beberapa komponen yang terkoneksi; jika terdapat lebih dari satu komponen
terkoneksi maka tidak terdapat path dari suatu verteks dalam satu komponen
verteks di komponen lainnya.
Ø Pohon bebas (free tree)
Suatu
undigraph yang hanya terdapat satu komponen terkoneksi serta tidak memiliki
siklus sederhana.
Konektivitas
pada Digraph
Terminologi di atas berlaku juga
pada Digraph kecuali dalam digraph harus dikaitkan dengan arah tertentu karena
pada arah yang sebaliknya belum tentu terdefinisi.
Ø
Adjacency ke / dari
Jika terdapat sisi (x,y) maka dalam
digraph dikatakan bahwa x "adjacent
ke" y atau y "adjacent dari" x.
Demikian pula jika terdapat path dari x ke y maka belum
tentu ada path dari y ke x Jadi dalam digraph
keterkoneksian didefinisikan lebih lanjut lagi sebagai berikut.
Ø Terkoneksi dengan kuat
Himpunan
bagian verteks S dikatakan terkoneksi dengan kuat (strongly connected) bila
setiap pasangan verteks berbeda x dan y dalam
S, x berkoneksi dengan y dan y berkoneksi
denganx (dpl., ada path dari x ke y dan sebaliknya
dari y ke x).
Ø
Terkoneksi dengan Lemah
Himpunan bagian verteks S dikatakan
terkoneksi dengan lemah (weakly connected) bila setiap pasangan verteks
berbeda x dan y dalam S, salah satu: x berkoneksi
dengan y (atau yberkoneksi dengan x) dan tidak kebalikan
arahnya (dpl., hanya terdefinisi satu path:
dari x ke y atau sebaliknya dari y ke x).
Himpunan
Keterhubungan Langsung
Cara pendefinisian lain untuk graph
adalah dengan menggunakan himpunan keterhubungan langsung Vx. Pada setiap
verteks x terdefinisi Vx sebagai himpunan dari
verteks-verteks yang adjacent dari x. Secara formal:
Vx = {y | (x,y) Î E}
Dalam digraph didefinisikan juga
terminologi-terminologi berikut ini. Predesesor dari suatu
verteks x (ditulis Pred(x)) adalah himpunan semua verteks yang
adjacent ke x. Suksesor dari verteks x (ditulis Succ(x)) adalah
himpunan semua verteks yang adjacent dari x; yaitu adjacency set di atas.
Degree
Degree dari suatu
verteks x dalam undigraph adalah jumlah sisi di mana di salah satu
ujungnya terdapat x.
Ø
Indegree dari suatu
verteks x dalam digraph adalah jumlah dari predesesor x.
Ø
Outdegree dari suatu
verteks x dalam digraph adalah jumlah dari suksesor x.
Graph
berbobot (weighted graph)
Apabila sisi-sisi pada graph
disertai juga dengan suatu (atau beberapa) harga yang menyatakan secara unik
kondisi keterhubungan tersebut maka graph tersebut disebut graph berbobot.
Biasanya dalam masalah-masalah graph bobot tersebut merupakan "biaya"
dari keterhubungan ybs. Pengertian "biaya" ini menggeneralisasikan
banyak aspek: biaya ekonomis dari proses/aktifitas, jarak geografis/tempuh,
waktu tempuh, tingkat kesulitan, dan lain sebagainya. Dalam beberapa masalah
lain bisa juga bobot tersebut memiliki pengertian "laba" yang berarti
kebalikan dari "biaya" di atas. Dalam pembahasan algoritma-algoritma
graph nanti pengertian bobot akan menggunakan pengertian biaya sehingga apabila
diaplikasikan pada masalah yang berpengertian laba maka kuantitas-kuantitas
terkait adalah kebalikannnya. Misalnya mencari jarak tempuh minimum digantikan
dengan mencari laba maksimum.
Daftar Pustaka
- Shandy Johan Blog
-
Wiki.co.id
- Shafiqhusein’s Blog
- Devia christa Blog
- Blognapi Blog
- Panjaitan sister Blog
- For free Blog
Tidak ada komentar:
Posting Komentar