Algoritma Searching dalam Struktur Data
Algoritma Searching dalam Struktur Data
SEARCHING
NNZZZZ
OLEH :
DAFTAR ISI.............................................................................................. ii
BAB I PENDAHULUAN.......................................................................... 2
1.1 Sejarah Struktur Data...................................................................... 2
BAB II PEMBAHASAN........................................................................... 14
2.1 Pengertian Searching...................................................................... 14
2.2 Macam - Macam Algoritma Searching........................................... 18
2.3 Contoh Program Searching............................................................. 23
DAFTAR PUSTAKA................................................................................ 38
ii
BAB I
PENDAHULUAN
Pada pembuatan makalah kali ini kami akan membahas tentang Pencarian
(Searching), dengaSSn metode Sequential Searching. Sequential Search
(pencarian beruntun) menggunakan prinsip sebagai berikut, data yang ada di
bandingkan satu persatu secara berurutan dengan yang dicari sampai data tersebut
ditemukan atau tidak di temukan.
Pengertian searchig.
a. Pencarian sekuensial.
1
1.1 Sejarah Struktur Data
Larik (Array)
Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan
tertentu yang menggunakan sebuah nama yang sama.
3. Rekaman (Record)
Adalah sebuah rekaman yang disusun oleh beberapa field. Tiap field berisi
data dari tipe dasar / bentukan tertentu. Record mempunyai kelebihan untuk
menyimpan suatu sekumpulan elemen data yang berbeda-beda tipenya.
1. Linier
2
Stack merupakan sebuah koleksi objek yang menggunakan prinsip LIFO
(Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali
keluar dari stack tersebut.
Queue adalah sekumpulan data yang mana penambahan elemen hanya bisa
dilakukan pada suatu ujung disebut dengan sisi belakang, dan penghapusan
(pengambilan elemen) dilakukan lewat sisi depan.
List merupakan struktur data yang terdiri atas rangkaian elemen sejenis
yang saling berhubungan.
Untuk membuat menjadi struktur data, kita harus melakukan dulu aktivitas
terhadap objek data, yaitu :
3
a. Mendeskripsikan kumpulan operasi sah yang diterapkan ke elemen-elemen
objek data.
b. Menunjukan mekanisme kerja operasi-operasi.
4
STRUKTUR DATA
Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi
kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) ataupun
kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak
oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan
catatan (record).
Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang
lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada
kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat
diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan)
atau untuk pengolah kata (word processor) yang kolomnya berubah secara
dinamis.
LINKED LIST
Atau dikenal juga dengan sebutan senarai berantai adalah struktur data
yang terdiri dari urutan record data dimana setiap record memiliki field yang
menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data
yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam
suatu linked list, terdapat istilah head dan tail. Head adalah elemen yang berada
pada posisi pertama dalam suatu linked list dan Tail adalah elemen yang berada
5
pada posisi terakhir dalam suatu linked list Ada beberapa macam Linked List,
yaitu :
Single Linked List merupakan suatu linked list yang hanya memiliki satu
variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya.
Biasanya field pada tail menunjuk ke NULL.
Double Linked List merupakan suatu linked list yang memiliki dua
variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer
yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke
NULL.
6
Circular Linked List
Circular Linked List merupakan suatu linked list dimana tail (node
terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk
NULL.
Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat
variabel pointer. contoh :
7
Linked list
-Kerugiannya adalah :
2. Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked
list. Keuntungannya adalah : 1.) Jenis data yang berbeda dapat di-link.
STACK (TUMPUKAN)
8
record dalam bentuk sederhana atau terstruktur. Stack adalah suatu tumpukan dari
benda.
Konsep utamanya adalah LIFO (Last In First Out), benda yang terakhir
masuk dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.
Operasi yang sering diterapkan pada struktur data Stack (Tumpukan) adalah Push
dan Pop. Operasi – operasi yang dapat diterapkan adalah sebagai berikut :
1. Push : digunakan untuk menembah item pada Stack pada Tumpukan paling
atas.
2. Pop : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.
6. IsEmpty : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.
7. Isfull : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh.
-Kekurangannya adalah : Setiap sel tidak hanya menyimpan value saja, melainkan
juga pointer ke sel berikutnya.
Tiap elemen pada linked list hanya bisa diakses dengan cara sekuensial,
sehingga lambat, yaitu 0 (n).
9
QUEUE
Queue (antrian) adalah struktur data dimana data yang pertama kali
dimasukkan adalah data yang pertama kali bisa dihapus. Atau bisa juga disebut
dengan struktur data yang menggunakan mekanisme FIFO (First In First Out).
TREE
10
fisikdari pola hubungan antar komponen jaringan yang meliputi
server,workstation,hub dan perkabelan.
4. Jika salah satu client mengalami kerusakan atau gangguan, tidak akan
mempengaruhi client lain.
5. Manajemen data yang baik, sebab komunikasi terjadi secara point to point.
1. Jika kabel utama (backbone) rusak, maka seluruh jaringan akan terganggu.
2. Hub memegang peran penting dalam jaringan, jika hub rusak maka seluruh
jaringan akan terganggu.
11
3. Jika komputer yang berada di tingkat atas mengalami kerusakan atau gangguan,
maka komputer yang berada dibawahnya juga akan mengalami gangguan.
4. Biaya yang diperlukan dalam membangun jaringan ini lebih mahal, sebab
menggunakan lebih banyak kabel dan hub.
5. Konfigurasi dan pemasangan kabel dalam jaringan tree lebih rumit dibanding
topologi lain.
7. Kinerja jaringan serta aliran data lebih lambat, sebab komunikasi antar
komputer tidak bisa berjalan langsung, namun harus melalui hub terlebih dahulu.
8. Lalu lintas data sangat padat, sebab melalui sebuah kabel utama (backbone),
sehingga kemungkinan terjadinya collision (tabrakan file data) sangat besar.
BINARY TREE
Definisi Binary Tree Binary Tree atau Pohon Biner adalah sebuah pohon
dalam struktur data yang bersifat hirarkis (hubungan one to many).
Binary tree tidak memiliki lebih dari tiga level dari Root. Binary tree
adalah suatu tree dengan syarat bahawa tiap node (simpul) hanya boleh memiliki
maksimal dua subtree dan kedua subtree tersebut harus terpisah.
Tiap node dalam binary treee boleh memiliki paling banyak dua child
(anak simpul), secara khusus anaknya dinamakan kiri dan kanan. Pohon biner
dapat juga disimpan sebagai struktur data implisit dalam array, dan jika pohon
tersebut merupakan sebuah pohon biner
12
Lengkap, metode ini tidak boros tempat. Dalam penyusunan yang rapat
ini, jika sebuah simpul memiliki indeks i, anaknya dapat ditemukan pada indeks
ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada indeks lantai ((i-
1)/2) (asumsikan akarnya memiliki indeks kosong).
-Kelebihan dari pohon biner adalah : Semua operasi dalam Binary Tree bisa di
implementasikan langsung pada Binary Search Tree , kecuali :
• INSERT
• UPDATE
• DELETEKEY
Karena operasi diatas dapat mengakibatkan Binary Search Tree tidak urut.
Sehingga harus dilakukan modifikasi terhadap posisi node agar Binary Search
Tree tetap terurut.
Tidak efisien dalam pencarian (searching the target Node), yang harus
dilakukan secara sequensial dari mulai ROOT, sampai ke Node yang dikehendaki.
Selain juga penghapusan terhadap Node Binary Tree tidak dapat dilakukan, yang
dapat dilakukan penghapusan 1 sub tree. Hal ini disebabkan karena pada Binary
Tree node tidak diurut. Binary Search Tree mengeliminir kelemahan tersebut
diatas, dengan cara mengurutkan node yang ada.
13
14
BAB II
PEMBAHASAN
Data dapat disimpan secara temporer dalam memori utama atau disimpan
secara permanen di dalam memori sekunder (tape atau disk). Di dalam memori
utama, struktur penyimpanan data yang umum adalah berupa larik atau tabel
(array), sedangkan di dalam memori sekunder berupa arsip (file).
15
SEARCHING (Sequential Search dan Binarry Search)
a. Sequential Search
Dalam ilmu komputer, suatu pencarian struktur data adalah setiap struktur
data yang memungkinkan pengambilan suatu item tertentu dari satu set item,
seperti sebuah data khusus dari suatu database yang bertipe sama. Pencarian
berfungsi untuk memvalidasi (mencocokkan) data.
16
Metode Searching :
1. Sequential Search
Sequential Search (Linear Search) Teknik pencarian data dari array yang
paling mudah adalah dengan cara sequential search, dimana data dalam array
dibaca 1 demi satu, diurutkan dari index terkecil ke index terbesar, maupun
sebaliknya.
Contoh : Array : int a[5] = {0,3,6,10,1} (index array pada bahasa C++ dimulai
dari index ke 0 !!!) jika kita ingin mencari bilangan 6 dalam array tersebut, maka
proses yang terjadi kita mencari a) dari array index ke-0, yaitu 0, dicocokan
dengan bilangan yang akan dicari, jika tidak sama, maka mencari ke index
berikutnya b) pada array index ke-1, juga bukan bilangan yang dicari, maka kita
mencari lagi pada index berikutnya c) pada array index ke-2, ternyata bilangan
yang kita cari ada ditemukan, maka kita keluar dari looping pencarian.
Contoh source :
17
Output :
Pada metode pencarian ini, kita mencoba menebak letak data yang kita
cari, dengan perhitungan :
• Jika data[posisi] > data yg dicari, high = pos – 1 • Jika data[posisi] < data yg
dicari, low = pos + 1.
18
Output :
Pencarian Sekuensial
Algoritma
1. Data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari
sampai data tersebut ditemukan atau tidak ditemukan.
4. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir
pengulangan tidak ada data yang sama, berarti data tidak ada.
19
-Kelemahan pada kasus yang paling buruk, untuk N elemen data harus dilakukan
pencarian sebanyak N kali pula. Algoritma pencarian berurutan dapat dituliskan
sebagai berikut :
(1) i ← 0
(2) ketemu ← false
(3) Selama (tidak ketemu) dan (i <= N) kerjakan baris 4
(4) Jika (Data[i] = x) maka ketemu ← true, jika tidak i ← i + 1
(5) Jika (ketemu) maka i adalah indeks dari data yang dicari, jika data tidak
ditemukan.
#include <iostream.h>
#include <conio.h>
void main()
{
int i;
int cari,ketemu;
int A[100] ;
cout<<"PROGRAM SEARCHING\n";
cout<<"masukkan 7 buah data : \n\n";
for (i=1;i<=7;i++)
{
cout<<"masukkan data ke-"<<i<<endl;
cin>>A[i] ;
}
cout<<endl;
cout<<"Input bilangan yang dicari : ";
20
cin>>cari;
ketemu=0;
for(i=0;i<=7;i++)
{
if (A[i]==cari)
{
ketemu=1;
cout<<"Data ditemukan pada indeks ke-"<<i;
}
}
if (ketemu==0){
cout<<"Data tidak ditemukan";
}
getch();
}
Contoh program nya dalam bahasa C :
#include <stdio.h>
#include <conio.h>
void main(){
int data[10] = {8,10,6,-2,11,7,1,100,11,3};
int cari;
int flag=0;
printf("data = 8,10,6,-2,11,7,1,100,11,3")
printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);
21
for(int i=0;i<10;i++){
if(data[i] == cari) flag=1;
}
if(flag==1) printf("Data ada!\n");
else printf("Data tidak ada!\n");
getch();
return 1;
}
Outputnya adalah :
Algoritma
Procedure SeqSearchWithSentinel
(input L: LarikInt, input n: integer, input x: integer, output idx: integer)
DEKLARASI
I: integer
ALGORITMA
22
L[n+1] ← X {sentinel}
I←1
While (L[i] ≠ x) do
I ← i+1
Endwhile
If idx = n+1 then
idx ← -1
else
idx ← 1
endif
23
2.3 Contoh Program Searching
int i;
int cari,ketemu;
int A[100] ;
cout<<"PROGRAM SEARCHING\n";
cout<<"masukkan 7 buah data : \n\n";
for (i=1;i<=7;i++)
{
cout<<"masukkan data ke-"<<i<<endl;
cin>>A[i] ;
}
cout<<endl;
cout<<"Input bilangan yang dicari : ";
cin>>cari;
ketemu=0;
for(i=0;i<=7;i++)
{
24
if (A[i]==cari)
{
ketemu=1;
cout<<"Data ditemukan pada indeks ke-"<<i;
}
}
if (ketemu==0){
cout<<"Data tidak ditemukan";
}
getch();
}
Outputnya adalah :
25
int cari,index;
int ketemu=0;
cout<<" Data = 8,10,6,-2,10,7,1,100,1,3 \n ";
cout<<"masukkan data yang ingin dicari = ";
cin>>cari;
for(int i=0;i<10;i++)
{
if(data[i] == cari)
{
ketemu=1;
index = i;
break;
}
}
if(ketemu == 1)
{
cout<<"Data ada!"<<endl;
cout<<"Data terletak di index ke – "<<index;
}
else cout<<"Data Tidak ada!"<<endl;
getch();
}
Outputnya adalah :
26
Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array
sudah teruru. pengurutan Array bisa menggunakan jenis sorting descending atau
asscending. Kelebihan dari Searching dengan metode Binary Sort adalah Untuk
Pencarian data yang jumlahnya banyak, waktu pencarian relatif cepat. selain itu
beban komputasi juga lebih kecil karena pencarian dilakukan dari depan,
belakang, dan tengah. namun ada pula kekurangannya, yaitu data harus disorting
dahulu dan Algoritma lebih rumit, tidak baik untuk data berangkai.
Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut :
1.Membaca Array data
2.Apabila Array belum terurut maka array diurutkan terlebih dahulu.
3.Menentukan data yang akan dicari
4.Menentukan elemen tengah dari array
5.Jika nilai elemen tengah sama dengan data yang dicari, maka pencarian
berhenti.
6.Jika elemen tengah tidak sama dengan data yang dicari maka :
a.Jika nilai elemen tengah > data yang dicari maka pencarian dilakukan pada
setengah array pertama.
b.Jika nilai elemen tengah lebih kecil dari pada data yang dicari maka pencarian
dilakukan pada setengah array berikutnya.
27
Setelah data tersebut diurutkan maka fungsi binary sort baru mulai bekerja
mencari data. berikut cara dari Binary sort mencari data tersebut. misalnya data
yang dicari adalah 65. maka pencariannya dijelaskan pada tabel berikut ini :
Pada data range diberi warna Hijau. Pencarian dimulai dari tengah,Kiri dan kanan.
rumus untuk Posisi tengahnya adalah ( Posisi Akhir + Posisi Awal )/2. jadi Nilai
tengah pada langkah pertama yaitu adalah 12 (berwarna merah) dan nilai
targetnya adalah 65 (kuning). Karena nilai data yang dicari > dari data yang
ditengah, maka pencarian menjadi dikanan dari nilai tengah. Setelah itu, Maka
nilai 12 menjadi awal pencarian, selanjutnya dicari kembali nilai tengah pada
range nilai 12 ke kanan sampai pada array dengan nilai 90. ternyata nilai
tengahnya adalah 40. kemudian array dari nilai 40 dibandingkan dengan target,
ternyata lebih besar, maka pencarian kembali mengarah ke kanan nilai tengah.
Array dengan nilai 40 menjadi titik awal pencarian sekarang. dan sekarang nilai
tengah nya adalah 65. maka dibandingkan dengan target ternyata sama, maka data
sudah Ditemukan. Setiap data di subtree kiri < data root subtree < setiap data di
subtree kanan.
Algoritma
class BinaryNode {
void printInOrder( ){
if( left != null )
left.printInOrder( ); // kiri
System.out.println( element ); // Node
if( right != null )
right.printInOrder( ); // Right
28
}
}
class BinaryTree {
public void printInOrder( ){
Contoh :
L ←0
R←N–1
ketemu ← false
Selama (L <= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8
m ← (L + R) / 2 83
Jika (Data[m] = x) maka ketemu ← true
Jika (x < Data[m]) maka R ← m – 1 Jika (x > Data[m]) maka L ← m + 1
Jika (ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak
ditemukan.
int binary_search(int cari){
29
int l,r,m;
l = 0;
r = n-1;
int ktm = 0;
while(l<=r && ktm==0){
m = (l+r)/2;
if(data[m] == cari) ktm=1;
else if (cari < data[m]) r=m-1;
else l=m+1; {
if(ktm==1)
return 1;
else return 0;
}
}
}
30
scanf("%d",&search);
first = 0;
last = n - 1;
middle = (first+last)/2;
return 0;
}
Outputnya adalah :
31
Contoh lainnya :
#include <iostream.h>
#include <conio.h>
int binary_s(int array[], int size, int elemen)
{
int awal = 0;
int akhir = size-1;
int nilaiTengah;
while (nilaiTengah<=size && awal<=akhir)
{
nilaiTengah = (awal+akhir)/2;
if (array[nilaiTengah]==elemen)
return 1;
else if (elemen<array[nilaiTengah])
akhir = nilaiTengah-1;
else
awal = nilaiTengah+1;
}
return 0;
}
int main()
{
int size=10;
32
int data[10]={2, 3, 5, 6, 12, 44, 56, 65, 73 ,81} ;
cout<<"Data Array"<<endl;
int i, cari, hasil;
for(i=0;i<size;i++)
cout<<data[i]<<" ";
cout<<endl<<"masukkan data yang ingin anda cari: ";cin>>cari;
hasil = binary_s(data, size, cari);
if (hasil==0)
cout<<"Nilai tidak ditemukan";
else
cout<<"Nilai ditemukan";
getch();
}
Outputnya adalah :
Contoh lainnya :
#include<iostream.h>
#include<conio.h>
int data[10] = {1,3,4,7,12,25,40,65,78,90}; //variabel global
int binary_search(int cari)
{
int l,r,m;
int n = 10;
l = 0;
r = n-1;
int ketemu = 0;
while(l<=r && ketemu==0)
33
{
m = (l+r)/2;
if( data[m] == cari )
ketemu = 1;
else
if (cari < data[m])
r = m-1;
else l = m+1;
}
if(ketemu == 1) return 1; else return 0;
}
void main()
{
clrscr();
int cari,hasil;
cout<<"data = 1,3,4,7,12,25,40,65,78,90 \n";
cout<<"masukkan data yang ingin dicari = ";
cin>>cari;
hasil = binary_search(cari);
if(hasil == 1)
{
cout<<"Data ada!"<<endl;
}
else
if(hasil == 0)
cout<<"Data Tidak ada!"<<endl;
getch();
}
Outputnya adalah :
34
BAB III
PENUTUP
3.1 Kesimpulan
Sequential search lebih efektif jika digunakan pada sekumpulan data yang
sedikit, sedangkan binary search efektif jika digunakan pada sekumpulan data
yang berjumlah banyak. Sequential search dapat digunakan pada sekumpulan data
yang urut ataupun tidak urut, sedangkan binary search harus pada data yang sudah
urut. Sedangkan proses pencarian interpolation search hampir mirip dengan proses
pencarian kata dikamus, yaitu kita mencari data yang dimaksud dengan cara
memperkirakan letak data.
35
DAFTAR
PUSTAKA
36
37