You are on page 1of 23

MAKALAH PRATIKUM

STRUKTUR DATA

Disusun Oleh :
Tetra Octaria Saputri
Kelas : 3c

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM


UNIVERSITAS PAKUAN
BOGOR
KATA PENGANTAR

Syukur Alhamdullilah penulis panjatkan kehadirat Allah SWT. Atas rahmat dan
hidayahnya sehingga makalah ini dapaat diselesaikan dengan baik. Padaa kesempataan
ini tidak lupa, penulis mengucapakan terima kasih kepaadaa semua pihak yang telah
membantu penyelesaian makalah ini diantaranya :
1. Istakhori selaku Asisten dosen struktur data.
2. Orang tua yang memberikan dorongan dan dukungan baik dorongan moril
maupun materil kepada penulis.
3. Teman-teman yang telah memberikan dorongan dan kerjasamanya secara
langsung maupun tidak langsung.
Penulis sangat menyadari bahwa sesungguhnya dalam makalah ini masih banyak
sekali kekurangan baik dari segi bahasa maupun dalam system pembuatan makalah. Oleh
karena itu penulis sangat mengharapkan kritik dan saran dari pembaca guna
menyempurnakan makalah-makalah dimasa akan datang.
Demikian penyusunan makalah Ini, penulis sangat berharap semoga makalah ini dapat
bermanfaat bagi penulis maupun bagi para pembaca.
BAB I
B-TREE

Pendahuluan
Struktur pohon menunjang berbagai operasi dinamik dasar termasuk search,
predecessor, successor, minimum, maximum, insert, dan delete dalam proporsional waktu
terhadap ketinggian pohon. Idealnya, sebuah pohon seimbang dan ketinggiannya adalah
log n di mana adalah jumlah simpul pohon. Untuk memastikan ketinggian pohon sekecil
mungkin dan menghasilkan waktu yang terbaik, maka struktur pohon seimbang seperti B-
tree sebaiknya digunakan.

1. Pengertian
B-tree adalah struktur data pohon yang paling umum digunakan dalam basis data
dan file system. B-tree menjaga data tetap terurut dan seimbang. Ide di balik B-tree ini
yaitu simpul internal dapat memiliki sejumlah simpul anak dalam cakupan (range) yang
telah terdefinisi. Ketika data disisipkan atau dipidah dari struktur data, sejumlah simpul
anak dapat bertukar sepanjang simpul. Untuk tetap mempertahankan cakupan yang telah
didefinisikan, simpul internal digabungkan atau dipisahkan. Karena adanya cakupan
(range) pada simpul anak, maka B-tree tidak perlu diseimbangkan secara berkala seperti
struktur data pohon seimbang yang lain, misalnya self-balancing binary search trees.
Akan tetapi, B-tree dapat menghabiskan tempat karena simpul tidak selalu penuh. Batas
atas dan batas bawah jumlah simpul anak biasanya tetap untuk implementasi tertentu.
Sebagai contoh, dalam 2-3 B-tree (disebut juga 2-3 tree), setiap simpul internal hanya
dapat memiliki 2 atau 3 simpul anak.
Sebuah B-tree dijaga keseimbangannya dengan membuat semua simpul daun
berada pada ketinggian yang sama. Ketinggian ini akan meningkat perlahan saat elemen-
elemen ditambahkan pada pohon, tetapi peningkatan ketinggian secara keseluruhan
jarang terjadi. Hal disebabkan karena sebuah B-tree didesain dapat memiliki cabang
dalam jumlah besar dan mengandung sejumlah kunci pada tiap simpulnya sehingga
ketinggian pohon relatif kecil. Hal ini berarti hanya sedikit simpul yang harus dibaca dari
disk untuk mengambil data.Tujuannya yaitu untuk mendapatkan akses pada data yang
cepat.
1.1 Sejarah B-Tree

B-Tree memiliki kelebihan dibanding implementasi alternatif yang lain karena


