
MAKALAH
“Algoritma Searching (Pencarian) dalam C++”
DOSEN
PEMBIMBING
Nanik
Susanti S.Kom, M.Kom
DISUSUN
OLEH
Lisa Rachmawati
Makul : Struktur Data
Kelas : D
UNIVERSITAS
MURIA KUDUS
FAKULTAS
TEKNIK
SISTEM
INFORMASI
2018
Kata
Pengantar
Puji
syukur kehadirat Tuhan Yang Maha Esa atas semua limpahan rahmat dan karunianya
sehingga makalah ini sanggup tersusun hingga selesai. Tidak lupa kami
mengucapkan terimakasih kepada dosen pembimbing kami yang telah memberikan
tugas ini dengan judul Searching(pencarian) dalam Struktur Data.
Dan
kita semua berharap semoga makalah ini mampu menambah pengalaman serta ilmu
bagi para pembaca. Sehingga untuk ke depannya sanggup memperbaiki bentuk maupun
tingkatan isian makalah sehingga menjadi makalah yang miliki wawasan yang luas
dan lebih baik lagi.
Karena
keterbatasan ilmu maupun pengalaman kami, Kami percaya masih banyak kekurangan
dalam makalah ini, oleh karena itu kami sangat mengharapkan saran dan kritik
yang membangun berasal dari pembaca demi kesempurnaan makalah ini.
.
Kudus, 12 Maret 2018
DAFTAR ISI
HALAMAN
JUDUL ………….……….……………………………..………..... i
KATA
PENGANTAR ………….……………………………………………......ii
DAFTAR
ISI ………………………………………………………………........iii
BAB
I PENDAHULUAN ……………………...……………………….…...…..1
A.
Latar Belakang ….…….……………………………………………............1
B.
Rumusan Masalah ….………………………………...……..…...................1
C.
Tujuan ……….………………………………………………………...........1
D.
Manfaat...........................................................................................................1
BAB
II PEMBAHASAN ……………..…..………………………………...........2
A.
Pengertian Searching……………..…..………………………………........2
B.
Jenis-jenis Searching……………..…..………………………………........3
C.
Contoh Pemrograman Searching
dalam Algoritma...…………...…….......7
BAB
IV PENUTUP ……………………………………..………………….....…8
A. Kesimpulan.....……………………………………..….….....................8
B. Saran……......……...............………………………..….…....................8
DAFTAR
PUSTAKA …………..……………………………………..……........9
BAB
I
PENDAHULUAN
A. Latar Belakang
Dalam ilmu logika dan algoritma sering kali menemui
masalah tentang bagaimana mendapatkan suatu data dalam kumpulan data. Dalam
keperluannya untuk mencari data, terdapat beragam algoritma pencarian(search
algoritm). Searching adalah pencarian data dengan menelusuri tempat
pencarian data tersebut. Tempat pencarian data tersebut dapat berupa array
dalam memori, bisa juga pada file pada external storage.Bila jumlah data sudah
demikian besar, dibutuhkan suatu metode untuk mendapatkan data yang dibutuhkan.
Beberapa metode pengorganisasian data telah membuat proses pencarian data
menjadi lebih efisien.
B. Rumusan Masalah
Berdasarkan
uraian pada latar belakang masalah diatas, maka permasalahan yang diteliti
dapat dirumuskan:
1.
Apa pengertian
searching/pencarian?
2.
Apa saja jenis-jenis
algoritma pencarian?
3.
Bagaimana algoritma
dan contoh programnya?
C. Tujuan
Berdasarkan
rumusan masalah diatas, makan tujuan disusunnya makalah ini yaitu:
1.
Untuk mengetahui pengertian
searching/pencarian.
2.
Untuk mengetahui apa
saja jenis-jenis algoritma pencarian.
3.
Untuk mengetahui
algoritma dan contoh program searching.
D. Manfaat Penulisan
Manfaat
penulisan makalah ini yaitu agar dapat memberi pengetahuan lebih mengenai
searching,agar menjadi bahan pembelajaran bagi pembaca maupun penulis.
BAB II
PEMBAHASAN
A.
Pengertian
Searching
Pencarian
(searching) merupakan proses fundamental 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 adan mencoba untuk mencari record yang
mana key-nya adalah Algoritma bisa mengembalikan nilai record, atau pointer ke
record. Record sendiri adalah tipe data yang terdiri atas kumpulan variabel
yang dapat berbeda tipenya. Setiap variabel disebut field. Sequensial Search
(penelusuran sequensial) yaitu proses mengunjungi melalui suatu pohon dengan
cara setiap simpul di kunjungi hanya satu kali yang disebut tree transversal /
kunjungan pohon. Sedangkan Binary Search adalah penelusuran pohon biner dimana
data yang dimasukkan atau yang sudah ada diurutkan terlebih dahulu.
Data dapat di simpan secara
temporer dalam memori utama atau di simpan 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). 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
keberadaaan 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 ditambahkan, tetapi jika belum ada, maka
tambahkan.
Algoritma
pencarian yang akan dibicarakan dimulai dengan algoritma pencarian yang paling
sederhana yaitu pencarian beruntun atau Sequential Search sampai pada algoritma
pencarian yang lebih maju yaitu pencarian bagi dua (Binary Search).
B. Jenis-jenis Searching
1. Sequential Searching
Sequential Searching dalah 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.
Sequential search memiliki proses sebagai berikut:
1. Tentukan banyaknya data yang akan di olah, misal
banyak data adalah N.
2. Tentukan data apa yang akan dicari, misal data yang
akan dicari adalah C.
3. Deklarasikan sebuah counter untuk menghitung
banyak data yang ditemukan, missal counternya adalah K.
4. Inisialisasikan K =0
5. Lakukanlah perulangan sebanyak N kali
6. Dalam tiap proses perulangan tersebut periksalah
apakah data yang sedang diolah sama dengan data yang dicari.
7. Jika ternyata sama K=K+1
8. Jika tidak, lanjutkan proses perulangan .
9. Setelah proses perulangan berhenti, periksalah nilai
K.
10. Jika nilai K lebih dari 0, artinya data yang dicari
ada dalam data /array dan tampilkan nilai K ke layer sebagai
jumlah data yang ditemukan.
11. Jika nilai K=0, artinya data yang dicari tidak
ditemukan dalam data / array dan tampilkan ke layar bahwa data tidak ditemukan
12. Proses selesai.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.
Dapat disimpulkan bahwa sequential search, akan mencari data dengan cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.
Ilustrasi Metode Linier Search :
Misalnya terdapat array satu dimensi
sebagai berikut:
0
1 2
3 4
5
6 7 index
8
|
10
|
12
|
6
|
7
|
1
|
50
|
100
|
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
2.
Binary search
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.
Konsep
langkah binary search
Contoh :
a) Mencari bilangan 4 dari bilangan 1,2,3,4,5,6,7
1) Mencari titik tengah dari bilangan 1,2,3,4,5,6,7
2) Nilai titik tengah dari bilangan 1,2,3,4,5,6,7 adalah 4, maka nilai yang dicari bisa langsung di temukan dan proses di hentikan.
b) Mencari bilangan 6 dari bilangan 1,2,3,4,5,6,7
1) Mencari nilai titik tengah dari bilangan yang tersedia yaitu 1,2,3,4,5,6,7
2) Nilai titik tengahnya adalah 4
3) Dari nilai yang dicari (6) apakah sama, kurang dari, atau lebih dari, dari nilai titik tengah
4) Karena nilai yang di cari adalah 6, yaitu lebih dari dari nilai titik tengah (4) maka proses dilanjutkan kekanan/keatas yaitu mencari titik tengah dari 5,6,7
5) Dari bilangan 5,6,7 nilai titik tengahnya adalah 6, maka bilangan yang dicari ditemukan dan proses dihentikan
6) Apabila nilai yang dicari belum ditemukan maka proses akan dilanjutkan sampai bilngan tersebut sudah dicari titik tengahnya semua kemudian proses berhenti.
Contoh :
a) Mencari bilangan 4 dari bilangan 1,2,3,4,5,6,7
1) Mencari titik tengah dari bilangan 1,2,3,4,5,6,7
2) Nilai titik tengah dari bilangan 1,2,3,4,5,6,7 adalah 4, maka nilai yang dicari bisa langsung di temukan dan proses di hentikan.
b) Mencari bilangan 6 dari bilangan 1,2,3,4,5,6,7
1) Mencari nilai titik tengah dari bilangan yang tersedia yaitu 1,2,3,4,5,6,7
2) Nilai titik tengahnya adalah 4
3) Dari nilai yang dicari (6) apakah sama, kurang dari, atau lebih dari, dari nilai titik tengah
4) Karena nilai yang di cari adalah 6, yaitu lebih dari dari nilai titik tengah (4) maka proses dilanjutkan kekanan/keatas yaitu mencari titik tengah dari 5,6,7
5) Dari bilangan 5,6,7 nilai titik tengahnya adalah 6, maka bilangan yang dicari ditemukan dan proses dihentikan
6) Apabila nilai yang dicari belum ditemukan maka proses akan dilanjutkan sampai bilngan tersebut sudah dicari titik tengahnya semua kemudian proses berhenti.
C. Contoh Pemrograman Searching
dalam Algoritma
1.
Sequential Searching
#include <conio.h>
main ()
{
int z[]=
{12,2,84,1,5,65,7,45,8,4,3,6,8,7,4,1,5,45,99,65,78,21,12,36,45};
int
nilai,index[25],j;
j=0;
for (int
i=0;i<25;i++)
{
cout<<z[i]<<",";
}
cout<<endl;
cout<<"masukkan nilai yang dicari : ";cin>>nilai;
for (int
i=0;i<=25;i++)
{
if
(z[i]==nilai)
{
index[j]=i;
j++;
}
}
if (j>0)
{
cout<<"Nilai yang dicari = "<<nilai<<"
ada sejumlah = "<<j<< " buah"<<endl;
cout<<"Nilai tersebut ada dalam indeks ke (indeks mulai dari
0) = "<<endl;
for (int
i=0;i<j;i++)
{
cout<<"indeks ke "<<index[i]<<endl;
}
cout<<endl;
}
else
{cout<<"Nilai tidak ditemukan dalam array"<<endl;}
getch();
}
2.
Binary Search
#include <iostream.h>
#include <conio.h>
//pastikan data terurut
void main()
{
int data[9] =
{1,2,3,4,5,6,7,8,9};//data yang sudah tersedia
int awal, akhir,
tengah; //variabel awal, akhir, tengah
bool
ketemu;//variabel ketemu dengan tipe data booelean
cout<<"Data Yang Tersedia\n";
cout<<"===================\n";
for (awal = 0;
awal<9; awal++)//rumus menampilkan data yang tersedia
{
cout<<data[awal]<<" ";//menampilkan data
}
int cari;//data
yang dicari
cout<<"\n\nMasukkan Data Yang Ingin Dicari: ";
cin>>cari;//data yang dicari
ketemu=false;
//ketemu ddidefinisikan bernilai 0 (false)
awal = 0;//awal
bernilai 0
akhir = 8; //akhir
= jumlah data - 1 = 8
while
(ketemu==false && awal <= akhir)//selama ketemu bernilai salah DAN
awal<=akhir
{
tengah =
(awal+akhir)/2;//index tengah = index awal + index akhir / 2
if
(data[tengah]==cari)//jika nilai index tengah < data yang dicari
ketemu=true;//maka ketemu bernilai benar
else if
(data[tengah]<cari)//jika nilai index tengah < cari
awal = tengah +
1;// maka index awal = index tengah + 1
else if
(data[tengah]>cari)//jikanilai index > data yang dicari
akhir = tengah - 1; //akhir =tengah - 1
}
if
(ketemu==true)//jika ketemu bernilai benar
cout<<"Data Ditemukan di Index "<<tengah;
//tampilkan
else
cout<<"Data Tidak Ditemukan";
getch();
}
BAB III
PENUTUP
PENUTUP
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.
Saran
Gunakanlah teknik pencarian data yang efisien dan
mudah tetapi sesuai dengan kebutuhan.
DAFTAR PUSTAKA
http://imeldapasaribu.blogspot.co.id/2014/06/pencarian-searching-dalam-algoritma.html
https://dsn1.wordpress.com/2012/10/17/binary-search/