Anda di halaman 1dari 12

LAPORAN PRAKTIKUM SEMENTARA SEARCHING

Disusun oleh : Albert Sugihartono 201301018

Dosen pengampu : Yosef Murya Kusuma Ardhana.S.T., M.Kom

JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO PURWOKERTO 2014

BAB I TEORI DASAR

1. Pengantar Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful). Menurut Tenenbaum dan Augenstein, algoritma pencarian yaitu algoritma yang menerima sebuah argument X dan mencoba untuk menemukan sebuah rekaman yang memiliki kunci X. Contoh dalam sebuah NIM dapat dicari dengan record yang kemungkinan berisikan nama, alamat, tempat tanggal lahir dan program studi mahasiswa terkait. Untuk pencarian dapat dibagi menjadi 2 jenis metode yaitu Pencarian Berurutan (sequential search) dan Pencarian Biner (binary search).

2. Pencarian Berurutan (sequential search) Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. 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. Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari. Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula. Maka dari itu rumus : L[i]=k dimana k adalah data yang dicari dan i adalah bilangan index terkecil yang berkondisikan 0 k n-1. L = [10, 9, 6, 4, 7, 5, 4, 1] 0 1 2 3 4 5 6 7 Indeks

Misalkan elemen data yang dicari adalah 4 (untuk posisi pertama). Dalam hal ini k = 4 dan k ditemukan diposisi indeks ke 3. Subrutin(perintah) tersebut merupakan implementasi algoritma secara sekuensial/berurutan, dalam hal ini menghasilkan nilai balik : a. -1 jika data yang dicari tidak diketemukan. b. Bilangan antara 0 hingga n-1 dengan n jumlah elemen larik apabila data yang dicari ditemukan. 3. Pencarian biner (binary search) Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Pencarian biner digunakan untuk kebutuhan pencarian data dalam waktu yang cepat. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus. Kita tidak akan membuka kamus dari halaman awal hingga akhir satu persatu untuk mencari beberapa arti kata, namun dengan cara membelah atau membagi halaman kamus tersebut. Jika tidak ditemukan pada halaman tengah tersebut, maka akan dicari pada belahan sebelah kiri atau kanan hingga ditemukan arti kata yang dicari. Prinsip pencarian biner adalah pencarian bagi dua.

4. Pencarian pada string Pencarian pada string yaitu pencarian suatu huruf pada sebuah kalimat. Sebagai contoh terdapat kalimat halo stikom yos sudarso, didalam kalimat tersebut yang dicari adalah huruf y. Maka yang akan ditampilkan posisi dari huruf y tersebut yaitu di posisi ke 13.

BAB II PENJELASAN PROGRAM

1.

Latihan Praktikum Pada bab ini membahas tentang listing program pada bagian modul yang akan digunakan untuk latihan pada pertemuan kelima. Latihan yang akan dilakukan mencakup pada Listing program_praktikum_5.1.cpp; program_praktikum5.2.cpp; dan program_praktikum_5.3.cpp Listing program_praktikum_5.1.cpp
/* * program_praktikum_5.1.cpp * * Created on: Apr 1, 2014 * Author: ALBERT */ #include <iostream> using namespace std; int cari(int data[],int n,int k) { int posisi, i, ketemu; if(n<=0) posisi=-1; else { ketemu=0; i=1; while ((1<n-1) && !ketemu) if(data[i]==k) { posisi=i; ketemu=i; } else i++; if(!ketemu) posisi=-1;

} return posisi; } int main() { int data[8]={10,9,6,4,7,5,4,1 }; int dicari=4; cout<<"Posisi "<<dicari<<" Ada dalam larik data ke : "<<cari(data,8,dicari)<<" \n"; return 0; }

Output program_praktikum_3.1.cpp Hasil output dari program_praktikum_5.1.cpp adalah sebagai berikut :

Penjelasan program_praktikum_5.1.cpp Berikut penjelasan dari Listing program_praktikum_3.1.cpp : 1. Program pertama kali membuat fungsi yang ditujukan untuk proses pencarian.yaitu fungsi int cari dengan parameternya yaitu int data, int n dan int k dimana n mengindikasikan jumlah indeks, dan k adalah data yang dicari. 2. Pada awal fungsi dideklarasikan variable posisi untuk posisi data yang dicari, dan i sebagai variable untuk indeks terkecil.

3.

Pada fungsi if pertama dimaksudkan apabila jumlah indeks yang ada yaitu n kurang dari atau sama dengan 0, maka nilai balik yaitu posisi bernilai -1 jika tidak variable ketemu bernilai 0.

4.