waktu akses dalam simpulnya jauh di atas waktu akses antarsimpul. Hal ini biasanya
muncul ketika kebanyakan simpul berada di penyimpanan sekunder seperti hard drives.
Dengan memaksimalkan jumlah simpul anak pada setiap simpul internal, ketinggian
pohonN berkurang, penyeimbangan muncul tidak terlalu sering, dan efisiensi meningkat.
Biasanya nilai ini diset agar setiap simpul mengisi sebuah blok penuh atau pada ukuran
yang analog di tempat penyimpanan sekunder.
1.1 Sejarah B-Tree
B-tree memiliki sejarah yang pendek tetapi penting. Pada akhir tahun 1960-an
perusahaan komputer dan grup penelti independen bersaing mengembangkan tujuan
umum file systems dan disebut dengan “metode akses” untuk mesinmesin mereka. Di
Sperry Univac Corporation (bekerja sama dengan Universitas Case Western Reserve), H.
Chiat, M. Schwartz, dan yang lainnya mengembangkan dan mengimplementasi sebuah
sistem yang menghasilkan operasi insert dan find dalam tata cara yang menyerupai
metode B-tree yang akandi jelaskan nanti. Secara terpisah, B. Cole, S. Radcliffe, M.
Kaufman, dan yang lainnya mengembangkan sistem yang mirip di Control Data
Corporation (bekerja sama dengan Unversitas Stanford). Kemudian pada tahun 1972,
R.Bayer dan E. McCreight di Boeing Scientific Research Labs mengajukan sebuah
mekanisme indeks eksternal dengan waktu proses yang relatif rendah untuk kebanyakan
operasi-operasi yang telah disebutkan sebelumnya. Mereka
menamakan metode tersebut dengan Btree.
Para pencipta B-Tree, Rudolf Bayer dan Ed McCreight, tidak menjelaskan arti
dari huruf B pada B-Tree tersebut. Yang paling diyakini adalah B merupakan singkatan
dari balanced yang artinya seimbang, karena semua simpul daun pada pohon berada pada
tingkat (level) yang sama. B juga dapat berarti Bayer, nama penciptanya, atau Boeing
karena mereka bekerja di Boeing Scientific Research Labs pada waktu itu.
1.2 Definisi B-Tree
B-Tree adalah sebuah m-ary balancedvsearch tree khusus yang digunakan dalam
basis data karena strukturnya memungkinkan data yang disimpan untuk disisipi, dihapus,
dan diambil dengan jaminan proses dengan waktu terburuk, di mana setiap simpulnya
terdiri dari (m/2) sampai m buah simpul anak, di mana m > 1 merupakan bilangan bulat.
m adalah orde. Akar pohon B-tree paling sedikit memiliki 2 simpul anak. Ini adalah
struktur yang baik jika pohon digunakan pada memori yang lambat, karena ketinggian
dan jumlah akses dapat diperkecil dengan mengambil bilangan m yang besar. Balanced
tree atau pohon seimbang adalah pohon dimana tidak ada simpul daun yang lebih panjang
terhadap daun yang lain. Search tree adalah pohon
dimana setiap subpohon dari sebuah simpul mempunyai kunci lebih kecil dari subpohon
kanan simpul tersebut. Kunci dalam sebuah simpul secara konsep berada di antara
subpohon-subpohon dan lebih besar dari kunci di subpohon kiri simpul dan lebih kecil
dari kunci di subpohon kanan simpul.
Sebuah B-Tree didesain untuk digunakan padadisk. Disk hanya dapat membaca dan
menulis blok data ukuran. tetap (berukuran bsar) sekaligus. Sebuah B-tree
menyimpan banyak kunci di setap simpulnya sehingga1) sebuah disk dapat mengakses
anyak kunci, dan (2) faktor cabang pohon sangat tinggi (dalam
prakteknya lebih besar dari 1000) sehingga pohon dengan ketinggian kecil dapat
menyimpan kunci dalam jumlah yang sangat besar, yang dapat diakses hanya dengan
beberapa operasi.

2 Struktur dari B-Tree


