Struktur Data Materi Dimas PDF
Struktur Data Materi Dimas PDF
BAB I
PENDAHULUAN
I.1. PENGERTIAN
Berbicara dengan struktur data maka perlu memperhatikan beberapa aspek seperti
logika, algoritma dan kompleksitas program. Struktur data menjadi sangat penting dalam
mendisain sebuah program yang efisien dengan akses yang sangat efektif. Sebuah program
merupakan proses bentukan dari stuktur data dan algoritma.
Data diorganisasi sedemikian rupa dengan cara yang berbeda-beda, baik menurut logika
maupun model model matematika kemudian disusun menurut aturan-aturan yang benar yang
disebut dengan struktur data. Data adalah fakta-fakta / angka-angka yang sudah terekam tetapi
belum digunakan untuk suatu keperluan. Struktur adalah elemen-elemen pebentuk atau
pengaturan hubungan antar elemen dalam suatu sistem.
Nilai data (data value) adalah suatu data yang dipandang sebagai satu kesatuan tunggal (single
entity) sedangkan tipe data adalah kombinasi antara himpunan nilai data (set of value) dan
himpunan operasi terhadap nilai-nilai data tersebut.
Dimensi Array :
1. Array 1 dimensi : List dan vektor
2. Array 2 dimensi : tabel dan matriks
3. Array multidimensional : secara teoritis bahwa jumlah dimensi tidak terbatas akan tetapi
hanya dibatasi oleh besarnya memory
4. Array-array special :
Array segitiga (triagular array) :
Lower triangular array : array 2-dimensi berbentuk bujur sangkar (U1 = U2), dimana
semua komponen di atas diagonal berisi 0
Upper triangular array : perbedaan lower triangular array adalah semua komponen di
bawah diagonal yang berisi 0. Penyimpanan memerlukan lebih sedikit memory,
karena angka 0 tidak perlu disimpan. Rumus AMF untuk triangular array adalah :
Address (S[i,j] = C0 + C1 x (i x (i-1)) + C2 x j, dimana C0 = B, C1 = L/2 , C2 = L
Jumlah elemen = (U x (U+100/2 dan
Jumlah memory = L x jumlah elemen
Array jarang (Sparse Array) : Array yang kebanyakan komponennya mempunyai satu
nilai yang sama, misalnya nilai 0, hanya sebagian kecil yang tidak sama dengan 0.
Contoh :
Record / list
3. List circular
head head
Contoh :
Record : mahasiswa {nim, nama, alamat{jalan, area{kota,kdpos}}, umur, jurusan, hobby}
Perhatikan diagram berikut dalam gambar 1.3.
Mahasiswa
Jalan Area
Kota kdpos
in
out
Contoh Grafik :
Gambar 1.6. Bentuk salah satu graph
Demi kelancaran pemahaman akan struktur data lebih lanjut maka perlu mengetahui
bentuk-bentuk fungsi dan notasi yang sering digunakan baik dalam algoritma maupun program.
FUNGSI FAKTORIAL
Misalkan bilangan integer positif dari satu sampai dengan n dinotasi dengan n ! maka
bentuknya adalah n ! = 1 x 2 x 3 x ... x (n-2) x (n-1) x n.
Contohnya :
5! = 5 * 4!
4 = 4 * 3!
3 = 3 * 2!
2 = 2 * 1!
=2*1=2
3=3*2=6
4 = 4 * 6 = 24
5 ! = 5 * 24 = 120
Misalnya : {a, b, c}
a (c,a)
c
b (c,b)
NUMERIK INTEGER
Merupakan nilai bilangan bulat dalam bentuk decimal maupun hexadecimal. Perhatikan
tabel 2.1. berikut :
NUMERIK REAL
Nilai konstanta numeric berkisar dari 1E-38 sampai dengan 1E + 38 dengan mantissa
yang signifikan sampai dengan 11 digit. Nilai E menunjukkan 10 pangkat. Nilai konstanta
numerik real menempati memori 6 byte.
SINAR SINURAT, ST STMIK BUDIDARMA
Diktat : KBMI3305 - Struktur Data Hal : 23
X = 2 atau X := 2 atau X2
Case a of
1: ekspressi1 ; 2: ekspressi2; ...... end;
Perulangan adalah for do atau while ... do atau do while atau repeat until ()
Relasi adalah atau > atau atau < atau <> atau .GE. atau .GT. atau .LE. atau .LT. atau .NE.
dan lain-lain.
Misalnya : untuk membandingkan dua buah nilai maka harus menggunakan
operator kondisi atau looping
Repeat
Ekspressi
Until (kondisi)
II.1. ARRAY
Merupakan gugus yang menggambarkan struktur yang mengalokasi alamat (storage) di
memory untuk suatu operand dengan suatu indeks. Array dapat bertipe data sederhana ataupun
tipe data enumerate. Perhatikan diagram berikut pada gambar 3.1.
Sistem Operasi
II.2. RECORD
Data terstruktur yang mengumpulkan beberapa item data untuk masing-masing tipe data
yang sama atau berbeda disebut field. Perhatikan diagram berikut pada gambar 3.3.
Daftar field
III. SET
Bagian struktur data yang mengatur objek-objek dalam set, dimana anggota-anggota set
mempuyai tipe yang sam (base type) yaitu tipe ordinal (integer, boolean, cahr, skalar kecuali
real).
Contoh1 :
Type huruf_hidup = set of (a, e, o, i, u);
Var teks : string;
Jlh, i : integer;
Begin
Readln(teks);
Jlh := 0;
For i:=1 to ord(teks[0]) do
If teks[i] in huruf_hidup then
Jlh := jlh + 1;
Writeln (Jumlah huruf hidup : , jlh);
End.
III.4. POINTER
Merupakan struktur data berupa variable dinamis yang tidak dapat dideklarasikan secara
eksplisit seperti variabel statis dan tidak dapat langsung ditunjukkan oleh suatu pengenal
(identifier).
Pointer ini hanya dapat ditunjukkan oleh variable khusus yang berisi alamat memory
yang digunakan oelh variable dinamis. Jadi variabel pointer hanya dapat dideklarasikan dengan
tipe data pointer (simbol baca carat atau circumflex). Perhatikan contoh fragmen program
berikut :
Contoh 1 :
Type kalimat : string; pointkal = ^kalimat;
Var nama : pointkal;
Begin
Nama^ := Belajar struktur data;
Write(nama^);
End.
Contoh 2 :
Type kar = ^catchar;
Catchar = record
Kode : string;
Nama : string;
Gaji : real;
End;
Var datakar : array [1..5] of kar;
i : byte;
Begin
For i := 1 to 5 do
Begin
New (datakar[i]);
Tugas : Buatlah program dari salah satu bahasa pemrograman untuk menginput beberapa data
kemudian mengurutkan hasilnya secara menaik (ascending) atau menurun (descending).
Linked list merupakan struktur data dinamis, dimana list dianalogikan sebagai daftar /
record yang berisi item data. Dalam list kita harus mengenali masing-masing elemen / node,
misalnya : elemen1, elemen2, ...., elemenn.
Elemen-elemen ini harus dihubungkan (link) dengan suatu pointer (penujuk) pada
alamat-alamat tertentu. Berikut akan dijelaskan lebih dahulu deklarasi-deklarasi list.
Statement NEW
Digunakan untuk mengalokasi storage dalam node baru kemudian kita mereferensi
masing-masing node baru yang menyimpan informasi tentang variabel pointer tersebut.
Statement DISPOSE
Digunakan untuk membebaskan list dari rangkaian linked list yang ada.
Jika dimisalkan entry data adalah : P^.Kata =Agus dan Q^.Kata = Budi maka bentuk listnya
adalah sebagai berikut :
P
Agus
Q
Budi
Q
Budi 5
Sehingga bentuk linked list yang sebenarnya dapat dideskripsikan sebagai berikut :
Head Head
1 2 3 4 5
Agus 2 Budi
Sehingga :
R
Agus 3
P
Q Budi 5
Informasi tentang data (record data item) Next pointer field = nil = null
1 Agus 2 1 Agus 2
Budi 3 Budi 3
Cerry 4 Cerry 4
Dedy 0 Dedy 0
? ?
a. List original b. Operasi New
A. SISIP AWAL
Head New (Q)
Read (q^.nilai) (3)
Q^.next = nil
(2) P = Head
New (Q) P (1)
If p = nil then
Tail = Q
else
(3) Read (Q^.data
Q^.Next = P . (1)
P = Q .. (2)
a. Sisip list baru di awal linked list
C. SISIP AKHIR
If ( p=nil) then Sisip_awal new (Q)
Head Else Q^.nilai = E
Last = P Q^.next = nil
B C D While (last^.next <> Nil) do P = head
Last = last^.next if p = nil then
(1)
P (2) Endwhile P=Q
New (Q)
E New (Q) else
P^.Next = Q (1) Tail^.next = Q
(3) Read (Q^.data Q^.Next = Nil .(2) Tail = Q
Endif endif
P = Head
Head If (P <> nil) then
(1)
Q = P . (1)
(2) P = Q^.Next .. (2)
Dispose (Q)
Endif
a. Hapus list awal dari linked list
Berikut ini disajikan program pascal yang mengimplementasi proses linked list (sisip awal,
tengah, akhir dan hapus awal, tengah, akhir) :
Tugas :
1. Buatlah prosedur untuk mengiput dua buah linked list dan menggabung keduanya
menjadi Satu
2. Buatlah prosedur untuk mencari data tertentu pada linked list
3. Buat prosedur untuk mengganti data tertentu dalam linked list
4. Buatlah prosedur untuk mengurutkan data linked list
Bentuk umum diagram multi linked list diperlihatkan pada gambar 4.13.
Head Tail
Pointer next
Pointer back
Data field
Linked list 2 arah dengan bentuk circular terdapat perbedaan dengan linked list lainnya.
Perhatikan diagram berikut pada gambar 4.14.
Head Tail
Pointer next
Pointer back
Data field
Perhatikan proses penghapusan node tertentu dalam linked list dua arah dan urutan proses,
ditunjukkan dalam gambar 4.15. berikut :
Loc
Node N
Baru
Gambar 4.16. Proses penyisipan node baru pada linked list dua arah
Berikut ini implementasi algoritma linked list dua arah dalam Bahasa pemrograman
Pascal :
Program linked_list;
Type Penunjuk = ^RecNama;
RecNama = Record
Nama : string;
Pra, post : penunjuk;
End;
Var datanama, head, tail : penunjuk;
Notasi infix adalah jika operator berada diantara kedua operandnya, misalnya : suatu
ekspressi c := a + b.
Notasi prefix (notasi polish) adalah jika operator berada di depan kedua operandnya,
misalnya : dari infix c := a + b menjadi := c + a b.
Notasi postfix/suffix (reverse polish) adalah jika operator berada di belakang kedua
operandnya, misalnya : dari infix c := a + b menjadi c a b + :=
Algoritma infix :
1. Scan dari kiri ke kanan sampai ketemu dengan kurung tutup yang paling awal
2. Scan kembali dari posisi sebelumnya ke kiri sampai ketemu kurung buka pertama
3. Lakukan operasi yang berada dalam tanda kurung
4. Ganti ekspresi di dalam kurung tersebut dengan hasil operasi
5. Ulangi langkah 1 sampai dengan selesai.
Algoritma posfix/suffix :
1. Scan dari kiri ke kanan sampai ketemu dengan operator
2. Ambil 2 operand yang berada langsung di sebelah kiri operator tersebut
3. Ganti ekspresi dengan hasil operasi
4. Scan lagi hasil operasi tadi ke kanan, jadi tidak perlu discan dari depan sekali seperti
pada proses infix
SINAR SINURAT, ST STMIK BUDIDARMA
Diktat : KBMI3305 - Struktur Data Hal : 29
Keuntungan dari notasi postfix/suffix ini adalah tidak perlu memakai tanda kurung untuk
menyatakan prioritas pengerjaan serta lebih cepat dan efisien, karena tidak perlu selalu scan
dari depan atau paling kiri.
Untuk pekerjaan algoritma posfix/suffix ini, dipergunakan stack untuk menyimpan operand
yang dibaca, yang belum dilakukan operasi terhadapnya.
V.2. REKURSIF
Rekursif adalah merupakan salah bagian yang penting yang harus dipahami untuk operasi
stack (tumpukan) maupun queue (antrian).
a. Fungsi faktorial
Misalkan n ! = 1 x 2 x 3 x x n
Jika n = 0 atau 1 maka n ! = 1 lainnya n ! = n * (n 1) !
Contoh : 4 ! = 4 * 3 !
3!=3*2!
2!=2*1!
=2*1=2
3! = 3 * 2 = 6
4 ! = 4 * 6 = 24
Algoritma :
Function Factorial (n : integer) : integer;
Begin
If (n = 0) or (n = 1) then Factorial := 1 else
Factorial := n * Factorial (n 1);
End;
b. Fungsi Fibonacci
Jika n=0 atau n = 1 atau n = 2 maka Fibonacci = 1 lainnya
Fibonacci = Fibonacci (n-1) * Fibonacci(n-2);
Algoritma :
Function Fibo(n : integer) : integer;
Begin
If (n=0) or (n=1) or (n=2) then Fibo := 1 else
Fibo := Fibo(n-1) * Fibo(n-2);
End;
c. Fungsi Loop
Proses penulisan ulang dengan cara berulang-ulang (rekursif)
Algoritma :
Procedure Deret (n : integer);
Begin
Writeln(n:3);
If n <=10 then
Deret(n+1);
End;
d. Menara Hanoi
Merupakan proses rekursif dalam implementasi stack. Konsep rekursif ini dipakai untuk
memindahkan piringan dari tiang 1 ke tiang 3 dengan bantuan tiang 2.
Perhatikan diagram berikut :
Begin
Write(Berapa jumlah piringan : ); readln(cacah);
Cacah_gerak := 0;
Hanoi(cacah_gerak, cacah, 1, 2, 3);
Writeln(Piringan sebanyak : , cacah:2, buah, memerlukan,
Cacah_gerak:3, kali pemindahan);
End.
V.3. STACK
Stack (tumpukan) merupakan bagian dari list (struktur linier) dimana item-item data
ditambah atau dihapus selalu di posisi terakhir (LIFO =last in first out) yang disebut top.
Pada stack terdapat terminologi Push dan Pop, dimana push maksudnya adalah
memasukkan elemen data pada stack sedangkan pop adalah mengambil elemen data pada
stack.
top
C
top B
B B top
A top A A A A top
V.4. QUEUE
Suatu queue (antrian) juga bagian dari linked list yang digunakan untuk
memodelkan sesuatu, seperti barisan tunggu pada suatu counter dengan model FIFO (first
in first out). Operasi-operasi yang digunakan oleh queue antara lain enqueue adalah untuk
memasukkan data dalam antrian sedangkan dequeue adalah untuk mengeluarkan data dari
queue.
(3)
Gambar 5.3. Diagram Antrian
Berikut akan disajikan bagaimana proses enqueue dan dequeue dalam queue seperti
diagram dibawah ini :
back
Emptyqueue()
Size = 0
Front
back
enqueue(a)
Size = 1 a
front
back
enqueue(b) a b
Size = 2
Front
Gambar 5.4. Proses enqueue
back
dequeue()
Size = 1 b
front
back
dequeue()
Size = 0
Front
Gambar 5.5. Proses dequeue
VI.1. PEMAHAMAN
Tree (pohon) didefenisikan sebagai set (himpunan) node-node atau simpul-simpul dengan edge
(penghubung node) secara langsung antara dua atau beberapa node. Proses tree tidak memiliki prinsip
non rekursif.
Perhatikan diagram di bawah ini yang menunjukkan bentuk pohon secara umum dengan
ketinggian (heigh) dan kedalaman (depth) tertentu sebagai berikut :
a Level 0
Level 1
b c d e
Level 2
h i j
f g
Level 3
k
Root
T1 T2 T3 ... Tn
Pada tree secara otomatis termuat konsep linked list, dimana di antara setiap node
diasumsikan sebagai record / list. Perhatikan diagram berikut ini :
D H
C E G J
Dalam pohon dikenal istilah keseimbangan yaitu jika masing-masing node pada subtree
kiri dan subtree kanan memiliki perbedaan paling banyak satu.
SL = sabling kiri
SR = sabling kanan
SL SR A B
Traversal yang digunakan adalah inorder, preorder, dan postorder. Dari gambar 6.4 di atas diperoleh
informasi sebagai berikut :
Preorder : RAB (kunjungan root sebelum subtree)
Proses perubahan dari inorder ke preorder dan postorder ditunjukkan pada gambar berikut ini :
1 7 2
2 3 1 6 1 5
4 6 3 5 3 7
5 7 2 4 4 6
preorder postorder inorder
Jumlah probe = 4
B
Bila jumlah data = jumlah level disebut perfect binary tree (pohon seimbang) dengan depth adalah log
N dan jika tidak seimbang depth = log N-1, dan untuk lebih jelas perhatikan diagram berikut :
B C
D E F G
Jika jumlah data = N maka jumlah level (L) : untuk batas bawah 2log n + 1 dan batas atas 2log
(n+1) .
Bila jumlah data untuk tiap level : root = level1 dan jumlah node pada tiap level
ke i = 1 .. 2i-1, lengkapnya perhatikan tabel berikut :
Jika tiap level dari binary tree dengan L level penuh atau maksimum maka jumlah node juga maksimum
:
L-1
2 1-1
+2 2-1
+2 3-1
+ .. + 2 L-1 0 1 2
= 2 + 2 + 2 + .. + 2 L-1
= = 2
L
-12i
i=0
Level 0
2
3 i=1 4 Level 1
5 i=3 6 Level 2
i=2
7 i=7 8 Level 3
i=4 i=5 i=6
Selanjutnya juga dalam bentuk implementasi array, perhatikan diagram berikut ini :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 4 - - 5 6 - - - - - - 7 8
Q
Sisip(5,Q) 3 5
Q
Sisip(2,Q) 3 5
2
Q
Sisip(4,Q)
3
2 5
B. Operasi HAPUS
Dapat digambarkan untuk setiap keadaan sebagai berikut :
2 5
b. Hapus node
3 5 3
Q := Q^.kiri
2 5 Dispose(Q^.kiri) 2 4
4 Q^.kiri
3
5 4 2
Terdapat 3
2 5 kemungkinan
2 4 2 5 5
hasilnya
4
4
VI.4. AVL-TREE
AVL (Adelson-Velski-Landis) tree adalah merupakan salah satu subset BST yang selalu
memperhatikan keseimbangan (balance) pohon. AVL tree sering disebut dengan balanced Binary tree.
Keseimbangan berguna untuk menjamin bahwa depth algoritmik dalam worst case atau perubahan-
perubahan yang relatif kecil.
Proses AVL tree dengan BST dimana setiap internal node (node dalam) adalah maksimum jumlah
record kiri (ketinggian sub tree) dan jumlah record kanan (ketinggian subtree kanan) berbeda
maksimum 1 (0, 1). Faktor kesetimbangan yang diterima (kiri, root, kanan) adalah (-1,0,1).
Faktor kesetimbangan dapat dilakukan dengan rotasi, yang pada dasarnya penyeimbangan kembali
dilakukan dengan merotasikan node-node tertentu dalam subtree tersebut berdasarkan harga-harga
faktor ketimbangan tingkat node-node atas dalam subtree.
Contoh 1:AVL tidak seimbang dengan rotasi tunggal sehingga AVL seimbang
10
7
12
10 7
5
5 9 11 15
3 6 9 12
14
3 6 8
8 11 15
14
6
6
4 8
B: 11
A: 3
3 5
7 11
1 4 8 13
1 A
9 13
2 5 7 9 12 14
2
10 12 14
10
B
Contoh 3 : Diberikan data sebagai berikut : 35, 40, 10, 12, 16, 17
Bentuklah BST dan tahap-tahap AVL tree dari data ini.
36
40
10
12
16
17
35 -1 35 -1 35 -1
1 0 2 0 0 0
10 40 10 40 12 40
0 1 0 0
12 12 10 16
0
12
35 -2 16 0
1 0 -1 0
12 40 12 35
0 1 0 0 0
10 16 10 17 40
0
17
VI.5. B-TREE
B-Tree adalah struktur data yang sangat populer untuk pencarian disk bound. Sifat-sifat B-Tree
adalah :
1. Item data disimpan pada leaves
2. Node-node non leaf data sampai ke key M-1 yang merujuk pencarian key I yang merepresentasi key
yang paling kecil dalam subtree i+1
3. Root adalah juga suatu leaf atau yang memiliki anak antara 2 sampai dengan M
4. Semua node non leaf (kecuali root) memiliki anak antara M/2 dan M
5. Semua leaves dengan depth yang sama memiliki anak anatara L/2 dan L untuk setiap L
P0 K1 P1K2 . Pm-1Km-1PmKm
Misalnya dibawah ini ditunjukkan suatu B-Tree dengan order 2 dan 3 level, semua frame berisi 2, 3
atau 4 kecuali root diijinkan item tunggal.
25
10 20 30 40
2 5 7 8 13 14 15 18 22 24 26 27 28 32 35 38 41 42 45 46
Jika pencarian tidak berhasil kita berada dalam salah satu situasi berikut :
1. Ki < X < Ki+1 untuk 1 <= i < m lanjutkan pencarian pada frame pi selanjutnya
2. Km < X Pencarian berlanjut pada frame Pm selanjutnya
SINAR SINURAT, ST STMIK BUDIDARMA
Diktat : KBMI3305 - Struktur Data Hal : 55
3. X < K1 Pencarian berlanjut pada frame P0 selanjutnya
A 20
7 10 15 18 26 30 35 40
B C
Menjadi :
A 20 30
7 10 15 18 22 26 35 40
B C D
Contoh 1:
Buatlah B-Tree dengan sikuensi data sebagai berikut :
20; 40 10 30 15 ; 35 7 26 18 22 ; 5 ; 42 13 46 27 8 32 ; 38 24 45 25 ;
Catatan : tanda ; adalah batas frame.
a. Sisip 20 20
b. Sisip 40 10 30 15 20
10 15 30 40
SINAR SINURAT, ST STMIK BUDIDARMA
c. Sisip 35 7 26 18 22 20 30
Diktat : KBMI3305 - Struktur Data Hal : 56
e. Sisip 42 13 46 27 8 32
10 20 30 40
5 7 8 13 15 18 22 26 27 32 35 42 46
f. Sisip 38 24 45 25
25
10 20 30 40
5 7 8 13 15 18 22 24 26 27 32 35 38 42 45 46
Contoh 2:
Buatlah B-Tree dengan sikuensi data yang akan dihapus sebagai berikut :
25; 45 24 ; 38 32 ; 8 27 46 13 42 ; 5 22 18 26 ; 7 35 15 ;
10 20 30 40
5 7 8 13 15 18 22 24 26 27 32 35 38 42 45 46
Hapus 45 24
10 20 30 40
5 7 8 13 15 18 22 24 26 27 32 35 38 42 45 46
5 7 8 13 15 18 20 26 27 32 35 38 42 46
c. Hapus 8 27 46 13 42
10 22 30
5 7 8 13 15 18 20 26 27 35 40 42 46
d. Hapus 5 22 18 26
10 22
5 7 8 15 18 20 26 30 35 40
e. Hapus 7 35 15
15
7 10 20 30 35 40
f. Data terakhir 10 20 30 40
a b a b c
Saat melakukan penyisipan ada 4 kemungkinan yang perlu diperhatikan antara lain :
1. Pada saat subtree kanan dibuat dan A merupakan key pada frame tersebut, kemudian keturunan B
menjadi sabling (saudara) A, misalnya pointer vertikal menjadi horijontal pointer
A A B
a B a b c
b c
A B
A B C B
a b
C a b c d
A C
c d
a b c d
3. Bila subtree B diproses pada ketinggian tertentu maka pointer A akan merepresentasi keturunan,
kemudian keturunan subtree A diijinkan menjadi saudara B. Dengan demikian frame mempunyai
anggota 3 node sebagai berikut :
B
A B
A C
c
A a b c
a b c
a b
4. Dengan adanya pemotongan tanpa memperhatikan seperti langkah kedua, maka akan
diperoleh sebagai berikut :
B C A B C B
c d a b c d
A A C
a b a b c d
Pencarian dengan cara seperti diatas menunjukkan perbedaan (tidak efektif) apakah proses sepanjang
horijontal dan vertikal (kasus langkah ketiga). Untuk menangani hal tersebut subtree kiri dan kanan
diselesaikan secara intuisi yaitu fisky dengan membuang yang asimetris, sehingga dinamakan
Symetric Binary B-Tree (SBB-Tree).
(LL)
B C A B C B
A A C
A C A B C B
(LR)
B A C
A B A B C B
(RR) B A C
A B A B C B
B A C
(RL)
Contoh :
Deretan data (; adalah tanda pemisah frame (sanpshot)) dimana semua node tersebut berada dalam 1
level disebut hedge.
(1) 1 2 ; 3 ; 4 5 6 ; 7 ;
(2) 5 4 ; 3 ; 1 2 7 6 ;
(3) 6 2 ; 4 ; 1 7 3 5 ;
(4) 4 2 6 ; 1 7 ; 3 5 ;
(1)
1 2 2 2 4 4
1 3 1 3 5 6 1 3
3 5 3 5
4 5 4 2 4 6
(2)
3 5 1 3 5 7
2 6 4 4
(3) 2 3 5 6 7
3 5 1
2 4 6 2 6 2 6
1 4 7 1 3 4 5 7
(4)
K 3 13 23 15 16 26 27 37 47 50
F(K) 4 0 5 4 9 0 1 4 12 4
collision
collision
3. Metode penjumlahan digit yaitu setiap digit dari suatu bilangan dijumlah dan kemudian data tersebut
disimpan pada blok yang sesuai
Contoh :
SINAR SINURAT, ST STMIK BUDIDARMA
Diktat : KBMI3305 - Struktur Data Hal : 66
169 529 225 256
f(K)= 1+6+9 5+2+9 2+2+5 2+5+6
= 16 16 9 13
Collision
Jenis-jenis hashing :
1. Open hashing (hashing terbuka)
Open hash (external hash) adalah suatu table dimana proses pertukaran item data
dengan pointer masing-masing (tidak terpisahkan) tidak terbatas
2. Close hashing (hashing tertutup)
Proses pemetaan data dalam tabel dengan indeks masing-masing, dimana
kelemahannya sering terjadi collision.
Probe adalah suatu proses perbandingan nilai data pertama dengan data lain. Probe
minimum (terbaik) = 1 berarti kompleksitasnya O(N) = 1 dan probe maksimum
(terburuk) = N berarti kompleksitasnya O(N) = N (terurut) dan probe rata-rata = (1 + n)/2
berarti kompleksitasnya O(1+N)/2 = (1 + N)/2 dan probe kegagalan adalah O(N) = 0.
Data : 3 13 23 15 16 26 27 37 47 50
F(key) : 3 0 10 2 3 0 1 11 8 11
Maka :
0 1 2 3 4 5 6 7 8 9 10 11 12 ( 13 blok/bucket )
13 15 3 23 Langkah 1 .. 4
0 1 2 3 4 5 6 7 8 9 10 11 12 ( 13 blok/bucket
13 15 3 16 23 Langkah 1 .. 5
0 1 2 3 4 5 6 7 8 9 10 11 12 ( 13 blok/bucket
13 26 15 3 16 23 Langkah 1 .. 6
0 1 2 3 4 5 6 7 8 9 10 11 12 ( 13 blok/bucket
13 26 15 3 16 27 47 23 37 Langkah 1 .. 9
Misalnya h(x) = y maka h2(x) = (y2 + y) mod B atau hi(x) = (hi-1(x) + P) mod B ; dimana
p = 1,2,3
Hash function mengevaluasi H kemudian mencoba H2+12 ; H2+22 ;H2+32; ; H2+n2 ;
dengan qwadratic probing dapat diselesaikan dilakukan dengan 2 cara :
Cara I :
0 1 2 3 4 5 6 7 8 9
Terdapat 10 blok/bucket
2 3 5 7 11 13 17 19 23 29 Primer 7 blok/bucket
Averflow 3 blok/bucket
Maka h(x) x mod 7 dengan demikian :
h(2) = 2 mod 7 = 2 7 0
h(3) = 3 mod 7 = 3 29 1 Langsung home address
SINAR
h(5) SINURAT,
= 5 mod 7 ST
=5 2 2 STMIK BUDIDARMA
collision
h(7) = 7 mod 7 = 0 3 3
h(11) = 11 mod 7 = 4 collision 11 4
collision 5 5
h(13) = 13 mod 7 = 6 13 6
h(17) = 17 mod 7 = 3
Diktat : KBMI3305 - Struktur Data Hal : 69
Berarti :
Key : 2 3 5 7 11 13 17 19 23 29
Probe (kali) : 1 1 1 1 1 1 2 3 4 1 Total probe = 16 kali
Rata-rata probe = 16/10 = 1,6 2 kali
Collision terjadi sebanyak 6 kali
Cara II :
0 1 2 3 4 5 6 7 8 9
2 3 5 7 11 13 17 19 23 29 Terdapat 10 blok/bucket
11 2 3 13 5 7 17 19
Kasus :
Selesaikan dengan quadratic probing kasus berikut :
Diberikan key-key yang akan diinput dalam tabel hash satu, dua, tiga, empat,
lima, enam, tujuh, delapan, sembilan, sepuluh.
Tunjukkan urutan penempatan key-key tersebut dalam tabel dan berapa jumlah collision
yang terjadi pada masing-masing penempatan key.
Jawab :
Sebelum melakukan fungsi rehashing terhadap keseluruhan hasil ordinal huruf-huruf dari
masing-masing item data diatas maka dapat dilakukan dengan fungsi floor (pendekatan
pembulatan nilai ke bawah) pada fungsi hash H(x), seperti pada tabel berikut :
0 Sepuluh
1 Dua
2
3
4
5 Sembilan
6 Enam
7 Tujuh
8
9
10 Lima
11 Saturday
12 Delapan
13
14 Tiga
15
16 empat Gambar 7.5. Rehashing
VII.4. KOMPRESI
Kompresi adalah suatu metode penghematan penyimpanan file dalam suatu media
simpan. Dalam mengkompresi suatu file ada banyak metode-metode yang dapat
digunakan dan salah satu yang akan dibahas adalah Algoritma Huffman.
Algoritma Huffman dipakai untuk mengkonstruksi kode prefix yang optimal,
yang memiliki proses penggabungan yang berulang-ulang terhadap bobot dua item data
yang terendah. Misalnya w1 dan w2 dua buah data yang berbobot paling kecil diantara
w1, w2, w3, , wn maka akan dibentuk tree w1+w2, w3, w4, , wn sehingga w1+w2
akan membentuk subtree sebagai berikut :
W1 W2
Contoh :
2) dipilih 2 buah elemen data yang terkecil yaitu s dan nl dengan jumlah 4 dengan
membentuk subtree T1
4
T1
10 15 12 4 13 3 1
a e i t sp s nl
3) Kemudian dua buah elemen data lainnya dibandingkan untuk membentuk subtree
berikutnya yaitu T1 dan t
8
T2
4 4
T1 t
10 15 12 13 3 1
a e i sp s nl
18
T3
8 10
T2 a
4 4
T1 t
15 12 13 3 1
e i sp s nl
5) Perhatikan bahwa e=15, I=12, sp=13, dan t3=18 maka yang digabung adalah I dan sp
18
T3
8 10
T2 a
4 4
25
T1 t
T4
15 12 13 3 1
e i sp s nl
15
18
T3 e
8 10
T2 a
4 4
25
T1 t
T4
12 13 3 1
i sp s nl
0 1 0 1
15 12 13
18
T3 e i sp
0 1
8 10
T2 a
0 1
4 4
T1 t
0 1
3 1
s nl
Syarat pemberian nilai digit pada cabang kiri bernilai 0 dan cabang kanan bernilai 1
Berdasarkan pohon Huffman yang terbentuk (Gambar 7.7) maka dapat dicatat coding
untuk masing-masing karakter, sebagai berikut :
Misalkan V = { v0, v1, v2, v3, v4, v5, v6 } dengan 12 edge diperoleh :
(v0, v1, 2), (v0, v3, 1), (v0, v1, 3), (v1, v4, 10)
E = (v3, v4, 2), (v3, v6, 4), (v3, v5, 8), (v3, v2, 2)
(v2, v0, 4), (v3, v4, 2),(v4, v6, 6), (v6, v5, 1)
Berdasarkan gambar diatas bahwa vertex yang adjacent terhadap v3 adalah v2, v4, v5,
v6 dan |V| = 7 dan |E| = 12 dan |S| merepresentasikan size himpunan S
Suatu path dalam graph adalah sikuensi dari vertex-vertex : w1, w2, , wn
sedemikian sehingga (wi, wi+1) E untuk 1<= i < n
Length (panjang) dari suatu path adalah sejumlah node pada suatu path yaitu n-1, dan
sering disebut dengan unweigted path length yaitu sejumlah biaya pada edge dalam path.
Misalnya :
Path v0 sampai v5 adalah v0, v3, v5. Panjang path adalah 2 edge dan weighted path
length adalah 9 yang kebetulan path terpendek antara v0 dan v5.
Simple path (path sederhana) adalah path yang mana semua vertex-vertex jelas,
kecuali awal dan akhir boleh sama.
Cycle dalam suatu digraph adalah suatu path dengan panjang paling sedikit 1
sedemikian sehingga w1 = wn; Suatu directed acycle graph (DAG) kadang-kadang
didasarkan pada suatu penggabungan, dengan asumsi bahwa dalam directed graph (digraph
= graph berarah) tidak boleh ada cycle.
Contoh 1: 581
A
215
A B C D E
307 353
A - 215 581 307 353 C 420 B
B 215 - 420 181 413 921
C 581 420 - 162 921 162 413
D 307 181 162 - 161 D
181
E
E 353 413 921 161 - 161
SPP dapat diselesaikan dengan Algoritma Djikstra pada graph adjacent diats dari C ke E
(undirected = tidak berarah).
Maka path terpendek dengan Algoritma Djikstra adalah {C,D.E} = 323 (total jarak}
Contoh 2 :
30
B C
50 200
40 5
A 75 D G
20 80
100
40
E F
60
Cari SPP dari satu vertex ke seluruh vertex lain dengan Algoritma Djikstra,
K
420
215
M M
L 581 413
181 921
M
N 353 162
307
M M
161
P M
(N P) = 161 { (N,P) }
(N M) = 162 { (N,P), (N,M) }
(N L) = 181 { (N,P), (N,M), (N,L) }
(L K) = 215 { (N,P), (N,M), (N,L), (L,K) }
Iterasi stop, karena setiap penambahan edge akan mengakibatkan proses penelusuran
(trace) membentuk suatu siklus (cycle).
N N N
1. Data structures and problem solving using java; Mark Allen Weiss ; Addison Wesley ;
1998
2. An Introduction to Data Structures and Algorithm with Java; Gleen Rowe; Prentice
Hall International Edition ; 1998
3. Data Structures and Program Design ; Robert L. Kruse ; Prentice Hall of India Privated
Limited ; 1991
4. Data Structures, Algorithms and Program Style Using C ; James F. Korst; Leonard J.
Garrett ; PWS-Kent Publishing Company ; 1988
5. Data structures, Theory and Problem ; Seymour Lipschutz ; McGraw Hill Book
Company ; 1986
6. Algorithms + Data Structures = Program ; Niklaus Wirth ; Prentice Hall of India
Private Limited; 1991
7. Computer Algorithms, Introduction to Design and Analysis, Second Edition, Sara
Baase ; Addition Wesley Publishing Company ; 1988
8. Problem Solving and Structured Programming in Pascal, Second Edition, Iliot B.
Koffman ; Addition Wesley Publishing Company ; 1985
9. Turbo Pascal , Reference Manual; Scotts Valley ; Borland International ; 1985
10. Turbo Pascal , Jilid 1; Jogianto H.M. ; Andi Offset Yogyakarta ; 1989
11. Turbo Pascal , Jilid 2; Jogianto H.M. ; Andi Offset Yogyakarta ; 1989
12. Dasar-Dasar Pemrograman Pascal, Teori dan Program Terapan ; Insap P. Santoso, Ir,
M.Sc ; Andi Offset Yogyakarta ; 1987
13. Belajar Sendiri Pemrograman Dengan Turbo Pascal 7.0 ; Ediman Lukito ; Elex Media
Komputindo ; 1993
14. Struktur Data (transparansi) ; Universitas Bina Nusantara ; Jakarta ; 2001