STRUKTUR
DATATENTANG
ALOGARITMA
SEARCHING
Nama
Anggota Kelompok :
Ahmad
Faisal
(140403020061)
Erick Hermanto
(140403020057)
Ahmad Sabilil Wahid
F (140403020076)
Irfan
(140403020050)
UNIVERSITAS
KANJURUHAN MALANG
2015
2015
BAB
I
PENDAHULUAN
- 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.
- Tujuan
- Mahasiswa dapat memahami salah satu metode algoritma pencarian
- 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
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
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.
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 :
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.
ePrinsip
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;
}
Tidak ada komentar:
Posting Komentar