2.1 Struktur Simpul B-Tree
Tidak seperti pohon biner, setiap simpul pada B-tree dapat memiliki sejumlah
variabel kunci dan anak. Setiap elemen simpul internal adalah nilai-nilai yang berbeda
yang membagi subpohonnya. Kunci disimpan dalam urutan membesar. Setiap kunci
memiliki anak yang berhubungan dengan kunci tersebut, yaitu akar dari subpohon yang
mengandung semua simpul dengan kunci-kunci lebih kecil atau sama dengan kunci
simpul akar tetapi lebih besar dari kunci sebelumnya. Sebuah simpul juga mempunyai
anak tambahan paling kanan yaitu akar dari subpohon yang mengandung semua kunci
lebih besar dari semua kunci pada simpul.
Sebagai contoh, jika sebuah simpul internal memiliki tiga simpul anak (atau
subpohon) maka simpul tersebut pasti meiliki dua nilai berbeda atau elemen a1 dan a2.
Semua nilai di paling kiri subpohon lebih kecil dari a1, semua nilai di subpohon tengah
akan berada di antara a1 dan a2 , dan semua nilai di paling kanan subpohon akan lebih
besar dari a2. Sebuah B-tree memiliki jumlah minimum anak yang mungkin untuk setiap
simpul disebut sebagai minimization factor atau faktor minimalisasi. Jika t adalah faktor
minimalisasi, setiap simpul harus memiliki paling sedikit t-1 kunci. Dalam keadaan
tertentu, simpul akar diperbolehkan melanggar ketentuan tersebut dengan memiliki lebih
kecil dari t-1 kunci. Setiap simpul dapat memiliki paling banyak 2t-1 kunci atau setara
dengan 2t anak.
Simpul internal di B-tree – simpulsimpul yang bukan merupakan simpul daun –
biasanya digambarkan sebagai susunan elemen dan pointer anak yang teratur. Setiap
simpul internal terdiri dari maksimum U anak dan – selain akar – minimum L anak.
Untuk semua simpul internal selain akar, jumlah elemennya lebih kecil satu dari jumlah
pointer anak, jumlah elemennya antara L-1 dan U-1. Nilai U harus 2L ataupun 2L-1, jadi
setiap simpul internal harus paling sedikit setengah penuh. Hubungan antara U dan L ini
mengakibatka bahwa dua simpul setengah penuh dapat digabung menjadi simpul yang
legal, dan satu simpul penuh dapat dipisah menjadi dua simpul yang legal (jika ada
ruangan untuk menggeser satu elemen ke simpul orang tuanya). Hal ini memungkinkan
untuk menghapus dan memasukkan nilai baru ke dalam B-tree dan mengatur pohon
sesuai dengan ketentuannya. Simpul daun memiliki larangan yang sama pada jumlah
elemen, tetapi tidak memiliki simpul anak dan tidak ada pointer anak.
Simpul daun masih memiliki batas atas pada jumlah anak, tetapi tidak memiliki
batas bawah. Sebagai contoh, ketika ada lebih sedikit dari L-1 elemen pada keseluruhan
pohon. akar akan menjadi satu-satunya simpul pada pohon, dan akar tidak memiliki anak
sama sekali.Beberapa pohon seimbang menyimpan nilai hanya pada simpul daun, jadi
memiliki simpul-simpul yang berbeda pada simpul daun dan simpul internal. Btree tetap
menjaga nilai-nilai di setiap simpul pada pohon, dan dapat menggunakan struktur yang
sama pada setiap simpul. Bagaimanapun, sejak simpul daun tidak memiliki anak, struktur
khusus untuk simpul daun pada B-tree akan meningkatakan performa.

2.2 Ketinggian pada B-Tree


Untuk n lebih besar atau sama dengan satu, ketinggian dari n-kunci B-tree
,dengan tinggi h dan derajat minimum t lebih besar atau sama dengan 2,
h≤ logt n+1
2

