Makalah Algoritma & Struktur Data
“ SEARCHING (pencarian) “
OLEH :
Nama : Erik Hermanto
Npm : 140403020057
FAKULTAS TEKNOLOGI INFORMASI
SISTEM INFORMASI
UNIVERSITAS KANJURUHAN MALANG
2014/2015
BAB
I
PENDAHULUAN
A.
Latar
Belakang
Pada pembuatan
makalah kali ini kami akan membahas tentang Pencarian (Searching), dengan
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.
Pencarian
(searching) merupakan proses yang sering digunakan dalam pengelolaan data.
Proses pencarian adalah menemukan nilai (data) tertentu di dalam sekumpulan
data yang bertipe sama (baik bertipe dasar atau bertipe bentukan). Data dapat
disimpan secara temporer dalam memori utama atau disimpan secara permanen di
dalam memori sekunder (tape atau disk). Didalam memori utama , struktur penyimpanan
data yang umum adalah brupa larik atau tabel (array), sedangkan di dalam memori
sekunder berupa arsip (file). Algoritma pencarian yang akan dibicarakan dimulai
dengan algoritma pencarian yang paling sederhana yaitu pencarian beruntun atau
Sequential Search.
B.
Tujuan
a.
Mahasiswa dapat memahami
salah satu metode algoritma pencarian
b.
Mahasiswa dapat membuat
algoritma dan program dalam bahasa pascal dengan metode-metode Searching.
BAB II
PEMBAHASAN
Pengertian
Pencarian
(searching) merupakan proses yang sering digunakan dalam pengelolaan data. Proses pencarian
adalah menemukan nilai (data) tertentu di dalam sekumpulan data yang bertipe
sama (baik bertipe dasar atau bertipe bentukan). Search algoritma adalah algoritma
yang menerima argument A dan mencoba untuk mencari record yang mana keynya
adalah A.
Algoritma bisa
mengembalikan nilai record, atau pointer ke record. Reord sendiri adalah tipe
data yang terdiri atas kumpulan variabel disebut field. Sequential search
(penelusuran sequensial) yaitu proses mengunjungi melalui suatu pohon dengan
cara setiap simpul di kunjungi hanya satu kali yang disebut dengan tree
transversal / kunjungan pohon.
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 aesip (file).
Aktivitas yang
berkaitan dengan pengolahan data ini sering di dahului dengan proses pencarian.
Sebagai contoh, untuk mengubah (update) data tertentu, langkah pertama yang
harus dilakukan adalah mencari keberadaan data tersebut di dalam kumpulannya.
Aktivitas yang awal sama juga dilakukan pada proses penambahan (insert) data
yang baru. Proses penambahan data dimulai dengan mencari apakah data yang
ditambahkan sudah terdapat di dalam kumpulan. Jika sudah dan mengasumsikan
tidak boleh ada duplikasi data,maka data tersebut tidak perlu di tambahkan, tetapi
jika belum ada, maka tambahkan.
Algoritma pencarian yang akan dibicarakan 3 cara yaitu
1. Pencarian
Berurutan (Sequential Searching).
2.
Pencarian Biner (Binary Seacrh).
1.
Sequential Shearching
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.
Pencarian berurutan menggunakan prinsip sebagai berikut : data yang ada
dibandingkan satu per satu secara berurutan dengan yang dicari sampai data
tersebut ditemukan atau tidak ditemukan. Algoritma
pencarian secara linear digunakan untuk mencari sebuah nilai pada tabel
sembarang. Ada dua macam cara pencarian pada tabel. Algoritma ini mempunyai dua
jenis metode yaitu dengan boolean dan tanpa boolean. Algoritma pencairan secara
linear melakukan pengulangan sebanyak 1 kali untuk kasus terbaik (value sama
dengan elemen pertama dalam tabel) dan Nmax kali untuk kasus terburuk. Sehingga
algoritma ini mempunyai kompleksitas algoritma O(n).
Proses pencarian data dengan metode ini cukup sederhana dan mudah
dipahami. Dalam pencarian ini proses dilakukan dengan cara mencocokan data yang
akan dicari dengan semua data yang ada dalam kelompok data. Proses pencarian
data dilakukan dengan cara mencocokan data yang akan dicari dengan semua data
yang ada dalam kelompok data. Proses pencocokan data dilakukan secara berurut
satu demi satu dimulai dari data ke-1 hingga data pada ururtan terakhir. Jika
data yang dicari mempunyai harga yang sama dengan data yang ada dalam kelompok
data, berarti data telah ditemukan. Tetapi jika data yang dicari tidak ada yang
cocok dengan data-data dalam sekelompok data, berarti data tersebut tidak ada
dalam sekelompok data. Selanjutnya kita tinggal menampilkan hasil yang
diperoleh tersebut.
Ilustrasi Metode
Linier Search :
Misalnya terdapat array satu dimensi
sebagai berikut:
0 1 2
3 4 5
6
7
index
Value
Kemudian program akan meminta data yang akan dicari, misalnya 6 (x = 6).
Iterasi :
6 = 8 (tidak!)
6 = 10 (tidak!)
6 = 6 (Ya!) => output : “Ada” pada index ke-2
Jika sampai data terakhir tidak ditemukan data yang sama
maka output : “ data yang dicari tidak ada”.
Best case : jika data
yang dicari terletak di depan sehingga waktu yang dibutuhkan minimal.
Worst case : jika data
yang dicari terletak di akhir sehingga waktu yang dibutuhkan maksimal.
Contoh :
DATA = 5 6 9 2 8 1 7 4
bestcase ketika x = 5
worstcase ketika x = 4
*x = key/data yang dicari
Contoh Program dalam Bahasa
Pemograman Pascal
program search_aditya;
uses crt;
const
nmin = 1;
nmax = 100;
type
arrint = array [nmin..nmax]
of integer;
var
x : integer;
tabint : arrint;
n,i :
integer;
indeks : integer;
function seqsearch1(xx :
integer): integer;
var i : integer;
begin
i := 1;
while ((i xx)) do
i:=i+1;
if
tabint[i] = xx then
seqsearch1:=i
else
seqsearch1:=0;
end;
begin
clrscr;
write('input banyaknya index
array = '); readln(n);
for i:=1 to n do
begin
write('Tabint[',i,'] = '); readln(tabint[i]);
end;
write('Nilai yang dicari =
'); readln(x);
indeks:=seqsearch1(x);
if indeks <> 0 then
write(x,'
ditemukan pada indeks ke-',indeks)
else
write(x,' tidak
ditemukan');
writeln;
readln;
end.
Tanpilan ketika di jalankan sbb :
2. Pencarian Biner (Binary Seacrh).
Binary
search adalah algoritma pencarian untuk data yang terurut. Pencarian dilakukan
dengan cara menebak apakah data yang dicari berada ditengah-tengah data,
kemudian membandingkan data yang dicari dengan data yang ada ditengah. Bila
data yang ditengah sama dengan data yang dicari, berarti data ditemukan. Namun,
bila data yang ditengah lebih besar dari data yang dicari, maka dapat
dipastikan bahwa data yang dicari kemungkinan berada disebelah kiri dari data
tengah dan data disebelah kanan data tengah dapat diabai. Upper bound dari
bagian data kiri yang baru adalah indeks dari data tengah itu sendiri. Sebaliknya,
bila data yang ditengah lebih kecil dari data yang dicari, maka dapat
dipastikan bahwa data yang dicari kemungkinan besar berada disebelah kanan dari
data tengah. Lower bound dari data disebelah kanan dari data tengah
adalah indeks dari data tengah itu sendiri ditambah 1. Demikian seterusnya.
Sebuah algoritma pencarian biner (atau pemilahan
biner) adalah sebuah teknik untuk menemukan nilai tertentu dalam sebuah larik
(array) linear, dengan menghilangkan setengah data pada setiap langkah, dipakai
secara luas tetapi tidak secara ekslusif dalam ilmu komputer.
Sebuah pencarian biner mencari nilai tengah (median),
melakukan sebuah pembandingan untuk menentukan apakah nilai yang dicari ada
sebelum atau sesudahnya, kemudian mencari setengah sisanya dengan cara yang
sama. Pada intinya, algoritma ini menggunakan prinsip divide and conquer,
dimana sebuah masalah atau tujuan diselesaikan dengan cara mempartisi masalah
menjadi bagian yang lebih kecil. Algoritma ini membagi sebuah tabel menjadi dua
dan memproses satu bagian dari tabel itu saja.Algoritma ini bekerja dengan cara
memilih record dengan indeks tengah dari tabel dan membandingkannya dengan
record yang hendak dicari. Jika record tersebut lebih rendah atau lebih tinggi,
maka tabel tersebut dibagi dua dan bagian tabel yang bersesuaian akan diproses
kembali secara rekursif.
Penerapan terbanyak dari pencarian biner adalah untuk
mencari sebuah nilai tertentu dalam sebuah list terurut. Jika dibayangkan,
pencarian biner dapat dilihat sebagai sebuah permainan tebak-tebakan, kita
menebak sebuah bilangan, atau nomor tempat, dari daftar (list) nilai.
Pencarian diawali dengan memeriksa nilai yang ada pada
posisi tengah list; oleh karena nilai-nilainya terurut, kita mengetahui apakah
nilai terletak sebelum atau sesudah nilai yang di tengah tersebut, dan
pencarian selanjutnya dilakukan terhadap setengah bagian dengan cara yang sama.
Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data
array sudah terurut. Pengurutan Array bisa menggunakan
jenis sorting descending atau asscending.
eKeunggulan
Keunggulan utama dari algoritma binary search adalah kompleksitas algoritmanya
yang lebih kecil daripada kompleksitas algoritma sequential search. Hal ini
menyebabkan waktu yang dibutuhkan algoritma binary search dalam mencari sebuah
record dalam sebuah table, lebih kecil daripada waktu yang dibutuhkan algoritma
sequential search.
eKelemahan
Data harus disorting dahulu dan algoritma lebih rumit, tidak baik untuk
data berantai. algoritma ini hanya bisa digunakan pada tabel yang elemennya
sudah terurut baik menaik maupun menurun.
eFungsi
Pencarian Biner (Binary Search) dilakukan untuk :
- Memperkecil jumlah operasi pembandingan yang
harus dilakukan antara data yang dicari dengan data yang ada di dalam
tabel, khususnya untuk jumlah data yang sangat besar ukurannya.
- Prinsip dasarnya adalah melakukan proses
pembagian ruang pencarian secara berulang-ulang sampai data ditemukan atau
sampai ruang pencarian tidak dapat dibagi lagi (berarti ada kemungkinan
data tidak ditemukan).
- Syarat utama untuk pencarian biner adalah data di
dalam tabel harus sudah terurut, misalkan terurut menaik.
e Prinsip dari pencarian biner dapat dijelaskan sebagai
berikut :
¤ 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 di tengah, 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.
Untuk lebih jelasnya, perhatikan contoh berikut. Misalkan kita ingin
mencari 17 pada sekumpulan data berikut:
1. Mula–mula
dicari data tengah, dengan rumus (1+ 9) / 2 = 5.
2. Berarti
data tengah adalah data ke-5, yaitu 15.
3. Data yang
dicari, yaitu 17, dibandingkan dengan data tengah ini.
4. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi
awal dianggap sama dengan posisi tengah + 1 atau 6.
1. Data tengah yang baru didapat dengan rumus (6 + 9) / 2 = 7. Berarti
data tengah yang baru adalah data ke-7, yaitu 23.
2. Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
3. Karena 17 < 23, berarti proses dilanjutkan
tetapi kali ini posisi akhir dianggap sama dengan posisi tengah – 1 atau 6.
1. Data tengah yang baru didapat dengan rumus (6 + 6) / 2 = 6. Berarti
data tengah yang baru adalah data ke-6, yaitu 17.
2. Data yang dicari dibandingkan dengan data tengah ini dan ternyata
sama. Jadi data ditemukan pada indeks ke-6.
3. Bagaimana jika data yang dicari tidak ada, misalnya 16?
4. Pencarian biner ini akan berakhir jika data ditemukan atau posisi
awal lebih besar dari posisi akhir.
5. Jika posisi awal sudah lebih besar daripada posisi
akhir berarti data tidak ditemukan.
Untuk lebih jelasnya perhatikan proses pencarian 16
pada data di atas. Prosesnya hampir sama dengan pencarian 17. Tetapi setelah
posisi awal = posisi akhir = 6, proses masih dilanjutkan lagi dengan posisi
awal = 6 dan posisi akhir = 5
Disini dapat dilihat bahwa posisi awal lebih besar
daripada posisi akhir, yang artinya data tidak ditemukan.
2. Algoritma dari Binary search
Algoritma
pencarian biner dapat dituliskan sebagai berikut :
1 L ← 0
2 R ← N - 1
3 ketemu ← false
4 Selama (L
<= R) dan (tidak ketemu) kerjakan baris 5 sampai dengan 8
5 m ← (L + R) / 2
83
6 Jika
(Data[m] = x) maka ketemu ← true
7 Jika (x
< Data[m]) maka R ← m – 1
8 Jika (x
> Data[m]) maka L ← m + 1
9 Jika
(ketemu) maka m adalah indeks dari data yang dicari, jika tidak data tidak
ditemukan
Contoh Studi Kasus
Sebuah contoh aksi pencarian biner adalah sebuah
permainan tebak-tebakan dimana seorang pemain harus menebak sebuah bilangan
bulat positif yang dipilih oleh pemain lain di antara 1 dan N, dengan
memanfaatkan jawaban pertanyaan berupa ya dan tidak. Misalnya N adalah 16 dan
angka yang dipilih adalah 11, permainan dapat berjalan sebagai berikut:
· Apakah angka
lebih besar dari 8? (ya)
· Apakah angka
lebih besar dari 12? (tidak)
· Apakah angka
lebih besar dari 10? (ya)
· Apakah angka
lebih besar dari 11? (tidak)
Sehingga, angka
tersebut pasti 11. Pada setiap langkah, kita memilih sebuah angka yang tepat
berada di tengah-tengah jangkauan nilai-nilai yang mungkin. Sebagai contoh,
saat kita mengetahui angka tersebut lebih besar dari 8, tetapi lebih kecil atau
sama dengan 12, kita mengetahui untuk memilih angka di tengah-tengah jangkauan
[9, 12] (pada kasus ini 10 adalah yang optimal).
Program :
#include
<iostream>
#include
<conio.h>
int binary_s(int array[], int size, int elemen);
int main()
{
int size=10;
int data[10]={2, 3, 5, 6, 12, 44, 56, 65, 73 ,81} ;
cout<<"Data Array"<<endl;
int i;
for(i=0;i<size;i++)
cout<<data[i]<<"
";
cout<<endl<<endl<<"masukkan data
yang ingin anda cari: ";
int cari;
cin>>cari;
// pencarian
int hasil;
hasil = binary_s(data, size, cari);
if (hasil==0)
cout<<"Nilai tidak
ditemukan";
else
cout<<"Nilai ditemukan";
getch();
}
int binary_s(int array[], int size, int elemen)
{
int awal = 0;
int akhir = size-1;
int nilaiTengah = (awal+akhir)/2;
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;
}
sekian & terimakasih semoga bermanfaat