Kemudian i di assignmentkan bernilai 1. Pada bagian ini digunakan fungsi perulangan while. Pada while, jika kondisi indeks terkecil kurang dari jumlah indeks -1 maka akan dijalankan fungsi logika yang mana jika data berindekkan i (i = i pada while) dan i bernilai sama dengan data yang dicari, maka posisi dan ketemu akan diassignmentkan sama dengan i. Jika tidak, i akan bertambah 1 guna untuk menambah jumlah indeks sehingga dapat mengakses indeks selanjutnya dan menemukan data yang dicari.

5.

Dalam int main, dideklarasikan sebuah data berjumlah 8 indeks dan diassignmentkan valuenya kemudian dideklarasikan variable dicari untuk data yang dicari diassignmentkan value 4. Pada cout, dipanggil fungsi dengan menulis nama fungsi yaitu cari dan diikuti parameternya. Pada bagian parameter ditempatkan variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke kodomain.

Listing program_praktikum_5.2.cpp
/* * * * * */ #include <iostream> using namespace std; Created on: Apr 1, 2014 Author: ALBERT program_praktikum_5.2.cpp

int caribiner(int data[], int n, int k) { int ada, atas, bawah, tengah, posisi; ada=0; bawah=0;

atas=n-1; while (atas>=bawah) { tengah=(atas+bawah)/2; if(k>data[tengah]) bawah=tengah+1; else if(k<data[tengah]) atas=tengah-1; else { ada=1; posisi=tengah; bawah=atas+1; } } if(!ada) posisi=-1; return posisi;

} int main() { int data[]={10,9,7,6,5,4,3,1}; int dicari=6;

cout<<"Posisi "<<dicari<<" dalam larik data : "<<caribiner(data,8,dicari)<<"\n";

return 0; }

Output program_praktikum_5.2.cpp

Penjelasan program_praktikum_5.2.cpp Berikut penjelasan listing program_praktikum_5.2.cpp : 1. Pertama kali program membuat fungsi untuk pencarian biner dengan nama fungsi caribiner dan parameternya yaitu data, n, dan k. 2. Dalam fungsi caribiner, dideklarasikan int ada, atas, bawah, tengah, dan posisi. Variable ada mengindikasikan 1 apabila data diketemukan. Variable atas, bawah dan tengah mengindikasikan pembagian yaitu prinsip pencarian biner dimana tengah ditentukan dengan cara kedua belahan (atas dan bawah) digabungkan kemudian dibagi menjadi dua. 3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah belahan atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian tengah. Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang dicari lebih banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi tidak terpenuhi, berarti data yang dicari diketemukan da nada diassignmentkan 1. 4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian biner yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke kodomain.

Listing program_praktikum_5.3.cpp
#include <iostream> #include <cstring> using namespace std;

int string_kar(char st[], int k) { int i,posisi,panjang;

i=0; posisi=-1; panjang=strlen(st);

while ((i<panjang-1) && posisi==-1) { if(st[i]==k) posisi=i; i++; } return posisi; } int main() { char kalimat[]="Hallo stikom yos sudarso"; char dicari='y';

cout<<"Posisi "<<dicari<<" dalam string "<<string_kar(kalimat,dicari)<<"\n";

"<<kalimat<<" :

return 0; }

Output program_praktikum_5.3.cpp

Penjelasan listing program_praktikum_5.3.cpp Berikut penjelasan listing program dari program_praktikum_5.3.cpp : 1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi untuk memunculkan fungsi manipulasi string. Pada program fungsi manipulasi string adalah strlen yang digunakan untuk mengetahui panjang string. 2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya yaitu char st[], dan char k dengan k adalah data yang dicari. 3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan menggunakan fungsi manipulasi string strlen. 4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah 0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen. 5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i sebanyak 1, dapat bersinggungan dengan data yang dicari.

10

BAB III KESIMPULAN

Kesimpulan yang dapat diambil adalah pencarian sekuensial digunakan untuk mencari data pada sekumpulan data atau rekaman yang masih acak. Pencarian biner digunakan untuk mencari data pada sekumpulan data atau rekaman yang sudah dalam keadaan terurut. Yang menarik adalah masing-masing pencarian memanfaatkan akses indeks sebagai record data yang dicari, hanya saja metode yang digunakan berbeda. Untuk mencari data dalam waktu yang relative cepat, dapat digunakan pencarian biner sedangkan pencarian sekuensial dilakukan secara bertahap.

11

Sumber Referensi Ardhana. YM Kusuma. 2013. Struktur Data Dalam Ilustrasi Eclipse Indigo C++ Yogyakarta : CAPS (Center of Academic Publishing Service)

12

Anda mungkin juga menyukai