Bukti : h
n≥ 1+(t-1) ∑ 2t k-1
k=1
= 1+2 (t-1) th-1
t-1
= 2 th-1
jadi = n+1 ≥ th
2
Lalu kedua sisi di-logaritma.
Tinggi dari kasus terburuk adalah O(logn). Karena percabangan dari B-tree bisa
lebih besar dibandingkan struktur pohon seimbang yang lain, basis dari logaritma
cenderung lebih besar. Sehingga jumlah simpul yang dikunjungi selama pencarian
cenderung lebih kecil dari yang dibutuhkan oleh struktur pohon yang lain.Walaupun hal
ini tidak mempengaruhi tinggi asimtotik kasus terburuk, B-tree cenderung memiliki
tinggi yang lebih kecil dari pohon lain yang memiliki tinggi asimtotik yang sama.
2.3 Waktu Proses pada B-Tree
Sebuah B-tree dengan ketinggian n+1 dapat menghabiskan U waktu sebanyak
jumlah nilai pada B-tree dengan ketinggian n, tetapi waktu yang dibutuhkan untuk
melakukan operasi search, insert, dan delete bertambah sesuai ketinggian pohon.
Dibandingkan dengan pohon seimbang lain, pertambahan pada B-tree leih lambat
dibandingakan jumlah elemen.
Karena setiap simpul cenderung memiliki faktor percabangan yang besar
(jumlah anak yang besar), maka perlu untuk menelusuri beberapa simpul sebelum
menempatkan kunci yang diinginkan. Jika akses ke setiap simpul memerlukan disk
access, maka sebuah B-tree akan meminimumkan jumlah akses disk yang dibutuhkan.
Faktor minimalisasi biasanya dipilih agar ukuran total setiap simpul berkorespondensi
pada sebuah ukuran blok yang banyak pada sebuah alat penyimpanan. Pilihan ini
memudahkan dan mengoptimumkan akses disk. Oleh karena itu, sebuah B-tree adalah
struktur data yang ideal untuk situasi di mana data tidak dapat disimpan pada tempat
penyimpanan primer dan akses pada tempat penyimpanan sekunder membutuhkan
banyak waktu. Waktu pencarian kasus terburuk pada derajat n-kunci B-tree adalah
O(log(n)). Sebuah simpul pada pohon B-tree memiliki t-1 <= K <= 2t-1 kunci yang
terurut. Kasus terburuk :
- K = t-1 untuk semua simpul
- X tidak ada pada pohon
Diberikan sebuah simpul W dala pohon T. Berapa lama waktu yang dibutuhkan untuk
mencari subpohon dari W yang mengandung X ? Dengan mengguanakan binary search
dibutuhkan.

3 Algoritma B-Tree
Algoritma untuk operasi search, create, dan insert ditunjukkan di bawah. Perlu
diperhatikan bahwa algoritma-algoritma ini hanya sekali pass. Dengan kata lain,
algoritma tersebut tidak menelusuri pohon kembali. Karena B-tree berusaha melakukan
akses disk seminimum mungkin dan simpul-simpul biasanya disimpan pada disk, pass
sekali ini akan mengurangi jumlah kunjungan pada simpul dan jumlah akses disk. Dua
kali pass yang lebih sederhana pada pohon untuk mempesbaiki pelanggaran mungkin
terjadi. Karena semua simpul diasumsikan disimpan pada tempat penyimpanan sekunder
(disk) daripada tempat peyimpanan primer (memori), semua referensi pada simpul yang
diberikan sebelumnya dengan melakukan operasi read dilambangkan dengan Disk-Read.
Sama halnya, apabila sebuah simpul dimodifikasi dan tidak lagi diperlukan, simpul harus
eitulis pada tempat penyimpanan sekunder dengan operasi write dilambangkan dengan
Disk-Write. Algoritma-algoritma di bawah diasumsikan bahwa semua simpul yang
memiliki parameter telah memiliki operasi Disk-Read yang sesuai. Simpul baru\ dibuat
dan di-assign dengan fungsi Allocate-Node. Implementasi secara detail dari Disk-Read,
Disk-Write, dan AllocateNode tergantung pada sistem operasi (operating system).

