SEARCHING (PENCARIAN)
MAKALAH
Untuk memenuhi tugas matakuliah
Pemrograman Komputer
yang dibina oleh Bapak Mohamad Yasin, S.Kom., M.Kom.
Oleh :
Indah Rahayu Ningtyas
170312612073
UNIVERSITAS NEGERI MALANG
JURUSAN MATEMATIKA
S1MATEMATIKA
Februari 2019
KATA PENGANTAR
Puji syukur kepada hadirat Tuhan Yang Maha Esa, karena dengan rahmat
dan karunia-Nya penulis dapat menyelesaikan makalah ini. Tujuan penulisan
makalah ini adalah untuk menambah pengetahuan dalam pembelajaran matakuliah
PemrogramanKomputer, khususnya pada materi searching.
Penulis mengharapkan tugas ini dapat memberikan pengalaman yang
berguna baik bagi pembaca, yang tentunya akan menambah ilmu dan wawasan
berfikir mahasiswa. Terima kasih pada pihak-pihak yang membantu penyusunan
makalah ini semoga makalah ini dapat berguna bagi mahasiswa khususnya,
maupun bagi masyarakat pada umumnya.
Penulis menyadari bahwa makalah ini masih jauh dari sempurna, oleh
karena itu kritik dan saran dari semua pihak yang bersifat membangun selalu kami
harapkan demi kesempurnaan penulisan selanjutnya.
Malang, 16 Februari 2019
Penulis
i
DAFTAR ISI
Halaman
KATA PENGANTAR..........................................................................................i
DAFTAR ISI.........................................................................................................ii
BAB I PENDAHULUAN
1.1 Rumusan Masalah..............................................................................1
1.2 Tujuan Penulisan................................................................................1
BAB II ISI
2.1 Definisi Searching..............................................................................2
2.2 Metode Searching...............................................................................3
2.2.1 Sequential Search......................................................................3
2.2.2 Binary Search............................................................................3
2.2.3 Interpolation Search..................................................................4
2.3 IlustrasiAlgoritma Searching.............................................................4
2.3.1 Sequential Search......................................................................4
2.3.2 Binary Search............................................................................5
2.3.3 Interpolation Search..................................................................8
2.4 Algoritma Searching..........................................................................10
2.4.1 Sequential Search......................................................................10
2.4.2 Binary Search............................................................................11
2.4.3 Interpolation Search..................................................................12
2.5 Program Searching.............................................................................13
BAB III PENUTUP
3.1 Kesimpulan .......................................................................................21
3.2 Saran ..................................................................................................21
DAFTAR RUJUKAN ......................................................................................... 22
ii
BAB I
PENDAHULUAN
1.1 Rumusan Masalah
Rumusan masalah pada makalah ini adalah sebagai berikut.
1. Apakah yang dimaksud dengan searching?
2. Sebutkan dan jelaskan tiga metode searching!
3. Buat ilustrasi dengan masing-masing algoritma searching tersebut!
4. Buatalgoritma (dengan menggunakan stringgrid) sebagai presentasi
penampilan data!
5. Buat program untuk mengimplementasikan metode searching tersebut!
1.2 Tujuan Penulisan
Berdasarkan rumusan masalah diatas, maka tujuan pada makalah ini
sebagai berikut.
1. Dapat memahami apa yang dimaksud dengan searching.
2. Dapat menyebutkan dan menjelaskan tiga metode searching.
3. Dapat membuat ilustrasi dengan masing-masing algoritma searching
tersebut.
4. Dapat membuat algoritma (dengan menggunakan stringgrid) sebagai
presentasi penampilan data.
5. Dapat membuat program untuk mengimplementasikan metode
searching tersebut.
1
BAB II
PEMBAHASAN
2.1 Definisi Searching
Searching (pencarian) merupakan proses yang fundamental dalam
pengolahan data. Proses pencarian diartikan sebagai sebuah cara atau
prosedur untuk nilai (data) tertentu di dalam sekumpulan data yang bertipe
data sama (baik bertipe dasar atau bertipe bentukan). Pencarian terbagi
menjadi dua, yaitu pencarian internal dan eksternal. Pencarian internal
adalah pencarian terhadap sekumpulan data yang disimpan di dalam memori
utama (primary memory). Sedangkan pencarian eksternal adalah pencarian
terhadap sekumpulan data yang disimpan di dalam memori sekunder
(secondary memory), seperti tape atau disk.
Sebuah algoritma pencarian dijelaskan secara luas adalah sebuah
algoritma yang menerima masukan berupa sebuah masalah dan
menghasilkan sebuah solusi untuk masalah tersebut, yang biasanya didapat
dari evaluasi beberapa kemungkinan solusi. Algoritma pencarian (searching
algorithm) adalah algoritma yang menerima sebuah kata kunci dan dengan
langkah-langkah tertentu akan mencari rekaman dengan kata kunci tersebut.
Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua
kemungkinan, yaitu data yang dicari ditemukan atau tidak ditemukan.
2
3
2.2 Metode Searching
Pencarian dapat dilakukan dengan berbagai metode, yaitu sequential
search, binary search, dan interpolation search. Berikut ini akan dijelaskan
lebih lanjut tentang tiga metode tersebut.
2.2.1 Sequential Search
Sequential search (pencarian beruntun) merupakan metode
pencarian paling sederhana. Pencarian beruntun adalah proses
pencarian dengan membandingkan setiap elemen larik satu per satu
secara beruntun, mulai dari elemen pertama sampai elemen yang
dicari ditemukan atau seluruh elemen sudah diperiksa. Metode ini
disebut juga metode pencarian lurus (linear search). Pencarian
beruntun terbagi dua, yaitu pencarian beruntun pada larik terurut dan
pencarian beruntun pada larik tidak terurut.
2.2.2 Binary Search
Binary search (pencarian bagi dua) adalah metode pencarian
yang diterapkan pada sekumpulan data yang sudah terurut (terurut
menaik atau terurut menurun). Data yang disimpan di dalam larik harus
sudah terurut. Metode ini merupakan metode paling efisien. Metode ini
sering digunakan untuk pencarian data yang jumlahnya banyak
dengan waktu yang relatif cepat. Salah satu keuntungan data terurut
adalah memudahkan pencarian, dalam hal ini pencarian bagi dua.
4
2.2.3 Interpolation Search
Proses pencarian interpolasi (interpolation search) hampir sama
dengan proses pencarian binary search, dimana pencarian juga
dilakukan pada kumpulan data yang sudah urut. Jika data belum urut,
maka data yang akan dipakai harus diurutkan terlebih dahulu, sebelum
dapat dilakukan pencarian dengan metode ini.
Contoh pencarian dengan metode ini misalnya pencarian nomer
telpon pada daftar phonebook. Misalnya nama data yang dicari
berawalan huruf R, maka pencariannya tidak akan dilakukan dari
awal, namun langsung membuka 2/3 atau 3/4 dari tebal buku.
Jadi, data yang dicari relatif terhadap jumlah data.
Pada metode pencarian ini, kita mencoba menebak letak data
yang kita cari, dengan perhitungan sebagai berikut.
Jika data[posisi] > data yg dicari, high = pos – 1
Jika data[posisi] < data yg dicari, low = pos + 1
2.3 IlustrasiAlgoritma Searching
2.3.1 Sequential Search
Data:
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
Misalkan nilai yang dicari x = 18
5
Elemen yang dibandingkan (berturut-turut): 7, 10, 13, 16, 18
(ditemukan)
Indeks larik yang dikembalikan : idx= 5
Misalkan nilai yang dicari : x = 20
Elemen yang dibandingkan (berturut-turut) : 7, 10, 13, 16, 18,
21, 76, 81 (tidak ditemukan)
Indeks larik yang dikembalikan : idx = -1
2.3.2 Binary Search
Data:
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
Catatan: data yang akan digunakan harus sudah terurut.
i. Misalkan data yang akan dicari x = 18
Langkah 1 :
i = 1 dan j = 8 Indeks elemen tengah k = (i+j)div2 = (1+8)div2 = 4
(elemen yang berwarna merah)
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
kiri kanan
Langkah 2 :
Pembanding A[4] = 18? (Tidak)
Maka harus diputuskan apakah pencarian akan dilakukan di bagian
kiri atau di bagian kanan dengan pemeriksaan sebagai berikut:
6
Pembanding A[4] <18? (Iya)
Maka lakukan pencarian pada larik bagian kanan dengan i = k +1 =
4 + 1 = 5 dan j = 8 (tetap)
18 21 76 81
i=5 6 7 8=j
Langkah 1’ :
i = 5 dan j = 8 dimana A[5]= 18 (data ditemukan).
18
5
ii. Misalkan data yang akan dicari x = 20
Langkah 1 :
i = 1 dan j = 8
Indeks elemen tengah k = (i+j)div2 = (1+8)div2 = 4 ( elemen yang
berwarna merah)
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
kiri kanan
Langkah 2 :
Pembanding A[4] = 20? (Tidak)
Maka harus diputuskan apakah pencarian akan dilakukan di bagian
kiri atau di bagian kanan dengan pemeriksaan sebagai berikut:
Pembanding A[4] <20? (Iya)
Maka lakukan pencarian pada larik bagian kanan dengan i = k +1 =
4 + 1 = 5 dan j = 8 (tetap)
7
18 21 76 81
i=5 6 7 8=j
Langkah 1’ :
i = 5 dan j = 8
Indeks elemen tengah k = (i+j) div 2 = (5+8) div 2 = 6 ( elemen
yang berwarna merah)
18 21 76 81
5 6 7 8
(kiri)’ (kanan)’
Langkah 2’ :
Pembanding A[6] = 20? (Tidak)
Maka harus diputuskan apakah pencarian akan dilakukan di bagian
kiri atau di bagian kanan dengan pemeriksaan sebagai berikut:
Pembanding A[6] <20? (Tidak)
Maka lakukan pencarian pada larik bagian kiri dengan j = k -1 = 6 -
1 = 5 dan i= 5 (tetap)
18
5
Langkah 1’’:
i = 5 dan j = 5
Indeks elemen tengah k = (i+j) div 2 = (5+5) div 2 = 5
Langkah 2’’ :
Pembanding A[5] = 20? (Tidak)
8
Maka harus diputuskan apakah pencarian akan dilakukan di bagian
kiri atau di bagian kanan dengan pemeriksaan sebagai berikut:
Pembanding A[5] <20? (Iya)
Maka lakukan pencarian pada larik bagian kiri dengan i = k+1 =
5+1 = 6 dan j= 5 (tetap) .
Langkah 1’’’:
i = 6 dan j = 5,dimana A[6] data tidak ditemukan.
2.3.3 Interpolation Search
Data:
7 10 13 16 18 21 76 81
1 2 3 4 5 6 7 8
Catatan: data yang akan digunakan harus sudah terurut.
i. Misalkan data yang akan dicari x = 18
Langkah 1 :
Low =1
High = 8, dimana A[1]<=18 dan A[8]>=18
Pos = ( (C-A[low]) div (A[high]-A[low]) ) * (high-low) + low
= ( (18 -A[1] ) div ( A[8]-A[1] ) ) * (8-1) ) + 1
= ( (18 -7) div (81-7) ) * (8-1) + 1
= 1
Langkah 2 :
Pembanding A[1] = 18? (Tidak)
Pembanding A[1] <18? (Iya)
9
Maka lakukan pencarian dengan low = pos+1 = 1+1 = 2 dan
high = 8 (tetap)
Langkah 1’ :
Low =2
High = 8, dimana A[2]<=18 dan A[8]>=18
Pos = ( (C-A[low]) div (A[high]-A[low]) ) * (high-low) + low
= ( (18 - A[2]) div (A[8] - A[2]) ) * (8-2) + 2
= ( (18 -10) div (81-10) ) * (8-2) + 2
= 2
Langkah 2’ :
Pembanding A[2] = 18? (Tidak)
Pembanding A[2] <18? (Iya)
Maka lakukan pencarian dengan low = pos + 1 = 2 + 1 = 3 dan
high = 8 (tetap)
Langkah 1’’ :
Low =3
High = 8, dimana A[3]<=18 dan A[8]>=18
Pos = ( (C-A[low]) div (A[high]-A[low]) ) * (high-low) + low
= ( (18 - A[3] ) div (A[8] - A[3]) ) * (8-3) + 3
= ( (18 -13) div (81-13) ) * (8-3) + 3
= 3
Langkah 2’’ :
Pembanding A[3] = 18? (Tidak)
Pembanding A[3] <18? (Iya)
10
Maka lakukan pencarian dengan low = pos + 1 = 3 + 1 = 4 dan
high = 8 (tetap)
Langkah 1’’’ :
Low =4
High = 8, dimana A[4]<=18 dan A[8]>=18
Pos = ( (C-A[low]) div (A[high]-A[low]) ) * (high-low) + low
= ( (18 - A[4] ) div (A[8] - A[4]) ) * (8-4) ) + 4
= ( (18 -16) div (81-16) ) * (8-4) + 4
= 4
Langkah 2’’’ :
Pembanding A[4] = 18? (Tidak)
Pembanding A[4] <18? (Iya)
Maka lakukan pencarian dengan low = pos + 1 = 4+ 1 = 5 dan
high = 8 (tetap)
Langkah 1’’’’ :
A[5]= 18 data ditemukan.
2.4 AlgoritmaSearching
2.4.1 Sequential Search
1. Mulai.
2. Masukkan banyak data (N).
3. Menampilkan banyak kolom pada tabel Data (DATA).
4. Masukkan nilai-nilai pada tabel Data (DATA).
5. Masukkan nilai data yang dicari (C).
11
6. Menampilkan hasil pencarian
Membandingkan nilai data pada kolom data a[i] dengan nilai
data yang dicari (C), untuk i=1 sampai N,
ketika (i<N) dan (a[i]< >C), lakukan
Jika a[i]=C, maka MS.Lines.Add('Data ditemukan'),
Selainnya, maka MS.Lines.Add('Data tidak ditemukan').
7. Selesai
2.4.2 Binary Search
1. Mulai.
2. Masukkan banyak data (N).
3. Menampilkan banyak kolom pada tabel Data (DATA).
4. Masukkan nilai-nilai pada tabel Data (DATA).
5. Masukkan nilai data yang dicari (C).
6. Mengurutkan nilai-nilai data,
membandingkan data ke-i dengan data ke-j, dengan (j=i+1),
untuk i=1 sampai N,
Jika (data ke-i)>(data ke-j), maka (data ke-i) dan (data ke-j)
ditukar.
7. Menampilkan nilai-nilai data yang sudah terurut pada tabel Data
Terurut (DA).
8. Membandingkan nilai data pada kolom data terurut a[i] dengan
nilai data yang dicari (C), untuk i=1 sampai N dan j=N,
12
ketika (i<=j) dan (a[i]< >C), cari posisi nilai data tengah (k)
dengan rumus k = (i+j) div 2,
Jika a[k]=C, maka i=k,
Jika a[k]>C, maka j=k-1,
Selainnya, maka i=k+1.
9. Menampilkan hasil pencarian
Jika a[i]=C, maka MS.Lines.Add('Data ditemukan'),
Selainnya, maka MS.Lines.Add('Data tidak ditemukan').
10. Selesai
2.4.3 Interpolation Search
1. Mulai.
2. Masukkan banyak data (N).
3. Menampilkan banyak kolom pada tabel Data (DATA).
4. Masukkan nilai-nilai pada tabel Data (DATA).
5. Masukkan nilai data yang dicari (C).
6. Mengurutkan nilai-nilai data,
membandingkan data ke-i dengan data ke-j, dengan (j=i+1),
untuk i=1 sampai N,
Jika (data ke-i)>(data ke-j), maka (data ke-i) dan (data ke-j)
ditukar.
7. Menampilkan nilai-nilai data yang sudah terurut pada tabel Data
Terurut (DA).
13
8. Membandingkan nilai data pada kolom data terurut a[i] dengan
nilai data yang dicari (C), untuk i=1 sampai N, dengan nilai data
terendah (low) = 1 dan nilai data tertinggi (high) = N,
ketika (a[low]<=C) dan (a[high]>=C) dan (a[i]< >C), cari
posisi nilai data tengah (pos) dengan rumus:
pos = ( (C-a[low]) div (a[high]-a[low]) ) * (high-low) + low,
Jika a[pos] = C, maka I = pos,
Jika a[pos] < C, maka low = pos+1,
Selainnya, maka high = pos-1.
9. Menampilkan hasil pencarian
Jika a[i]=C, maka MS.Lines.Add('Data ditemukan'),
Selainnya, maka MS.Lines.Add('Data tidak ditemukan').
10. Selesai
2.5 Program Searching
1. Tampilan awal
14
2. Memasukkan banyak data
3. Memasukkan nilai data
15
4. Memasukkan nilai data yang akan dicari
5. Hasil pencarian
16
6. Program Delphi
unit USEARCH;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
TD: TEdit;
Label2: TLabel;
DATA: TStringGrid;
Label3: TLabel;
DA: TStringGrid;
Button3: TButton;
Button4: TButton;
Button5: TButton;
MS: TMemo;
MB: TMemo;
MI: TMemo;
Button2: TButton;
Button6: TButton;
Button7: TButton;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
TCARI: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
N,C,R: Integer;
17
a: Array[1..1000] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
var
i:Integer;
begin
N:=strtoint(TD.Text);
Data.RowCount:=N+1;
Data.Cells[0,0]:='No.';
Data.Cells[1,0]:='Data';
for i:=1 to N do
Data.Cells[0,i]:=inttostr(i)+'.';
Data.ColWidths[0]:=25;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
TD.Clear;
Data.Cols[1].Clear;
Da.Cols[1].Clear;
MS.Clear;
MB.Clear;
MI.Clear;
TCARI.Clear;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button6Click(Sender: TObject);
var
i,j,Result,k:Integer;
begin
N:=strtoint(TD.Text);
DA.RowCount:=N+1;
DA.Cells[0,0]:='No.';
DA.Cells[1,0]:='Data';
for i:=1 to N do
DA.Cells[0,i]:=inttostr(i)+'.';
DA.ColWidths[0]:=25;
for i:=1 to N do
DA.Cells[1,i]:=Data.Cells[1,i];
for i:=1 to N-1 do
18
for j:=i+1 to N do
begin
if strtoint(DA.Cells[1,i])>strtoint(DA.Cells[1,j]) then
begin
Result:=strtoint(DA.Cells[1,i]);
DA.Cells[1,i]:=DA.Cells[1,j];
DA.Cells[1,j]:=inttostr(Result);
end;
end;
C:=strtoint(TCARI.Text);
for i:=1 to n do
a[i]:=strtoint(DA.Cells[1,i]);
i:=1;
j:=N;
while (i<=j) and (a[i]<>C) do
begin
k:=(i+j) div 2;
if a[k]=C then i:=k
else if a[k]>C then j:=k-1
else i:=k+1;
end;
if a[i]=C then
begin
MB.Lines.Add('Data ditemukan');
MB.Lines.Add(TCARI.Text + ' ' + 'ditemukan pada data
terurut no' + ' ' + inttostr(i));
end
else
begin
MB.Lines.Add('Data tidak ditemukan');
MB.Lines.Add(TCARI.Text + ' ' + 'tidak ada di data
terurut');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
C:=strtoint(TCARI.Text);
for i:=1 to n do
a[i]:=strtoint(Data.Cells[1,i]);
i:=1;
while(i<N) and (a[i]<>C) do
i:=i+1;
if a[i]=C then
begin
MS.Lines.Add('Data ditemukan');
19
MS.Lines.Add(TCARI.Text + ' ' + 'ditemukan pada data
no' + ' ' + inttostr(i));
end
else
begin
MS.Lines.Add('Data tidak ditemukan');
MS.Lines.Add(TCARI.Text + ' ' + 'tidak ada di data');
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
var
i,j,Result,low,high,pos:Integer;
begin
N:=strtoint(TD.Text);
DA.RowCount:=N+1;
DA.Cells[0,0]:='No.';
DA.Cells[1,0]:='Data';
for i:=1 to N do
DA.Cells[0,i]:=inttostr(i)+'.';
DA.ColWidths[0]:=25;
for i:=1 to N do
DA.Cells[1,i]:=Data.Cells[1,i];
for i:=1 to N-1 do
for j:=i+1 to N do
begin
if strtoint(DA.Cells[1,i])>strtoint(DA.Cells[1,j]) then
begin
Result:=strtoint(DA.Cells[1,i]);
DA.Cells[1,i]:=DA.Cells[1,j];
DA.Cells[1,j]:=inttostr(Result);
end;
end;
C:=strtoint(TCARI.Text);
for i:=1 to n do
a[i]:=strtoint(DA.Cells[1,i]);
low:=1;
high:=N;
while (a[low]<=C) and (a[high]>=C) and (a[i]<>C) do
begin
pos:=((C-a[low]) div (a[high]-a[low]))*(high-low)+low;
if a[pos]=C then i:=pos
else if a[pos]<C then low:=pos+1
else high:=pos-1
end;
if a[i]=C then
begin
MI.Lines.Add('Data ditemukan');
20
MI.Lines.Add(TCARI.Text + ' ' + 'ditemukan pada data
terurut no' + ' ' + inttostr(pos));
end
else
begin
MI.Lines.Add('Data tidak ditemukan');
MI.Lines.Add(TCARI.Text + ' ' + 'tidak ada di data
terurut');
end;
end;
end.
BAB III
PENUTUP
1.1 Kesimpulan
Proses pencarian diartikan sebagai sebuah cara atau prosedur untuk
nilai (data) tertentu di dalam sekumpulan data yang bertipe data sama (baik
bertipe dasar atau bertipebentukan). Pencarian terbagi menjadi dua, yaitu
pencarian internal dan eksternal. Pencarian dapat dilakukan dengan berbagai
metode, yaitu sequential search (pencarian beruntun), binary search
(pencarian bagi dua),dan interpolation search(pencarian beruntun).
1.1 Saran
Pembelajaran pemrograman computer diharapkan mampu dipahami
dengan baik oleh semua pembaca. Terlebih lagi untuk ketercapaian
pemahaman materi searching yang merupakan salahsatu pembahasan dari
matakuliah ini. Jika materi tersebut sudah dipahami dengan baik, maka
untuk materi selanjutnya dapat dipahami dengan baik juga oleh pembaca.
21
DAFTAR RUJUKAN
Agusta, A. (2015). Algoritma Pencarian (Searching). (online),
(https://andiagusta.blogspot.com/2014/02/algoritma-pencarian-
searching.html, diakses tanggal 11 Februari 2019).
Desvita, D. S. (2016). Interpolation Search. (online),
(http://devidesvitasari.blogspot.com/2016/04/interpolation-search.html,
diakses tanggal 16 Februari 2019).
Martino, B. (2016). Pencarian Interpolasi (interpolation searching). (online),
(https://billymartino11.wordpress.com/2016/04/06/pencarian-interpolasi-
interpolation-searching/, diakses tanggal 17 Februari 2019).
22