A. TUJUAN
Setelah melakukan praktikum bab ini, mahasiswa diharapakan mampu :
1. Memahami konsep-konsep Rekursif dan algoritma searching
2. Mengimplementasikan penggunaan rekursif dan algoritma searching untuk
menyelesaikan sebuah studi kasus.
B. DASAR TEORI
B1. SEARCHING
Algoritma pencarian adalah algoritma yang menerima argumen/ parameter a dan
kemudian mencoba untuk menemukan sebuah record yang key-nya adalah a di dalam
sebuah tabel/ himpunan data. Bentuk algoritma pencarian yang paling sederhana adalah
sequential search/ pencarian berurutan. Algoritma ini mampu diterapkan pada
sebuah tabel data baik yang berupa sebuah array ataupun linked list. Misal, k adalah
sebuah array dengan n elemen/ keys, k(0) sampai dengan k(n – 1). Sedangkan key adalah
argumen/ parameter pencariannya. Maka algoritmanya adalah:
for ( i = 0; i < n; i++ )
if ( key == k(i) )
return(i);
return(-1);
Misal akan dicari data angka 79. Maka proses pencariannya adalah seperti di bawah ini:
Algoritma tersebut akan melakukan pengecekan untuk setiap key secara bergiliran
sampai ditemukannya kecocokan dengan argumen. Indeks key yang cocok akan
dikembalikan oleh fungsi. Tetapi jika tidak ditemukan kecocokan maka nilai –1 akan
dikembalikan oleh fungsi.
Contoh dengan Java:
public class Searching
for(int i=0;i<myArray.length;i++)
if(myArray[i]==76)
System.out.println("Data ditemukan!!");
Selain Sequential Search juga ada Binary search. Salah satu syarat pencarian biner
(binary search) dapat dilakukan adalah data sudah dalam keadaan terurut. Dengan kata
lain, apabila data belum dalam keadaan terurut , pencarian biner tidak dapat dilakukan .
Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner.
Misalnya saat kita ingin mencari suatu kata dalam kamus.
Pencarian Biner (Binary Search) dilakukan untuk :
1. 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.
2. 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).
3. Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah
terurut, misalkan terurut menaik.
POLITEKNIK KEDIRI 2
Untuk lebih jelasnya, perhatikan contoh berikut. Misalkan kita ingin mencari 17 pada
sekumpulan data berikut :
POLITEKNIK KEDIRI 3
5. Data tengah yang baru didapat dengan rumus (6 + 9) / 2 = 7. Berarti data tengah
yang baru adalah data ke-7, yaitu 23.
6. Data yang dicari, yaitu 17 dibandingkan dengan data tengah ini.
7. Karena 17 < 23, berarti proses dilanjutkan tetapi kali ini posisi akhir dianggap
sama dengan posisi tengah – 1 atau 6.
8. Data tengah yang baru didapat dengan rumus (6 + 6) / 2 = 6. Berarti data tengah
yang baru adalah data ke-6, yaitu 17.
9. Data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi
data ditemukan pada indeks ke-6.
10. Bagaimana jika data yang dicari tidak ada, misalnya 16?
Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar
dari posisi akhir.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.
POLITEKNIK KEDIRI 4
B2. REKURSIF
B2.1 DEFINISI REKURSIF
Rekursif adalah kemampuan yang dimiliki suatu fungsi untuk memanggil dirinya
sendiri. Rekursi dapat dilakukan secara langsung atau tidak langsung. Pseudocode 2.1
berikut ini merupakan pseudocode untuk rekursi langsung. Sedangkan Pseudocode 2.2
berikut ini merupakan pseudocode untuk langsung. Namun pada bab ini hanya akan
dibahas rekursi langsung.
Pseudocode 2.1
Recurse (parameter){
…
…
Recurse (parameter);
…
}
Pseudocode 2.2
Recurse1 (parameter){
…
Recurse2 (parameter);
…
}
Recurse2 (parameter){
…
Recurse1 (parameter);
…
}
POLITEKNIK KEDIRI 5
Dalam pemrograman, mencari nilai factorial merupakan contoh fungsi rekursif.
Nilai sebuah faktorial n dapat ditulis menggunakan persamaan berikut:
𝑛 ∗ 𝑓𝑎𝑘𝑡𝑜𝑟𝑖𝑎𝑙(𝑛 − 1) ,𝑛 > 1
𝑓𝑎𝑘𝑡𝑜𝑟𝑖𝑎𝑙(𝑛) = { 𝑓𝑎𝑘𝑡𝑜𝑟𝑖𝑎𝑙(1) = 1 ,𝑛 = 1
𝑓𝑎𝑘𝑡𝑜𝑟𝑖𝑎𝑙(0) = 1 ,𝑛 = 0
Start
Input n
If n = 0 or n = 1
Return 1
Else
Return n*factorial(n-1)
End If
End
Pseudocode 2.4
Start
Input n
Calculate fact=factorial(n)
Print fact
End
POLITEKNIK KEDIRI 6
B2.2 REKURSIF UNTUK MENCARI PALINDROME
Palindrom adalah sebuah kata, frasa, angka maupun susunan lainnya yang dapat
dibaca dengan sama baik dari depan maupun belakang (spasi antara huruf-huruf
biasanya diperbolehkan). Berikut ini merupakan contoh kasus palindrom:
o 5432345
o 09877890
o LEVEL
o KODOK
Berikut ini merupakan contoh pseudocode fungsi rekursif untuk menghitung
palindrom. Pseudocode 2.5 berikut ini merupakan method fungsi rekursif dengan
parameter kata yang akan dideteksi apakah palindrom atau bukan. Selanjutnya
Pseudocode 2.6 merupakan kelas main untuk memanggil fungsi rekursif.
Pseudocode 2.5
Start
Input s
If s.length<=1
Return true
Else if s(0) != s(n-1)
Return false
Else
Return palindrome(s(1,n-2))
End If
End
Pseudocode 2.6
Start
Input s
Boolean pali=palindrome(s)
End
POLITEKNIK KEDIRI 7
menggunakan rekursif maupun non rekursif. Suatu contoh untuk mencari nilai FPB dari
18 dan 8 tanpa menggunakan fungsi rekursif adalah sebagai berikut
Start
Input bil1, bil2
Initialize sisa = bil1 mod bil2
While sisa != 0
bil1 = bil2
bil2 = sisa
sisa = bil1 mod bil2
End While
Print fpb=bil2
End
POLITEKNIK KEDIRI 8
// TODO code application logic here
System.out.println("FPB dari 6 dan 4 adalah
"+FPBnonRec(6,4));
System.out.println("FPB dari 4 dan 6 adalah
"+FPBnonRec(4,6));
}
Start
Input bil1, bil2
If bil1 = 0
Return bil2
Else if bil1<bil2
Return CariFPB(bil2,bil1)
Else
Return CariFPB(bil1%bil2,bil2)
End If
End
POLITEKNIK KEDIRI 9
System.out.println("FPB dari 4 dan 6 adalah
"+FPBRec(4,6));
}
Selanjutnya jika sourcecode tersebut dieksekusi maka akan tampil seperti pada
Gambar 2.4 berikut ini:
POLITEKNIK KEDIRI 10
C. TUGAS PENDAHULUAN
1. Kenapa diperlukan fungsi searching?
2. Ada berapa jenis algoritma searching yang anda tahu?
3. Apa fungsi rekursif?
E. LANGKAH PRAKTIKUM
E.1 SEARCHING
1. Buatlah kelas bernama Binary_Search kemudian ketikkan souce code dibawah ini.
import java.util.Scanner;
for(int i=0;i<intarray.length;i++) {
System.out.print(intarray[i]+" ");
}
Scanner sc=new Scanner(System.in);
System.out.print("\nMasukan angka yang ingin dicari = ");
angka=sc.nextInt();
int batasAtas=intarray.length-1;
int batasBawah=0;
while (notfound)
{
int posisiSekarang = (batasAtas + batasBawah)/2;
if(intarray[posisiSekarang] == angka)
{
notfound=false;
System.out.println("Angka "+angka+" ditemukan" );
POLITEKNIK KEDIRI 11
}
else if(batasBawah>batasAtas)
{
System.out.println("Angka " +angka+" tidak ditemukan");
break;
}
else
{
if(intarray[posisiSekarang]< angka)
{
batasBawah = posisiSekarang+1;
}
else
{
batasAtas = posisiSekarang-1;
}
}
}
}
}
2. Jalankan source code tersebut dan analisa fungsi setiap baris kodenya.
3. Manipulasi program diatas dengan menambahkan output berupa letak angka
yang dicari.
2. Jalankan sourcecode tersebut maka akan tampil seperti pada Gambar 2.2 berikut
ini:
POLITEKNIK KEDIRI 12
Gambar 2.3 Hasil Output Sourcecode 2.1
4. Jalankan sourcecode tersebut maka akan tampil seperti pada Gambar 2.3 berikut
ini:
F. TUGAS
1. Praktekkan keseluruhan uji coba pada langkah praktikum.
2. Buatlah program dan perhitungan manual untuk mensimulasikan proses
searching pada sebuah deretan angka dengan menggunakan algoritma Binary
Search.
POLITEKNIK KEDIRI 13
G. PENUTUP
Pastikan hal-hal berikut sebelum Anda keluar dari laboratorium :
1. Meja dan kursi tertata kembali dalam keadaan rapi.
2. Komputer dan Monitor dalam keadaan mati.
3. Peralatan dan komponen dikembaikan ke tempat asalnya.
4. Laboratorium dalam keadaan bersih dan rapi.
5. Jangan meninggalkan barang pribadi di laboratorium
G. REFERENSI
Wibowo, Nur Cahyo., Ridwandono, Doddy., Modul Praktikum Struktur Data:
Surabaya,2016.
https://tirago4.wordpress.com/2016/10/11/pencarian-searching-didalam-
algoritma/
https://situsbersamablog.wordpress.com/2016/10/25/notasi-asimtotik-big-oh-
omega-theta-sebuah-algoritma-perulangan-bilangan-genap/
POLITEKNIK KEDIRI 14