3.1 Search
Operasi search pada B-tree mirip dengan search pada binary tree. Dimulai dari
akar, pohon ditelusuri dari atas sampai kebawah, memilih pointer anak yang nilainya
berada pada sisi nilai yang dicari. Binary search umum digunakan (tidak selalu) di antara
simpul untuk menemukan nilai yang berbeda dan anak pohon yang dicari. Akan tetapi,
daripada memilih diantara anak kiri dan anak kanan pada Btree, sebuah search pada B-
tree harus membuat pilihan sebanyak n cara. Anak yang sesuai dipilih dengan melakukan
pencarian linier pada nilai-nilai dalam simpul. Setelah menemukan nilai lebih besar atau
sama dengan nilai yang diinginkan, pencarian pointer anak di sebelah kiri segera
dilakukan. Jika semua nilai yang dicari lebih kecil dari nilai yang diinginkan, pencarian
dilakukan pada pointer anak paling kanan. Tetntu saja pencarian dapat terhenti apabila
simpul yang diinginkan telah ditemukan. Karena waktu yang dibutuhkan untuk
melakukan search tergantung pada tinggi pohon, maka proses search pada B-Tree adalah
O(log n). Berikut ini adalah pseudocodes proses search pada B-tree.
B-Tree-Search (x,k)
i <- 1
while (i<=n[x] and k>keyi[x])
do
i <- i + 1
if (i<=n[x] and k=keyi[x]) then
return (x, i)
if (leaf[x]) then
return NIL
else
Disk-Read(ci[x])
return B-Tree-Search(ci[x], k)
Contoh search pada B-tree Sebagai contoh, di bawah adalah B-tree dengan orde 2 (simpul
paling sedikit memiliki 2 kunci dan 3 pointer anak). Simpul dibatasi dengan kurung siku.
Kunci adalah nama kota dan terurut pada setiap simpul. Pada sisi lain dari setiap kunci
adalah pointer anak yang menghubungkan kunci pada simpul berikutnya.
Untuk menemukan kunci “Dallas”, kita mulai pencarian dari akar simpul paling
atas. “Dallas” tidak berada simpul , tetapi terurut di antara “Chicago” dan “Hoboken” jadi
kita menelusuri pointer anak yang di tengah. Sekali lagi “Dallas: tidak ada dalm simpul
tetapi terurut sebelum “Denver”, jadi kita menelusuri pointer anak yang pertama menuju
ke simpul berikutnya yang ditandai dengan “X”. Pada akhirnya kita akan menemukan
kunci yang dicari ataupun menemukan simpul daun pada tingkat bawah dari Btree tanpa
pointer anak menuju simpul bawah lain dan tanpa kunci yang kita inginkan, menandakan
bahwa kunci yang dicari tidak ada dalam B-tree.

