Professional Documents
Culture Documents
TIPE DATA
Struktur data adalah suatu koleksi atau kelompok data yang dapat dikarakterisasikan
oleh organisasi serta operasi yang didefinisikan terhadapnya.
• Struktur Data
• Non Linier : Binary Tree, Binary Search Tree, General Tree, Tree,
G
§ INTEGER
Contoh : 27 DIV 4 = 6
Selain itu terdapat operasi MOD (Modulo) adalah sisa dari pembagian
Contoh : 27 MOD 4 = 3
Operator yang bekerja terhadap sepasang integer (operand) disebut Binary Operator.
Sedangkan operator yang hanya bekerja terhadap satu operand saja disebut Unary
Operator.
§ REAL
Data numerik yang bukan termasuk integer, digolongkan dalam jenis data real. Ditulis
menggunakan titik desimal (atau koma desimal). Dimasukkan ke dalam memori komputer
memakai sistem floating point, disebut Scientific Notation.
Penyajiannya terdiri dari : mantissa (pecahan) dan eksponen.
Contoh :
Di dalam sistem desimal, 123000 = 0.123 * 106
di sini 0.123 adalah mantissa atau pecahan, sedangkan 6 adalah eksponennya.
Secara umum suatu bilangan real X dituliskan M * RE
di sini : M dijadikan pecahan, R adalah radixnya dan E merupakan eksponennya.
§ BOOLEAN
Disebut juga jenis data logical. Anggota { true atau false}.
• Operator AND akan menghasilkan nilai true, jika kedua operand bernilai true.
• Operator OR akan menghasilkan nilai true, jika salah satu operand bernilai true
• Operator NOT merupakan “precedence” dari operator AND dan OR.
Dalam suatu ekspresi yang tidak menggunakan tanda kurung, operator NOT harus dievaluasi
sebelum operator AND dan OR.
B. Operator Relasional, yaitu : >, <, >=, <=, <> dan =
Contoh : 6 < 8 = True
9 < 8 = False
§ KARAKTER
Elemen dari suatu himpunan yang terdiri atas bilangan, abjad dan simbol khusus.
(0,1,...,8,9, A, B, ..., Y,Z, +, -,*,Ö, ...}
§ STRING
Barisan hingga karakter yang dibentuk oleh suatu kumpulan dari karakter.
Karakter yang digunakan untuk membentuk suatu string disebut alfabet. Dalam penulisannya,
suatu string berada dalam tanda “aphosthrope”.
Contoh :
Misal diberikan himpunan alfabet A = {C,D,1}.
String yang dapat dibentuk dari alfabet di atas di antaranya : ‘CD1’,’CDD’,’DDC’,’CDC1’,...
dan sebagainya, termasuk “null string” atau “empty string”
Himpunan tak hingga dari string yang dibentuk oleh alfabet A disebut VOCABULARY, Notasi
: VA atau A*
Jika suatu string dibentuk dari alfabet {0,1}, maka string yang terbentuk disebut dengan “Bit
String”.
OPERASI Operator
Jumlah karakter dalam string LENGTH
Gabungan 2 buah string CONCAT
Sub bagian dari string SUBSTR
Menyisipkan string ke dalam string yang lain INSERT
Menghapus karakter dalam string DELETE
LENGTH
Nilai dari operasi ini adalah suatu integer yang menunjukkan panjang dari suatu string .
Notasi : LENGTH(S) = N (integer)
di sini S = String, N = integer
Contoh :
Maka LENGTH(S) = N
Maka LENGTH(S) = 15
Operasi ini bekerja terhadap dua string dan hasilnya merupakan resultan dari kedua string
tersebut.
Jika S1 dan S2 masing-masing adalah suatu string, maka bentuk operasi CONCATENATION
dinotasikan dengan : CONCAT(S1, S2).
Contoh :
Misal S1 = ‘a1a2 ... aN’ dan S2 =‘b1b2 ... bM’
Maka CONCAT(S1,S2) = ‘a1a2 ... aNb1b2 ... bM’
String S1 = "Sistem"
String S2 = "Informasi"
CONCAT(S1, S2)= "SistemInformasi"
LENGTH(CONCAT(S1, S2)) = 15
Contoh :
Diberikan S = ‘a1a2 ... aN’ ; i = 2 ; j= 4
Maka SUBSTR(S,i,j) = SUBSTR(S,2,4) =‘a2a3a4a5’
· String S = "Sistem Informasi"
SUBSTR(S,i, j) , i = 4 j = 8
• String S = "Sistem"
SUBSTR(S,1,3) = "Sis"
LENGTH(SUBSTR(S,1,3)) = 3
• String S = "Informasi"
SUBSTR(S,4,5) = "ormas"
LENGTH(SUBSTR(S,4,5)) = 5
Catatan :
1. LENGTH(SUBSTR(S,i,j)) = j
2. SUBSTR(CONCAT(S1,S2),1,LENGTH(S1)) = S1
3. SUBSTR(CONCAT(S1,S2),LENGTH(S1)+1,LENGTH(S2)) = S2
INSERT
Operasi ini adalah untuk menyisipkan suatu string ke dalam string lain.
Bentuk umumnya adalah :
INSERT(S1,S2,i). S1 dan S2 masing-masing adalah suatu string dan i adalah posisi awal S2
pada S1.
Contoh :
Misalkan : S1 = ‘a1a2 ... aN’
S2 = ‘b1b2 ... bM’
INSERT(S1, S2,3) = ‘a1a2b1b2 ... bMa3a4... aN’
String S1 = "Sistem"
String S2 = "Informasi"
INSERT(S1,S2,4) = “SisInformasitem”
INSERT(S2,S1,4) = “InfSistemormasi”
DELETE
Operasi ini digunakan untuk menghapus sebagian karakter dalam suatu string.
i = 4, j = 9
DELETE(S,i,j) = “Sismasi”
DELETE(S,j,i) = “Sistem Imasi”
• String S = “SistemInformasi”
DELETE(S, 4, 5) = “Sisformasi”
DELETE(S, 5, 4) = “Sistformasi”
• § PASCAL
• § COBOL
DATA DIVISION
01 Count PICTURE S999.
01 Flda PICTURE X.
88 Switch VALUE ‘Y’.
01 Betha PICTURE X.
01 Alamat PICTURE X(25).
MAPPING KE STORAGE
• § INTEGER
Bentuk mapping ke storage dari integer dapat dilakukan dengan beberapa cara, yaitu :
1. Skema Sign and Magnitude
2. Skema One’s Complement
3. Skema Two’s Complement
Contoh :
+5 ê + 101 atau 5 ê 101
-5 ê - 101
Jika x bilangan bulat non negatif maka x’ bilangan binary negatif dari x sedemikian sehingga
x + x’ = R
R = 2N
N = jumlah digit maksimum
x’ = R - x
Contoh :
Bila N = 4, maka R = 24 = 16
x = 5 ê 0101
x’ = R - x
= 16 - 5 = 11 ê 1011 (-5)
Jika x bilangan bulat non negatif maka x’ bilangan binary negatif dari x sedemikian sehingga
x + x’ = R
R = 2N - 1
N = jumlah digit maksimum
x’ = R – x
Contoh :
Bila N = 4, maka R = 24 - 1= 15
x = 5 ê 0101
x’ = R - x
= 15 - 5 = 10 ê 1010 (-5)
Catatan
Untuk R = 2N dan R = 2N - 1, bilangan bulat yang dapat disimpan dalam storage untuk ke-2
cara ini adalah :
2 (N-1) - 1
Untuk R = 24, bilangan bulat terbesar = 23 -1, maka r = 24 merepresentasikan bilangan dari -7
sampai dengan +7
SIGN & TWO’S ONE’S
• § KARAKTER
Ada banyak skema yang digunakan untuk merepresentasikan karakter dalam storage. Pada
umumnya skema yang paling banyak digunakan adalah :
1. Extended Binary Coded Decimal Interchange (EBCDIC)
Digunakan kode 8 bit untuk menyatakan sebuah karakter. Jika dihitung, kemungkinan
kombinasi seluruhnya : 28 = 256.
• § STRING
Untuk mengetahui bentuk mapping pada storage dari suatu string, perlu diketahui beberapa
hal yang menyangkut ruang untuk string yang bersangkutan antara lain :
- letak posisi awal (start) dan posisi akhir (terminal)
- suatu pointer yang menunjukkan lokasi pada storage
Ada tiga cara yang umum digunakan untuk mapping suatu string ke dalam storage.
Misal diberikan dua string, yaitu :
S1 = ‘ABCDEFG’ dan S2 = ‘BCD’
m CARA 1
Menggunakan tabel informasi :
- nama string (NAME)
- alamat awal (START)
- panjang string (LENGTH)
PTR2S
m CARA 2
Menggunakan tabel informasi :
- nama string (NAME)
- alamat awal (START)
- alamat akhir (TERM)
NAME START
STRING1 PTR1S
STRING2 PTR2S
Penyimpanannya :
ABCDEFG#BCD#
PTR1S PTR2S
Suatu string yang direpresentasikan dalam bentuk packed terbagi atas beberapa word.
Banyaknya karakter untuk masing-masing word tergantung dari kode yang digunakan oleh
mesin (bit-nya).
Secara umum jumlah word yang digunakan untuk merepresentasikan string S dalam storage
dengan K karakter per word adalah :
LENGTH(S)
K
Contoh :
Misal diberikan string S =“ManajemenInformatika”, direpresentasikan dalam 4 karakter per
word dalam bentuk packed. Maka secara fisik dapat digambarkan :
Jumlah word : 5
Jumlah karakter/word : 4
Sedangkan cara unpacked, setiap word terdiri hanya satu karakter, berarti jumlah word yang
diperlukan untuk merepresentasikan suatu string S adalah : LENGTH(S)
Contoh :
Diberikan string S = “Gunadarma”. Representasinya dalam bentuk unpacked adalah :
LENGTH(S) = 9
G u n a d a r m a
BAB 2
ARRAY
Subskrip atau index dari suatu elemen menunjukkan posisi/urutan elemen dalam array.
BENTUK UMUM
Misal : Array N dengan tipe data T dan subskrip bergerak dari L sampai U, maka array N
dapat ditulis : N(L:U)
Misalkan : Hasil pencatatan temperatur suhu ruangan dalam 1 hari (24 jam)
1 2 3 24
28 30 29 ... 30
Deklarasi :
PASCAL
Jika array B terdiri dari M elemen, yang setiap elemennya terdiri dari suatu array dengan N
elemen, maka array B dapat digambarkan sebagai berikut :
1 2 3 ... N
L2 U2
L1 1
2
.
U1
BENTUK UMUM
Misal :
Array B dengan tipe data T, subskrip baris dari L1 sampai U1, subskrip kolom dari L2 sampai
U2, ditulis sebagai berikut :
B(L1:U1,L2:U2)
Misal : Menyajikan nilai ujian dari 100 mahasiswa tingkat 2 sebanyak 8 mata kuliah.
1 2 3 ... 100
L2 U2
L1 1
A C A
2
U1
8 B
Disimpan dalam array NILAI sebagai berikut :
NILAI(1:8, 1:100)
Deklarasi :
PASCAL
Var NILAI : array[1..8, 1..100] of char;
BASIC
Dim NILAI(8,100)
COBOL
01. TABEL-NILAI
02. BRS OCCURS 8 TIMES
03. KOLOM OCCURS 100 TIMES PIC X.
DIMENSI SATU
Alamat awal dari memori yang dialokasikan bagi array.
Alamat awal dari array dinyatakan dengan B (Base Location), dan setiap elemen dari array
menduduki S byte.
Alamat awal dari array dengan elemen ke-I adalah :
B + (I -L) * S
DIMENSI DUA
L2 U2
1 2 3 4 5 6
L1 1
2
AA(2,4)
3
U1 4
AA(2,4) I = 2, J = 4
AA(2,4)
Kolom
1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
Baris 1 2 3 4
AA(2,4)
Baris
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
Kolom 1 2 3 4 5 6
Adalah suatu array yang setiap elemennya merupakan tipe data array juga yang merupakan
array dimensi dua.
Contoh :
Penyajian data mengenai banyaknya mahasiswa dari 20 perguruan tinggi di Jakarta,
berdasarkan tingkat (1 sampai 5), dan jenis kelamin (pria atau wanita). Misalkan array
tersebut dinamakan MHS. Ambil subskrip pertama, tingkat = 1, 2, ..., 5; subskrip kedua, jenis
kelamin (pria = 1, wanita = 2), dan subskrip ketiga, perguruan tinggi adalah K = 1, 2, ..., 20.
Jadi MHS(4,2,17) menyatakan jumlah mahasiswa tingkat 4, wanita, dari perguruan tinggi 17.
Pengertian cross-section pada array dimensi banyak, adalah sama seperti pada array dimensi
dua.
Misal :
MHS(4,*,17) = jumlah mahasiswa tingkat 4 dari perguruan tinggi 17 (masing-masing untuk
pria dan wanita).
MHS(*,*, 3) = jumlah mahasiswa untuk masing-masing tingkat, pria dan wanita, dari
perguruan tinggi 3.
Contoh :
0 1 2 0 3
A= 3 4 5 AT = 1 4
2 5
1. Upper Triangular
1. Lower Triangular
Array berukuran 6 x 6
x x x x x x x 0 0 0 0 0
0 x x x x x x x 0 0 0 0
0 0 x x x x x x x 0 0 0
0 0 0 x x x x x x x 0 0
0 0 0 0 x x x x x x x 0
0 0 0 0 0 x x x x x x x
Jumlah baris (N) besar, elemen 0 tidak perlu disimpan dalam memori.
Pendekatan :
1. Pelinieran array
2. Menyimpan bagian/elemen ¹ 0.
Total elemen ¹ o tidak lebih dari : (Untuk upper dan lower triangular)
N
S I = 1/2 N(N + 1)
I=1
Program dengan lebih dari 1 array triangular kita dapat menyimpan 2 array sekaligus.
Contoh 1 :
Array A (upper) : N x N
ÕC:NxN
Misal :
Array A (upper) : 3 x 3
B (lower) : 2 x 2
1 2 3 7 0
A= 0 4 5 B= 8 9
0 0 6
1 2 3
C= 7 4 5
8 9 6
Contoh 2 :
Array A (upper) : N x N
B (lower) : N x N
7 1 2 3
C= 8 9 4 5
11 12 13 6
Misalkan sekarang ada 2 array, sama-sama Upper Triangular, yakni array A dan B. Kita dapat
menyimpan bersama-sama dengan melakukan transpose terhadap salah satu array tersebut,
misal A menjadi AT. (Lower Triangular).
SPARSE ARRAY
Suatu array yang sangat banyak elemen nol-nya dikenal sebagai sparse array.
Contoh :
1 2 3 4 5 6 7 8 9 10
1 0 0 0 0 1 0 0 2 0 0
2 0 1 0 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 4 0 0 0 0 0 0
6 0 0 0 0 0 0 0 2 0 0
7 0 0 0 0 0 0 0 0 0 0
8 2 1 0 0 0 0 0 0 0 0
Keuntungan :
Menyimpan elemen ¹ 0 saja, disimpan sebagai TRIPEL, dengan bentuk : (sub baris, sub
kolom, nilai elemen)
TRIPEL tersebut disimpan sebagai vektor.
Array disimpan sebagai TRIPEL
Kekurangan :
Misal :
1. V(2) diubah menjadi 0, urutan V(3) - V(8) ® V(2) - V(7)
2. elemen dengan subskrip (4,6) menjadi 7
V(5) ® (4,6,7), urutan bergeser V(5) - V(8) ® V(6) - V(9).
BAB 3
STACK(TUMPUKAN)
LINIER LIST
Suatu struktur data umum yang berisi suatu kumpulan terurut dari elemen; jumlah elemen di
dalam list dapat berubah-ubah.
Linier list A yang terdiri dari T elemen pada waktu t, dinotasikan sebagai : A = [ A1, A2, ..., AT]
Suatu elemen dapat dihilangkan/dihapus dari sembarang posisi dalam linier list, dan dapat
pula dimasukkan elemen baru sebagai anggota list.
Contoh :
1. File, dengan elemennya berupa record
2. Buku telepon
3. Stack
4. Queue
5. Linear link list
STACK
Stack adalah suatu bentuk khusus dari linier list, dengan operasi penyisipan dan
penghapusan dibatasi hanya pada satu sisinya, yaitu puncak stack (TOP).
Jika ada NOEL elemen didalam stack, maka elemen ke NOEL merupakan elemen puncak
(TOP).
• CREATE
Jadi : NOEL(CREATE(S)) = 0
• ISEMPTY
• PUSH
adalah operator yang menambahkan elemen E pada puncak stack S. Hasilnya merupakan
stack yang lebih besar.
PUSH(E,S). E ditempatkan sebagai TOP(S).
• POP(stack)
adalah operator yang menghapus sebuah elemen dari puncak stack S. Hasilnya merupakan
stack yang lebih kecil.
TOP-PTR
® 100 S Keterangan :
·
· STACK S
· TOP-PTR : subskrip dari elemen TOP(S) dari stack.
1
COBOL
PASCAL
VAR S : STACKSTRUCT;
PUSH
POP
IF TOP-PTR > 0
THEN MOVE S(TOP-PTR) TO EOFF
COMPUTE TOP-PTR = TOP-PTR - 1
ELSE Underflow condition
PUSH
POP
APLIKASI STACK
2. NOTASI POSTFIX
ALGORITMA
Amati barisan dari kiri ke kanan
1. Jika ‘(‘, maka PUSH ke dalam stack.
2. Jika ‘)’, POP elemen dalam stack sampai simbol ‘(‘. Semua di POP merupakan output
kecuali ‘(‘ tadi.
3. Jika simbol operand, langsung merupakan output.
4. Jika simbol operator, maka :
Jika elemen TOP stack dengan level >= maka POP sebagai output teruskan sampai
‘(‘.
elemen TOP <, operator yang diamati di PUSH ke dalam stack.
5. Bila ‘;’ kita POP semua elemen dalam stack hingga hampa.
APLIKASI STACK
Notasi Postfix
Contoh :
Notasi Infix : ((A+B) * C/D+E^F)/G;
Simbol 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
yang ( ( A + B ) * C / D + E ^ F ) / G ;
diamati
TOP dari + + ^ ^
STACK
( ( ( ( * * / / + + + +
( ( ( ( ( ( ( ( ( ( ( ( ( ( / /
OUTPUT A B + C * D / E F ^+ G /
Soal :
1. A * B - (C + D) -(E - F) + F/H ^ I;
2. ((B * C) + C/D ^ F) + G;
3. A ^ B * C - D + E/F / (G + H);
ALGORITMA PENYISIPAN
Terdiri dari :
Semua algoritma diasumsikan bahwa Linked List tersimpan di dalam memori dalam bentuk
dari variabel ITEM menyatakan informasi baru yang akan ditambahkan ke dalam list. Karena
semua Algoritma Penyisipan kita tersebut membutuhkan simpul dari list AVAIL, maka selalu
mengandung langkah :
1. Memeriksa ruang bebas dari list AVAIL, kalau ternyata tidak ada lagi, yakni dalam hal
ini AVAIL = NULL, Algoritma mengirim pesan OVERFLOW.
2. Pemindahan simpul pertama dari list AVAIL, menggunakan variabel NEW.
Pemindahan ini melalui sepasang statement
NEW := AVAIL
AVAIL := LINK(AVAIL)
1. Menyalin informasi baru tersebut ke dalam simpul baru, atau dengan perkataan lain,
memakai statement
INFO(NEW) := ITEM
NEW
• ·
AVAIL
• · FREE STORAGE LIST
ITEM • · • · • · … x
Gambar 15a
PENYISIPAN PADA BAGIAN AWAL LIST
Linked list tidak perlu terurut dan penyisipan tidak harus di suatu posisi tertentu. Maka posisi
termudah untuk memasukkan simpul baru adalah di bagian awal list.
ALGORITMA
1. [Apakah Overflow?] Jika AVAIL = NULL, maka tulis OVERFLOW, dan Exit.
2. [Memindahkan simpul pertama dari list AVAIL.]
START
• ·
• · • · … x
NEW
• ·
ITEM • ·
Gambar 15b
Contoh :
Pandang list pada Gambar 7 yang lalu.
Misalkan angka 75 akan disisipkan pada awal dari List Geometri.
Dengan menggunakan algoritma di atas, perhatikan bahwa ITEM =75, INFO = TEST,
dan START = GEOM.
TEST LINK
1 16
2 74 14
3 1
ALG 11 4 82 0
5 84 12
6 78 0
7 74 8
GEOM 9 8 100 13
9 75 5
10 3
11 88 2
12 62 7
AVAIL 10 13 74 6
14 93 4
15 0
16 15
Gambar 16
Pandang bahwa nilai dari LOC, yaitu lokasi dari simpul A di dalam linked list, atau nilai LOC =
NULL. Berikut ini adalah Algoritma untuk menyisipkan ITEM ke dalam list, tepat sesudah
simpul A, atau jika LOC = NULL, maka ITEM disisipkan sebagai simpul pertama dari list.
Misalkan N adalah simpul baru, yang lokasinya adalah NEW. Jika LOC = NULL, maka
penyisipan dikerjakan seperti pada algoritma yang lalu. Dalam hal lain, seperti terlihat pada
gambar 9, jadikan N menuding simpul B (simpul yang sebelumnya mengikuti simpul A),
dengan menggunakan statement
LINK[NEW] := LINK[LOC]
Algoritma : INSLOC(INFO,LINK,START,AVAIL<LOC<ITEM)
{Algoritma ini dimaksudkan untuk menyisipkan ITEM, sehingga mengikuti simpul dengan
lokasiLOC atau menyisipkan ITEM sebagai Simpul pertama, bila LOC = NULL.
NEW := AVAIL
AVAIL := LINK[AVAIL]
Misalkan ITEM akan disisipkan ke dalam Linked List terurut LIST. ITEM harus disisipkan di
antara simpul A dan B yang berturutan sedemikian sehingga
INFO(A) < ITEM < INFO(B)
Prosedur untuk mencari lokasi simpul A, yakni mencari lokasi dari simpul terakhir dari List
yang nilainya kurang dari ITEM. Lakukan traversal list, pergunakan variabel penuding PTR,
dan bandingkan ITEM dengan INFO(PTR) pada masing-masing simpul. Selama traversal,
jaga jejak lokasi simpul sebelumnya dengan menggunakan variabel penuding SAVE (Gambar
17). Maka SAVE dan PTR ter-update dengan statement
SAVE := PTR dan PTR := LINK[PTR]
• · • · • · • · • · x
Gambar 17
Traversal dilanjutkan selama INFO[PTR] < ITEM, atau akan berhenti saat ITEM <=
INFO[PTR]. Kemudian PTR menuding ke simpul B, maka SAVE berisi lokasi dari simpul A.
Kasus bahwa list adalah hampa, dan ITEM < INFO[START], sehingga LOC = NULL ditangani
sendiri, karena tidak mengandung variabel SAVE.
Prosedur : FINDA (INFO, LINK, START, ITEM, LOC)
{Prosedur ini akan menemukan lokasi LOC dari simpul terakhir dalam list terurut, sedemikian
sehingga INFO[LOC] < ITEM, atau menjadikan LOC = NULL}
1. [List hampa?] Jika START = NULL, maka LOC := NULL, dan Return.
2. [Kasus khusus?] Jika ITEM < INFO[START], maka LOC := NULL, dan Return.
3. SAVE := START dan PTR := LINK[START]. [Mengawali Penuding]
4. Ulangi langkah 5 dan 6 sementara PTR <> NULL.
1. Jika ITEM < INFO[PTR], maka :
1. LOC := SAVE
2. Return.
Sekarang kita mempunyai Algoritma untuk menyisipkan ITEM ke dalam linked list terurut List,
dengan memanfaatkan 2 prosedur terakhir.
1. [Gunakan Prosedur FINDA untuk mencari lokasi dari simpul sebelum ITEM]
1. [Gunakan Algoritma INSLOC untuk menyisipkan ITEM sesudah simpul dengan lokasi
LOC]
1. Exit.
Contoh :
Perhatikan list yang terurut secara alfabetik dari para Pasien pada Gambar 6 yang lalu.
Pandang bahwa Jones akan disisipkan ke dalam List tersebut. Gunakan Algoritma INSSRT di
atas, yang pada hakikatnya melaksanakan prosedur FINDA, dan kemudian Algoritma
INSLOC. Perhatikan bahwa ITEM = Jones, dan INFO = BED.
1. Exit
Gambar 18 menunjukkan struktur data sesudah Jones disisipkan ke dalam List. Di sini hanya
3 penuding yang berubah, yakni AVAIL, LINK[10] dan LINK[8].
BED LINK
START 5 1 Kirk 7
2 6
3 Dean 11
4 Maxwell 12
5 Adams 3
AVAIL 2 6 0
7 Lane 4
8 Green 10
9 Samuels 0
10 Jones 1
11 Fields 8
12 Nelson 9
Gambar 18
Misalkan simpul N adalah simpul dari List yang terletak di antara simpul A dan simpul B
(Gambar 19a). Simpul N tersebut akan dihapus dari List. Diagram skematik dari penghapusan
terlihat pada Gambar 19b.
Penghapusan terjadi begitu nextpointer dari A berubah menuding ke B. Dalam penghapusan
ini, kita harus mengingat alamat dari simpul A, simpul pendahulu dari simpul yang akan
dihapus tersebut.
Gambar 19 tidak memperlihatkan fakta bahwa kita melakukan penghapusan simpul N, dan
akan memulangkan ruang memori kepada list AVAIL.
Diagram skematik yang lebih tepat terlihat pada Gambar 20. Perhatikan bahwa 3 field
penuding berubah, yakni :
START
• ·
START
• ·
Gambar 19
1. Penghapusan simpul N sebagai simpul pertama dalam list. Dalam hal ini, START akan
menuding ke simpul B.
2. Penghapusan simpul N sebagai simpul terakhir dari list, simpul A akan berisi penuding
NULL.
START
• ·
AVAIL
• ·
• · • · • · … x
Gambar 20
Contoh :
Perhatikan list Pasien pada Gambar 18. Misalkan Pasien Green sudah diperbolehkan pulang,
maka BED[8] sekarang menjadi kosong. Agar linked list tersebut tetap terjaga, maka perlu
dilakukan perubahan terhadap beberapa field penuding, yakni sebagai berikut :
Dari perubahan pertama, Fields yang tadinya mendahului Green, sekarang menuding ke
Jones, yang tadinya mengikuti Green. Preubahan kedua dan ketiga akan menambah jumlah
ranjang kosong baru pada list AVAIL. Ditekankan bahwa sebelum membuat penghapusan,
harus mencari simpul BED[11], yang tadinya menuding ke simpul yang dihapus, BED[8].
BED LINK
START 5 1 Kirk 7
2 6
3 Dean 11
4 Maxwell 12
5 Adams 3
AVAIL 8 6 0
7 Lane 4
8 2
Samuels 0
10 Jones 1
11 Fields 10
12 Nelson 9
Gambar 21
ALGORITMA PENGHAPUSAN
1. Penghapusan simpul sesudah suatu simpul yang diketahui.
2. Penghapusan simpul yang diketahui mempunyai informasi ITEM.
LINK[LOC] := AVAIL
AVAIL := LOC
LOC
• · Node N
• ·
AVAIL
• ·
Free-storage list
• · • · • · … x
Gambar 22
START
• ·
Gambar 23
LINK[LOCP] := LINK[LOC]
START LOCP LOC
• · • · • ·
• · • · • · • · • · x
Node N
Gambar 24
{Algoritma ini dimaksudkan untuk menghapus dari suatu linked list, simpul N pertama yang
berisi informasi ITEM}
1. [Gunakan Prosedur FINDB, untuk mencari lokasi dari N dan simpul pendahulunya]
1. Jika LOC = NULL, maka : Tulis : ITEM tidak dalam list, dan Exit.
2. [Hapus simpul]
1. Exit.
Header linked list adalah suatu list yang mengandung suatu simpul khusus yang terletak
pada bagian awal dari list yang disebut simpul header. Berikut ini 2 jenis header linked list
yang biasa digunakan yakni :
1. Grounded Header List : header list yang simpul terakhirnya berisi penuding NULL
1. Circular Header List : header list yang simpul terakhirnya menuding ke simpul header
dari list tersebut.
BAB 6
GRAF
Graf adalah :
♦ Himpunan V (Vertex) yang elemennya disebut simpul (atau point atau node atau titik)
♦ Himpunan E (Edge) yang merupakan pasangan tak urut dari simpul, anggotanya disebut
ruas (rusuk atau sisi)
Notasi : G(V,E)
Contoh 1 :
Graf G(V,E) dengan :
1. V terdiri dari 4 simpul, yaitu simpul A, B, C dan D
2. E terdiri dari 5 ruas, yaitu e1 = (A, B) e2 = (B, C) e3 = (A, D)
e4 = (C, D) e5 = (B, D)
A e3 D
• •
e1 e5 e4
• •
B e2 C
Banyak simpul disebut ORDER, banyak ruas disebut SIZE dari graf.
Graf yang lebih umum disebut Multigraf
Contoh 2 :
Graf G(V,E) dengan :
1. V terdiri dari 4 simpul, yaitu simpul A, B, C dan D
2. E terdiri dari 6 ruas, yaitu e1 = (A, C) e2 = (A, A) e3 = (A, D)
e4 = (C, D) e5 = (B, C) e6 = (B, C)
A e2 e3 D
• •
e1 e4
e5
• •
B e6 C
Di sini ruas e2 kedua titik ujungnya adalah simpul yang sama, yaitu simpul A, disebut Gelung
atau Self-Loop. Sedangkan ruas e5 dan e6 mempunyai titik ujung yang sama, yaitu simpul B
dan C, disebut Ruas Berganda atau Ruas Sejajar.
Suatu graf yang tidak mengandung ruas sejajar ataupun self-loop disebut Graf Sederhana
atau Simple Graf.
Suatu graf G’(V’,E’) disebut subgraf dari G(V,E), jika V’ himpunan bagian dari V dan E’
himpunan bagian dari E.
Jika E’ mengandung semua ruas dari E yang titik ujungnya di V’, maka G’ disebut subgraf
yang direntang oleh V’ (Spanning subgraf).
Contoh :
A e5 D
G • •
e1 e3 e4
• •
B e2 C
A D
G’ • • G’ subgraf dari G
(namun bukan dibentuk
oleh V’ = {A,B,D})
e1 e3
•
B
A e5 D
G’ • •
e1 e3
• B
GRAF BERLABEL
Graf G disebut graf berlabel jika ruas dan atau simpulnya dikaitkan dengan suatu besaran
tertentu. Jika setiap ruas e dari G dikaitkan dengan suatu bilangan non negatif d(e), maka
d(e) disebut bobot atau panjang dari ruas e.
DERAJAT GRAF
Derajat simpul V, ditulis d(v) adalah banyaknya ruas yang menghubungi v. Karena setiap ruas
dihitung dua kali ketika menentukan derajat suatu graf, maka :
Jumlah derajat semua simpul suatu graf (derajat) = dua kali banyaknya ruas graf (size graf).
Suatu simpul disebut genap/ganjil tergantung apakah derajat simpul tersebut genap/ganjil.
Kalau terdapat self-loop, maka self-loop dihitung 2 kali pada derajat simpul.
Contoh :
A B F
G • • •
• • • E
C D
Di sini banyaknya ruas = 7, sedangkan derajat masing-masing simpul adalah :
d(A) = 2 d(D) = 3 derajat graf G = 14
d(B) = 5 d(E) = 1 (2 * 7)
d(C) = 3 d(F) = 0
Catatan : E disebut simpul bergantung/akhir, yakni simpul yang berderajat satu. Sedangkan F
disebut simpul terpencil, yakni simpul berderajat nol.
KETERHUBUNGAN
Walk atau perjalanan dalam graf G adalah barisan simpul dan ruas berganti-ganti : v1, e1, v2,
e2, …, en-1, vn
Di sini ruas e1 menghubungkan simpul vi dan vI+1
Banyaknya ruas disebut panjang walk.
Walk dapat ditulis lebih singkat dengan hanya menulis deretan ruas : e1, e2, …, en-1
atau deretan simpul : v1, v2, …, vn-1, vn
v1 disebut simpul awal, vn disebut simpul akhir
Walk disebut tertutup bila v1 = vn , dalam hal lain walk disebut terbuka, yang menghubungkan
v1 dan vn
Path atau jalur adalah walk dengan semua simpul dalam barisan berbeda. Jadi path pasti
trail, sedangkan trail belum tentu path.
Dengan kata lain : Suatu path adalah suatu trail terbuka dengan derajat setiap simpulnya = 2,
kecuali simpul awal v1 dan vn simpul akhir berderajat = 1.
Cycle atau sirkuit adalah suatu trail tertutup dengan derajat setiap simpul = 2.
Contoh :
Graf yang tidak mengandung cycle disebut acyclic, contoh : pohon atau tree.
Suatu graf G disebut terhubung jika untuk setiap 2 simpul dari graf terdapat jalur yang
menghubungkan 2 simpul tersebut.
Subgraf terhubung suatu graf disebut komponen dari G bila subgraf tersebut tidak terkandung
dalam subgraf terhubung lain yang lebih besar.
B C
• • •D •F
•A •E
Jarak antara 2 simpul dalam graf G adalah panjang jalur terpendek antara ke-2 simpul
tersebut.
Diameter suatu graf terhubung G adalah maksimum jarak antara simpul-simpul G.
• C •E
A• •D •G
•B • F
Jarak maksimum dalam graf G adalah 3 (yaitu antara A – G atau B – G ataupun C – G). Jadi
diameter = 3.
Kalau order dari G = n, size dari G = e, dan banyaknya komponen = k, maka didefinisikan :
Rank(G) = n – k Nullity(G) = e – (n – k)
Matriks adjacency dari graf G tanpa ruas sejajar adalah matriks A berukuran (N x N), yang
bersifat :
1, bila ada ruas (vi, vj)
aij =
0, dalam hal lain
Matriks Incidence dari graf G, tanpa self-loop didefinisikan sebagai matriks M berukuran (N x
M)
1, bila ruas ej berujung di simpul vi,
mij =
0, dalam hal lain
Contoh :
e5
v1 v4 v5
• • •
e4 e8
e1 e2 e6 e7
• •
v2 e3 v3
Matriks Ruas
1 1 1 1 2 3 3 4 1 2
2 3 4 5 3 4 5 5 atau 1 3
1 4
1 5
2 3
3 4
3 5
4 5
Matriks Adjacency : N x N
v1 v2 v3 v4 v5
v1 0 1 1 1 1
v2 1 0 1 0 0
v3 1 1 0 1 1
v4 1 0 1 0 1
v5 1 0 1 1 0
Matriks Incidence : N x M
e1 e2 e3 e4 e5 e6 e7 e8
v1 1 1 0 1 1 0 0 0
v2 1 0 1 0 0 0 0 0
v3 0 1 1 0 0 1 1 0
v4 0 0 0 1 0 1 0 1
v5 0 0 0 0 1 0 1 1
Notasi : D(V, A)
Simpul, anggota v, digambarkan sebagai titik (atau lingkaran kecil). Sedangkan arkus a=(u,v),
digambarkan sebagai garis dilengkapi dengan tanda panah mengarah dari simpul u ke simpul
v. Simpul u disebut titik pangkal, dan simpul v disebut titik terminal dari arkus tersebut.
Contoh :
Graf berarah D (V, A) dengan :
1. V mengandung 4 smpul, yaitu : 1, 2, 3 dan 4
2. A mengandung 7 arkus, yaitu : (1,4), (2,1), (2,1), (2,2), (2,3), (2,4), (4,3).
1 4
• •
Arkus (2, 2) : gelung /
self loop
Arkus (2,1) : arkus sejajar
• • / arkus berganda
2 3
BAB 7
POHON BINAR
Pohon (Tree) adalah graf terhubung yang tidak mengandung sirkuit. Karena
merupakan graf terhubung maka pada pohon selalu terdapat path atau jalur yang
menghubungkan kedua simpul di dalam pohon. Pohon dilengkapi dengan Root (akar).
Q T
R U
S
V W
Contoh :
A
B C
D E G H
F J K
Untuk menggambarkan suksesor kiri dan suksesor kanan, dibuat garis ke kiri bawah
dan ke kanan bawah. B adalah suksesor kiri dari A, sedangkan C adalah suksesor kanan dari
A. Subpohon kiri dari A mengandung simpul B, D, E dan F, sedangkan subpohon kanan
mengandung simpul C, G, H, J, K dan L.
T1 T2 T3
A S A
B C T U B C
D E V W D E
Dua pohon binar disebut similar jika mempunyai struktur (bangun/susunan) pohon yang
sama.
Contoh : Pohon binar T1 dan T2 adalah similar.
Contoh :
A
D E
F G M
K L
K misalnya adalah keturunan kanan dari D, tetapi bukan keturunan dari F, E ataupun
M. Simpul G adalah ayah dari K dan L. Di sini K dan L adalah bersaudara, masing-masing
anak kiri dan anak kanan dari G.
Garis yang ditarik dari Simpul N ke suksesor disebut Ruas dan sederetan ruas yang
berturutan disebut Jalur atau path. Sebuah jalur yang berakhir pada daun (terminal) disebut
Cabang.
Garis AD maupun GL adalah contoh ruas. Barisan ruas (AD, DG, GL) adalah jalur dari
simpul A ke simpul L, jalur tersebut merupakan cabang, karena berakhir di simpul terminal
(daun ) L.
POHON-2
Pohon Binar T dikatakan Pohon-2 atau pohon binar yang dikembangkan bila setiap
simpul mempunyai 0 atau 2 anak. Dalam kasus ini, simpul dengan 2 anak disebut simpul
internal, sedangkan simpul tanpa anak disebut simpul eksternal. Dalam diagram, seringkali
diadakan pembedaan antara simpul internal dan eksternal. Simpul internal digambarkan
sebagai lingkaran, sedangkan simpul eksternal sebagai bujursangkar.
Contoh :
Pohon binar yang mempunyai sifat bahwa ketinggian subpohon kiri dan subpohon
kanan dari pohon tersebut berbeda paling banyak 1, disebut Pohon Ketinggian Seimbang
atau Height Balanced Tree (HBT).
Contoh :
A A
B C B C
HBT
E D
F Bukan HBT
KETINGGIAN MINIMUM DAN MAKSIMUM POHON BINAR
Contoh : untuk N = 8
1. PENYAJIAN KAIT
Kalau tidak dinyatakan lain, suatu pohon binar T akan disimpan dalam memori secara
penyajian kait.
Penyajian ini menggunakan tiga array sejajar INFO, LEFT dan RIGHT, serta variabel
penuding ROOT.
Masing-masing simpul N dari pohon T berkorespondensi dengan suatu lokasi K,
sedemikan sehingga :
(1) INFO(K) berisi data pada simpul N.
(2) LEFT(K) berisi lokasi dari anak kiri simpul N.
(3) RIGHT(K) berisi lokasi dari anak kanan simpul N.
Contoh :
Pohon Binar T
B C
D E G H
F J K
Root •
• A •
• B • • C •
x D x • E x x G x • H •
x F x • J x x K x
x L x
Root Avail
2. PENYAJIAN SEQUENTIAL
Penyajian pada pohon binar T ini hanya menggunakan sebuah array linear tunggal TREE
sebagai berikut :
1. Akar R dari pohon T tersimpan sebagai TREE[1]
2. Jika simpul N menduduki TREE[K] maka anak kirinya tersimpan dalam TREE[2*K] dan
anak kanannya dalam TREE[2*K+1]
Contoh :
45
22 77
11 30 90
15 25 88
TREE
1 45
2 22
3 77
4 11
5 30
6
7 90
8
9 15
10 25
11
12
13
14 88
15
.
.
.
29
Dapat dilihat bahwa penyajian membutuhkan 14 lokasi dalam array TREE, meskipun T hanya
mempunyai 9 simpul. Kenyataannya, bila kita memasukkan elemen nol sebagai suksesor dari
simpul terminal, dibutuhkan TREE[29] untuk suksesor kanan dari TREE[14].
Kita dapat menyajikan pohon umum secara pohon binar dengan algoritma sebagai berikut :
1. Tambahkan ruas baru yang menghubungkan 2 simpul bersaudara yang berdampingan,
lalu kita hapus ruas dari simpul ayah ke anak, kecuali ruas ke simpul anak paling kiri.
2. Rotasikan sebesar 45° , searah putaran jarum jam terhadap pohon hasil langkah pertama.
Contoh Pohon Umum
A
B C D
E F G H I J
K L
Langkah Pertama
A
B C D
E F G H I J
K L
Langkah kedua
A
E C
F D
G H
K I
L J
NOTASI PREFIX, INFIX DAN POSTFIX SERTA TRAVERSAL POHON
Traversal adalah proses kunjungan dalam pohon, dengan setiap Simpul hanya dikunjungi
tepat satu kali.
Contoh :
FDBACEG
D G
B E
A C
F Untai yang dihasilkan secara In-order
ABCDEFG
D G
B E
A C
ACBEDGF
D G
B E
A C
Contoh :
38
14 56
8 23 45 82
18 72
Dicatat bahwa dalam definisi Pohon Cari Binar di atas, semua nilai/label simpul adalah
berbeda. Kalau diijinkan terjadi adanya label yang sama, dapat dilakukan sedikit modifikasi.
Definisi Pohon Cari Binar menjadi : Bila N adalah simpul dari Pohon maka nilai semua
simpul pada subpohon kiri dari N adalah lebih kecil atau sama dengan nilai simpul N, dan nilai
semua simpul pada subpohon kanan dari N adalah lebih besar dari nilai simpul N.
Contoh :
Hari
Cahyo Lilik
Daud
Ely
Dewi Dewi
Badu Cokro
Ali
(a) (b)
Dewi
Pandang bahwa diberikan sebuah ITEM informasi. Algoritma di bawah ini akan menemukan
lokasi dari ITEM dalam Pohon Cari Binar T, atau menyelipkan ITEM dalam Pohon Cari Binar
T, atau menyelipkan ITEM sebagai simpul baru dari T dalam posisi yang tepat.
ALGORITMA
38
14 56
8 23 45 82
18 72
20
Operasi penghapusan suatu simpul dari Pohon Cari Binar bukan merupakan hal yang
mudah. Pertama-tama kita harus tetapkan lebih dahulu simpul yang akan kita hapus, bila
merupakan simpul daun, maka proses akan berlangsung dengan mudah, karena simpul daun
tersebut akan dapat langsung kita hapuskan dari Pohon Cari yang bersangkutan. Jika simpul
yang akan dihapuskan mempunyai sebuah subpohon kanan, maka untuk menggantikan
posisi simul yang dihapuskan tersebut, kita ambil simpul akar subpohon kiri dan sebaliknya.
Jika simpul yang akan dihapuskan mempunyai dua buah subpohon yaitu subpohon kiri dan
subpohon kanan, maka untuk menggantikan posisi dari simpul yang dihapuskan tersebut, kita
tentukan simpul dari salah satu subpohon kiri atau subpohon kanan sedemikian sehingga
bangun pohon yang terbentuk kembali, memenuhi sifat sebagai Pohon Cari Binar.
(1) Jika Pohon Hampa, maka penghapusan yang dilakukan gagal. Berhenti.
(2) Jika n < Ro (akar), subpohon kiri dari Ri diselidiki sampai ditemukan simpul yang telah
ditentukan untuk dihapus.
(3) Jika n > Ro, maka subpohon kanan dari Ri diselidiki sampai ditemukan simpul yang
telah ditentukan untuk dihapus.
(4) Jika n = Ro, subpohon kiri dan subpohon kanan hampa, maka hapus Ro.
(5) Jika n = Ro, dan subpohon kirinya hampa, maka hapus Ro, kemudian ambil akar dari
subpohon kanan untuk menggantikan posisi Ro. Pohon baru akan memenuhi sifat
sebagai Pohon Cari lagi.
(6) Jika n = Ro, dan subpohon kanannya hampa, maka hapus Ro, kemudian ambil akar dari
subpohon kiri untuk menggantikan posisi Ro. Pohon baru akan memenuhi sifat sebagai
Pohon Cari lagi.
(7) Jika n = Ro, subpohon kanan dan subpohon kiri tidak hampa, maka untuk menggantikan
posisi Ro yang dihapus, kita tentukan suatu simpul mungkin dari subpohon kiri atau
mungkin dari subpohon kanan, sedemikian sehingga Pohon yang terbentuk kembali
memenuhi sifat sebagai Pohon Cari lagi.
15 56
8 23 45 82
19 72
20
2. Dari pohon cari binar di atas, lakukan penghapusan berturut-turut terhadap simpul 45, 23
dan 56!
HEAP
Suatu pohon binar adalah Heap, jika nilai setiap simpul lebih besar atau sama dengan nilai
anaknya, disebut Maxheap.
Kalau nilai setiap simpul lebih kecil atau sama dengan nilai anaknya, disebut Minheap.
Contoh :
95
87 92
76 72 83 85
58 54 62 69 73 65
Kita dapat memasukkan elemen baru ke dalam sebuah Heap. Misalkan elemen = 93. Mula-
mula elemen tersebut diletakkan sebagai elemen terakhir dari heap, yaitu elemen tree[14]
pada daftar berurutan. Selanjutnya memerika apakah elemen tersebut lebih besar dari
ayahnya. Bila lebih besar, lakukan pertukaran, elemen tersebut sekarang menjadi ayah.
Demikian seterusnya sampai kondisi ini tidak tercapai.
95
88 92
76 72 83 85
58 54 62 69 73 65 93
95
89 92
76 72 83 93
58 54 62 69 73 65 85
90 93
76 72 83 92
58 54 62 69 73 65 85
Algoritma heapsort :
1. Jatuhkan root ke posisi terakhir dari simpul dalam urutan almost complete. (Pertukarkan
antara root dengan simpul terakhir dari urutan almost complete. Data pada simpul terakhir
sudah terurut)
2. Sisanya bentuk heap kembali, kemudian lakukan sort kembali.
BAB 8 & 9
Pendahuluan
Sorting dan searching merupakan salah satu operasi dasar dalam ilmu komputer. Sorting
merupakan suatu proses (operasi) yang mengurutkan data dalam suatu urutan yang diberikan
(increasing atau decreasing). Searching merupakan suatu proses (operasi) untuk mencari
lokasi dari data yang diberikan dalam suatu urutan data.
Secara tidak langsung sorting dan searching menunjuk pada operasi file yang merupakan
kumpulan suatu dari record. Masing-masing record dalam file F dapat berisi banyak field,
tetapi terdapat 1 buah field yang memiliki nilai unique atau merupakan key yang unique
dalam record tersebut. Misal field K merupakan key unique yang disebut primary key, maka
proses sorting file F akan berdasarkan key unique tersebut dan proses searching untuk
mencari record tertentu berdasarkan nilai key unique yang diberikan.
Sorting
Terdapat 2 katagori dasar dalam tehnik sorting : internal sort dan external sort.
Metoda Internal sort digunakan apabila koleksi data yang akan diurutkan tidak dalam jumlah
besar sehingga proses dapat dilakukan dalam main memory. Metoda External sort
digunakan apabila koleksi data yang akan diurutkan dalam jumlah besar dimana koleksi data
tersebut ada dalam auxiliary memory device seperti magnetic tape atau disk.
(Yang akan di bahas adalah Internal Sort).
Misal A merupakan suatu daftar dari n elemen A1, A2, ..., An dalam memori. Sorting A
merupakan operasi yang mengatur elemen dalam A sehingga ada dalam urutan yang terurut,
misal dalam increasing order sehingga :
A1 ≤ A2 ≤ A3 ≤ ..... ≤ An
Contoh :
Misal suatu array DATA berisi 8 elemen sebagai berikut :
Setelah diurutkan :
Insertion Sort
Misal array A dengan n elemen A[1], A[2], ..... , A[N] dalam memori. Algoritma Insertion
Sort memeriksa A dari A[1] sampai dengan A[N], menyisipkan setiap elemen A[K] ke dalam
posisi yang seharusnya dalam subarray terurut A[1], A[2], ..... , A[K-1].
Algoritma ini menggunakan sentinel elemen (A[0]) yang digunakan sebagai perbandingan.
Yang dimaksud dengan sentinel elemen adalah elemen yang memiliki nilai yang sangat kecil.
Proses A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
K = 1: -∞ 77 33 44 11 88 22 66 55
K = 2: -∞ 77 33 44 11 88 22 66 55
K = 3: -∞ 33 77 44 11 88 22 66 55
K = 4: -∞ 33 44 77 11 88 22 66 55
K = 5: -∞ 11 33 44 77 88 22 66 55
K = 6: -∞ 11 33 44 77 88 22 66 55
K = 7: -∞ 11 22 33 44 77 88 66 55
K = 8: -∞ 11 22 33 44 66 77 88 55
Urutan : -∞ 11 22 33 44 55 66 77 88
Tabel 1.1
Contoh :
Array A dengan 8 elemen sebagai berikut :
77, 33, 44, 11, 88, 22, 66, 55
Tabel 1.1 menggambarkan algoritma insertion sort. Elemen yang dilingkari
menandakan A[K] dalam masing-masing proses dari algoritma, dan tanda panah
menandakan letak yang seharusnya untuk menyisipkan A[K].
Selection Sort
Array A dengan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma untuk
mengurutkan A sebagai berikut : Pertama, cari elemen terkecil dalam array A dan letakkan
pada posisi pertama dalam array tersebut. Kemudian cari elemen kedua terkecil dalam array
A dan letakkan dalam posisi kedua dari array tersebut, dan begitu seterusnya.
Proses 1 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N elemen , A[1], A[2], ...., A[N] dan kemudian tukar posisi
A[LOC] dengan A[1].
Proses 2 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N-1 elemen , A[2], A[3], ...., A[N] dan tukar posisi A[LOC]
dengan A[2]. A[1] , A[2] terurut, jika dan hanya jika A[1] ≤ A[2].
Proses 3 : Cari lokasi LOC yang merupakan elemen terkecil dalam array yang
terdiri dari N-2 elemen, A[3], A[4],......, A[N] dan tukar posisi A[LOC]
dengan A[3]. A[1], A[2], A[3] terurut, jika dan hanya jika A[2] ≤ A[3].
Dst.................
Contoh ;
Array A dengan 8 elemen sbb :
77, 33, 44, 11, 88, 22, 66, 55
Proses algoritma digambarkan dalam Tabel 1.2. Misalkan LOC berisi nilai lokasi
elemen terkecil A[K], A[K+1],...,A[N] selama proses K. Elemen yang dilingkari merupakan
elemen yang akan ditukar posisinya.
K = 1 ; LOC = 4 77 33 44 11 88 22 66 55
K = 2 ; LOC = 6 11 33 44 11 88 22 66 55
K = 3 ; LOC = 6 11 22 44 77 88 33 66 55
K = 4 ; LOC = 6 11 22 33 77 88 44 66 55
K = 5 ; LOC = 8 11 22 33 44 88 77 66 55
K = 6 ; LOC = 7 11 22 33 44 55 77 66 88
K = 7 ; LOC = 7 11 22 33 44 55 66 77 88
Urutan : 11 22 33 44 55 66 77 88
Tabel 1.2
Algoritma :
Merging
Misal A merupakan himpunan data terurut dengan r buah elemen dan B himpunan
data terurut dengan s buah elemen. Proses yang menggabungkan elemen-elemen dalam A
dan B menjadi himpunan elemen data terurut tunggal, misal C dengan n = r + s buah elemen
disebut dengan proses Merging.
Secara singkat, proses Merging dapat dijelaskan sebagai berikut ; ambil elemen pertama dari
A, A[1] dan B, B[1]. Bandingkan kedua elemen tersebut. Jika A[1] > B[1], B[1] dimasukkan
dalam C, jika tidak A[1] dimasukkan dalam C. Untuk himpunan data yang elemennya
dimasukkan dalam C, elemen yang akan dibandingkan adalah elemen berikutnya. Dan
seterusnya.
Contoh :
A = 11 12 23 33 45 67
B = 9 12 21 42
Disini A[1] = 11 dan B[1] = 9 dibandingkan dan A[1] > B[1], B[1] dimasukkan dalam C.
Pembandingan berikutnya A[1] = 11 dibandingkan dengan B[2] = 12, A[1] dimasukkan dalam
C, dan begitu seterusnya.
Algoritma MERGING :
1. NA = 1 ; NB = 1 dan PTR = 1
2. Repeat While NA ≤ R and NB ≤ S
If A[NA] < B[NB] then
a. C[PTR] = A[NA]
b. PTR = PTR + 1 ; NA = NA + 1
Else
a. C[PTR] = B[NB]
b. PTR = PTR + 1 ; NB = NB + 1
[End If Structure]
[End Loop]
3. If NA > R then
Repeat For k = 0,1,2,3,.....,S-NB
C[PTR+K] = B[NB+K]
[End loop]
Else
Repeat for K = 0,1,2,3,.....,R-NA
C[PTR+K] = A[NA+K]
[End loop]
[End If Structure]
4. Exit
Kompleksitas algoritma Merging = O(n). Dengan kata lain algoritma Merging dapat dijalankan
dalam waktu yang linear.
Merge Sort
Misal : Array A dangan n elemen A[1], A[2], ....., A[N] dalam memori. Algoritma Merge Sort
yang akan mengurutkan A akan digambarkan sebagai berikut :
Contoh :
Array A berisi 6 elemen sbb :
15 12 45 56 13 10
Masing-masing proses dalam algoritma merge sort akan dimulai dari elemen awal
dalam A dan menggabungkan (merge) pasangan subarray yang terurut sbb :
15 12 45 56 13 10
12 15 45 56 1013
12 15 45 56 10 13
10 12 13 15 45 56
Tournament Sort
Tournament Sort disebut juga dengan Tree Selection Sort. Misal terdapat elemen data
sebagai berikut : 6, 25, 7, 2, 14, 10, 9, 22, 3, 14, 8, 12, 1, 30, 13. Asumsikan bahwa batasan
proses dalam memori hanya 4 buah elemen setiap saatnya. Algoritma Tournament Sort
membagi 4 elemen tersebut menjadi 2 pasangan elemen sbb :
6
25
7
2
Asumsikan bahwa data tersebut akan diurutkan secara ascending, sehingga elemen terkecil
pada masing-masing pasangan di atas adalah 2 dan 6.
6 6
25
7 2
2
2 adalah elemen terkecil dan merupakan elemen pertama pada output dari urutan yang
diurutkan.
6 6
25
2 2
7 2
2
Proses yang berikutnya akan ditentukan elemen kedua dalam list terurut. 2 tidak
diikutsertakan kembali.
6 6
25
6 2, 6
7 7
*
Proses selanjutnya :
6 6
25
6 2, 6
7 7
14
Proses ketiga :
10 10
25
7 2, 6, 7
7 7
14
Proses keempat :
10 10
25
9 2, 6, 7, 9
9 9
14
Proses kelima :
10 10
25
10 2, 6, 7, 9, 10
22 14
14
3
25
22 14
14
Apabila 3 diikutkan dalam proses, maka urutan list terurut pada output akan berantakan.
Untuk mengatasinya, terdapat aturan sbb :
If Keynew < Keylastout
then keynew diletakkan dalam tree tetapi untuk sementara waktu di-
diskualifikasikan.
Catatan : Keylastout adalah key terakhir yang ada dalam list terurut.
Elemen yang didiskualifikasikan akan ditandai dengan asterisk (*). Sehingga hasil dari proses
enam adalah :
*3 25
25
14 2, 6, 7, 9, 10, 14
22 14
14
Pada proses ketujuh, elemen berikutnya adalah 14. Karena elemen terakhir dalam list terurut
tidak lebih kecil dari elemen yang akan dimasukkan, yakni 14, maka elemen 14 masuk dalam
list terurut.
*3 25
25
14 2, 6, 7, 9, 10, 14, 14
22 14
14
Proses kedelapan, elemen berikutnya 8 dan elemen ini untuk sementara akan didiskualifikasi
karena 8 < dari elemen terakhir dalam list terurut yakni 14.
*3 25
25
22 2, 6, 7, 9, 10, 14, 14, 22
22 22
*8
Proses kesembilan :
*3 25
25
25 2, 6, 7, 9, 10, 14, 14, 22, 25
*12 *
*8
*3
*1
*12
*8
Sekarang semua elemen yang ada adalah elemen yang didiskualifikasikan. Dan saat ini baru
9 elemen yang diurutkan. Sekarang elemen yang untuk sementara didiskualifikasikan,
dilepaskan dari diskualifikasi dan proses dimulai kembali. Kali ini akan terbentuk list terurut
kedua dari elemen-elemen yang didiskualifikasi sebelumnya. Sehingga
proses 10 :
3 1
1
1 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1
8
3 3
30
3 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1, 3
8
Proses 12 :
13 13
30
8 2, 6, 7, 9, 10, 14, 14, 22, 25
12 8 1, 3, 8
8
13 13
30
12 2, 6, 7, 9, 10, 14, 14, 22, 25
12 12 1, 3, 8, 12
*
Proses 14 dan 15 tidak terdapat elemen yang dimasukkan dalam tree. Hasil akhir dari proses
tournament sort ini menghasilkan 2 himpunan elemen data yang terurut :
Kedua himpunan data yang terurut tersebut dapat digabungkan menjadi satu list data terurut
dengan menggunakan algoritma Merging.
Shell Sort
Pada langkah pertama, ambil elemen pertama dan kita bandingkan dengan elemen
pada jarak tertentu dari elemen pertama tersebut. Kemudian elemen kedua dibandingkan
dengan elemen lain dengan jarak yang sama. Demikian seterusnya sampai seluruh elemen
dibandingkan.
Pada contoh berikut, proses pertama kali jarak diambil separoh banyaknya elemen
yang akan diurutkan. Proses kedua jaraknya diambil separuh jarak yang pertama, dst....
23 45 12 24 56 34 27 23 16
Proses pengurutan menggunakan metoda Shell ada pada tabel 1.3. Dalam hal ini elemen
yang ditulis miring adalah elemen yang dibandingkan dan kemudian ditukar, jika perlu.
Jarak A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Awal 23 45 12 24 56 34 27 23 16
Jarak = 4 23 45 12 24 56 34 27 23 16
23 45 12 24 56 34 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 24 56 45 27 23 16
23 34 12 23 56 45 27 24 16
23 34 12 23 16 45 27 24 56
Jarak = 2 23 34 12 23 16 45 27 24 56
12 34 23 23 16 45 27 24 56
12 23 23 34 16 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 45 27 24 56
12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56
Jarak = 1 12 23 16 34 23 24 27 45 56
12 23 16 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 34 23 24 27 45 56
12 16 23 23 34 24 27 45 56
12 16 23 23 24 34 27 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56
12 16 23 23 24 27 34 45 56
Akhir 12 16 23 23 24 27 34 45 56
Searching
Pencarian data sering disebut juga dengan istilah table look-up atau storage and retrieval
information, adalah suatu proses untuk mengumpulkan sejumlah informasi di dalam
pengingat komputer dan kemudian mencari kembali informasi yang diperlukan.
Sequential Searching
Metoda yang paling sederhana dari sejumlah metoda pencarian adalah metoda pencarian
berurutan (sequential searching). Secara singkat metoda ini dapat dijelaskan sebagai berikut :
Dari elemen-elemen yang diketahui, data yang dicari dibandingkan satu persatu
sampai data tersebut ditemukan atau tidak ditemukan.
Pada skema pencarian sekuensial move to the front, apabila proses pencarian berhasil, maka
record tersebut dipindahkan pada posisi pertama dari daftar tersebut. Record pertama
menjadi record kedua dan seterusnya.
Metoda move to the front ini, prosesnya lebih baik apabila menggunakan linked list
dibandingkan dengan array. (cari alasannya, mengapa !)
Skema Transposition
Pada skema pencarian sekuensial transposition, apabila prose pencarian berhasil, maka
record tersebut dipindahkan pada posisi berikutnya.
Kedua skema di atas (move to the front dan transposition) didasarkan pada kemungkinan
proses pencarian apabila elemen data yang di cari akan digunakan dan dicari kembali.
(Cari kelebihan dan kekurangan kedua skema di atas dengan penggambaran secara linked
list dan array !)