3.2 Insertion
Untuk melakukan insertion pada sebuah B-tree, simpul yang tepat untuk kunci
harus dicari menggunakan algoritma yang sama seperti search pada B-tree. Berikutnya,
kunci disisipkan pada simpul.
Semua proses insertion terjadi pada simpul daun.
- Dengan melakukan pencarian pada pohon, temukan simpul daun di mana elemen
baru seharusnya berada. Jika simpul daun mengandung lebih sedikit dari nilai
maksimum jumlah elemen legal, maka ada tempat kosong. Sisipkan elemen baru
pada simpul, tetap jaga keterurutan elemen simpul.
- Selainnya apabila simpul penuh, simpul daun harus dipisah menjadi dua simpul.
Karena pemisahan simpul menghasilkan pemindahan sebuah kunci ke simpul
orang tuanya, simpul tersebut tidak boleh penuh atau operasi pemisahan
dilakukan kembali. Proses ini dapat berulang sepanjangperjalanan menuju akar
dan memungkinkan pemisahan simpul akar. Hal ini memerlukan dua kali pass.
Pas pertama mencari simpul di mana kunci harus diletakkan, yang kedua
melakukan pemisahan yang diperlukan pada simpul-simpul
sebelumnya.Pemisahan simpul akar ditangani sebagai kasus khusus karena simpul
baru harus dibuat untuk menampung kunci tengah dari simpul lama.
Pemisahan dilakukan sebagai berikut :
median dipilih di antara elemen daun dan elemen baru. Nilai yang lebih kecil dari median
diletakkan di simpul kiri yang baru dan nilai yang lebih besar dari median diletakkan di
simpul kanan yang baru, dengan median sebagai nilai pemisah. Nilai pemisah tersebut
ditambahkan pada simpul orang tuanya, yang dapat mnyebabkan adanya pemisahan lagi,
dst. Maksimum jmlah elemen setiap simpul adalah U-1. Ketika sebuah simpul dipisah,
satu elemen pindah ke simpul orangtuanya, tetapi
elemen lain ditambahkan. Jadi mungkin untuk membagi jmlah maksimum U-1 elemen
menjadi dua simpul legal. Jika jumlahnya ganjil maka U = 2L dan setiap simpul baru
mengandung (U-2)/2 = L-1 elemen dan kemudian menjadi simpul legal. Jika jumlahnya
genap maka U = 2L- 1, sehingga ada 2L-2 elemen pada simpul. Setengah dari jumlah
tersebut adalah L-1, merupakan jumlah elemen minimum pada
setiap simpul. Karena setiap akses pada simpul berhubungan dengan akses disk,
diusahakan menghindari pass kedua dengan memastikan bahwa simpul orang tuanya
tidak pernah penuh. Untuk memenuhi hal tersebut, algoritma yang telah dijelaskan
memisahkan setiap simpul penuh yang ditemukan ketika menelusuri pohon. Walaupan
hal ini mengakibatkan operasi pemisahan yang teidak diperlukan, hal ini menjamin setiap
simpul orang tua tidak pernah perlu dipisahkan dan menghapus kebutuhan pass kedua
pada pohon. Proses pemisahan berjalan dalam waktu yang linear sehingga mempengaruhi
pada O(t logt n) pada waktu pelaksanaan insert pada Btree. Berikut ini adalah
pseudocodes proses insert dan split pada B-tree.
• B-Tree-Insert(T,k)
r <- root[T]
if (n[r] = 2t–1)then
s <- Allocate-Node()
root[T] <- s
leaf[s] <- FALSE
n[s] <- 0
c1 <- r
B-Tree-SplitChild(s,1,r)
B-Tree-InsertNonfull(s,k)
else
B-Tree-InsertNonfull(r,k)
• B-Tree-Insert-Nonfull(T,k)
i <- n[x]
if (leaf[x])then
while (i>=1 and k<keyi[x])do
keyi+1[x] <- keyi[x]
i <- i - 1
keyi+1[x] <- k
n[x] <- n[x] + 1
Disk-Write(x)
else
while (i>=1 and k<keyi[x])do
i <- i - 1
i <- i + 1
Disk-Read(ci[x])
if (n[ci[x]] = 2t-1)then
B-Tree-SplitChild(x,i,ci[x])
if (k>keyi[x])then
i <- i + 1
B-Tree-InsertNonfull(ci[x],k)
• B-Tree-Split-Child(x,i,y)
z <- Allocate-Node()
leaf[z] <- leaf[y]
n[z] <- t-1
for j<-1 to t-1 do
keyj[z] <- keyj+t[y]
if not leaf[y]then
for j<-1 to t do
cj[z] <- cj+t[y]
n[y] <- t-1
for j<-n[x]+1 downto i+1 do
cj+1[x] <- cj[x]
ci+1 <- z
for j <- n[x] downto i do
keyj+1[x] <- keyj[x]
keyi[x] <- keyt[y]
n[x] <- n[x] + 1
Disk-Write(y)
Disk-Write(z)
Disk-Write(x)

4 Contoh Aplikasi B-Tree


Salah satu penerapan struktur data B-tree adalah database atau basis data. Basis
data ada koleksi data diatur dalam suatu cara yang memfasilitasi proses updating,
pengambilan, dan pengelolaan data. Data dapat terdiri atas apa saja, termasuk nama,
alamat, gambar, dan angka. Basis data sudah umum dan digunakan setiap hari.
Contohnya, sistem pemesanan pesawat mungkin mengatur basis data penerbangan yang
tersedia, para pelanggan, dan tiket. Seorang guru mungkin mengatur basis data nama dan
nilai murid. Karena komputer berkembangcepat, dengan tepat memanipulasi,
menyimpan, dan mengmabil data, basis data sering diatur secara eltronik dengan
menggunakan database management system. Sistem pengelolaan basis data adalah
komponen penting dalam operasi bisnis sehari-hari. Produk basis data contohnya
Microsoft SQL Server, Sybase Adaptive Server, IBMDB2,dan Oracle melayani dasar
dari sistem akuntnsi, sistem penyimpanan, sistem pencatatan medis, sistem pemesanan
tiket pesawat, dan aspek-aspek penting bisnis modern lain yang tidak terhitung
banyaknya. Basis data terdiri dari jutaan data dalam ukuran gigabyte. Sebagai contoh,
TELSTRA, sebuah perusahaan telekomunikasi Australia, mengurus basis data tagihan
pelanggan dengan 51milyar baris dan data sebanyak 4,2 terabyte. Supaya basis data
berguna dan dapat digunakan, maka harus mendukung operasi seperti pengambilan dan
penyimpanan secara cepat. Karena basis data tidak dapat diatur seluruhnya di memori, B-
tree sering digunakan mengurutkan data dan akses yang cepat. Contohnya, mencari basis
data yang tidak terurut terdiri dari n nilai kunci memiliki alternatif yang lain karena
waktu akses dalam simpulnya cepat.
Sebuah B-Tree didesain untukdigunakan pada disk. Sebuah Btree menyimpan
banyak kunci di setap simpulnya sehingga dapat mengakses banyak kunci, dan faktor
cabang pohon sangat tinggi sehingga pohon dengan ketinggian kecil dapat menyimpan
kunci dalam jumlah yang sangat besar, yang dapat diakses hanya dengan beberapa
operasi. Salah satu penerapan struktur data B-tree adalah database atau basis data.
BAB II
SEARCHING

5. Pengertian Searching

Searching adalah pencarian data dengan menelusuri tempat pencarian data tersebut.
Tempat pencarian data tersebut dapat berupa array dalam memori, bias juga pada
file pada external storage. Pada suatu data seringkali dibutuhkan pembacaan
kembali informasi (retrieval information) dengan cara searching.

5.1 Teknik-teknik Searching

o Sequential Search adalah suatu teknik pencarian data dalam array (1


dimensi) yang akan menelusuri semua elemen-elemen array dari awal sampai
akhir, dimana data-data tidak perlu diurutkan terlebih dahulu. Kemungkinan
terbaik (best case) adalah jika data yang dicari terletak di indeks array terdepan
(elemen array pertama) sehingga waktu yang dibutuhkan untuk pencarian data
sangat sebentar (minimal).
Kemungkinan terburuk (worst case) adalah jika data yang dicari terletak di
indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkan
untuk pencarian data sangat lama (maksimal).

Misalnya terdapat array satu dimensi sebagai berikut:


Kemudian program akan meminta data yang akan dicari, misalnya 6. Jika ada
maka akan ditampilkan tulisan “ADA”, sedangkan jika tidak ada
maka akan ditampilkan tulisan “TIDAK ADA”.

#include <stdio.h>
#include <conio.h>

void main(){
clrscr();
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int flag=0;
printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);
for(int i=0;i<8;i++){
if(data[i] == cari) flag=1;
}
if(flag==1) printf("Data ada!\n");
else printf("Data tidak ada!\n");

- Dari program diatas, terlihat bahwa dilakukan perulangan untuk mengakses


semua elemen array data satu persatu berdasarkan indeksnya.
- Program menggunakan sebuah variabel flag berguna untuk menandai ada atau
tidaknya data yang dicari dalam array data. Hanya bernilai 0 atau 1.
- Flag pertama kali diinisialiasasi dengan nilai 0.
- Jika ditemukan, maka flag akan diset menjadi 1, jika tidak ada maka flag akan
tetap bernilai 0.
- Semua elemen array data akan dibandingkan satu persatu dengan data yang
dicari dan diinputkan oleh user.

o Binary Search adalah teknik pencarian data dalam dengan cara membagi
data menjadi dua bagian setiap kali terjadi proses pengurutan. Data yang ada
harus diurutkan terlebih dahulu berdasarkan suatu urutan tertentu yang
dijadikan kunci pencarian.

Prinsip pencarian biner adalah:


- Data diambil dari posisi 1 sampai posisi akhir N
- Kemudian cari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2
- Kemudian data yang dicari dibandingkan dengan data yang ditengah, apakah
sama atau lebih kecil, atau lebih besar?
- Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi
tengah + 1
- Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi
tengah – 1
- Jika data sama, berarti ketemu.

o Interpolation Search, teknik ini dilakukan pada data yang sudah terurut
berdasarkan kunci tertentu. Teknik searching ini dilakukan dengan perkiraan
letak data.
Contoh ilustrasi: jika kita hendak mencari suatu nama di dalam buku telepon,
misal yang berawalan dengan huruf T, maka kita tidak akan mencarinya dari
awal buku, tapi kita langsung membukanya pada 2/3 atau ¾ dari tebal buku.
Jadi kita mencari data secara relatif terhadap jumlah data.
Rumus posisi relatif kunci pencarian dihitung dengan rumus:

Contoh program :
BAB III
SORTING

6. Sorting

Pengurutan (Sorting) adalah proses menyusun kembali data yang sebelumnya telah
disusun dengan suatu pola tertentu, sehingga tersusun secara teratur menurut aturan
tertentu.Pengurutan data dalam struktur data sangat penting untuk data yang bertipe data
numerik ataupun karakter. Pengurutan dapat dilakukan secara ascending dan descending.

METODE PENGURUTAN DATA:


• Pengurutan berdasarkan perbandingan (comparison-based sorting)
• Bubble sort, exchange sort
• Pengurutan berdasarkan prioritas (priority queue sorting method)
• Selection sort, heap sort
• Pengurutan berdasarkan penyisipan dan penjagaan terurut (insert and keep sorted
method)
• Insertion sort, tree sort
• Pengurutan berdasarkan pembagian dan penguasaan (devide and conquer method)
• Quick sort, merge sort
• Pengurutan berkurang menurun (diminishing increment sort method)
• Shell sort

6.1. Bubble Sort

Buble Sort merupakan metode sorting termudah. Diberi nama “Bubble” karena
proses pengurutan secara berangsur-angsur bergerak / berpindah ke posisinya yang tepat,
seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data
dengan cara membandingkan elemen sekarang dengan elemen berikutnya. Algoritma ini
seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan,
tergantung jenis pengurutannya.

Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses,
demikian seterusnya. Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada
pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan.

Contoh prosedur:
Versi 1
void bubble_sort(){
for(int i=1;i<n;i++){
for(int j=n-1;j>=i;j--){
if(data[j]<data[j-1])
tukar(&data[j],&data[j-1]); //ascending
}
}
}

Versi 2
void bubblesort2(){
for(i=1;i<6;i++){
for(int j=0;j<6-i;j++){
if(data[j]>data[j+1])
tukar(&data[j],&data[j+1]); //descending
}
}
}

“The bubble sort is an easy algorithm to program, but it is slower than many other
sorts”
6.2. Selection Sort

Merupakan kombinasi antara sorting dan searching. Untuk setiap proses, akan
dicari elemen-elemen yang belum diurutkan yang memiliki nilai terkecil atau terbesar
akan dipertukarkan ke posisi yang tepat di dalam array. Misalnya untuk putaran pertama,
akan dicari data dengan nilai terkecil dan data ini akan ditempatkan di indeks terkecil
(data[0]), pada putaran kedua akan dicari data kedua terkecil, dan akan ditempatkan di
indeks kedua (data[1]).
Selama proses, pembandingan dan pengubahan hanya dilakukan pada indeks
pembanding saja, pertukaran data secara fisik terjadi pada akhir proses.

Contoh prosedur:
void selection_sort(){
for(int i=0;i<n-1;i++){
pos = i;
for(int j=i+1;j<n;j++){
if(data[j] < data[pos]) pos = j; //ascending
}
if(pos != i) tukar(pos,i);
}
}

6.3. Insertion Sort

Mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil
dan disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2
sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan
ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka elemen-
elemen lain akan bergeser ke belakang.

Contoh prosedur:
void insertion_sort(){
int temp;
for(int i=1;i<n;i++){
temp = data[i];
j = i -1;
while(data[j]>temp && j>=0){
data[j+1] = data[j];
j--;
}
data[j+1] = temp;
}
}

6.4. Tabel Perbandingan Kecepatan Metode Pengurutan Data

Untuk data sejumlah 10.000 data pada komputer Pentium II 450 MHz

Metode Waktu (detik)


Data Acak Data Ascending Data Descending
Bubble Sort 11,2 1,32 19,77
Insertion Sort 11,09 0,00 2,25
Selection Sort 1,32 1,32 19,77
DAFTAR PUSTAKA

[1] Carlson, David. (2006).http://cis.stvincent.edu/html/tutorials/swd/btree/btree.html.


Tanggal akses :2 Januari 2007 pukul 10:30 WIB
[2] Liem, Inggriani. (2001). Diktat Struktur Data IF222 Kurikulum 1998.Jurusan Teknik
Informatika, InstitutTeknologi Bandung.
[3] Munir, Rinaldi. (2004). Diktat Kuliah IF2151 Matematika Diskrit.Departemen Teknik
Informatika,Institut Teknologi Bandung

You might also like