Sequential Search
Sequential Search adalah teknik pencarian data dimana data dicari secara urut dari depan ke belakang atau dari awal sampai akhir. berdasarkan key yang di cari.Kelebihan dari proses pencarian secara sequential ini :
· jika data yang dicari terletak didepan, maka data akan ditemukan dengan cepat.
Tetapi dibalik kelebihannya ini, teknik ini juga memiliki kekurangan :
· jika data yang dicari terletak dibelakang atau paling akhir, maka akan membutuhkan waktu yang lama dalam proses pencariannya.
· beban komputer akan semakin bertambah jika jumlah data dalam array sangat banyak.
Algoritma
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. Berikut ini adalah pseudocode sederhana yang menentukan indeks (posisi) dari nilai yang diberikan dalam sebuah list berurut, a berada antara left dan right :
Karena pemanggilan fungsi di samping adalah rekursif ekor, fungsi tersebut dapat dituliskan sebagai sebuah pengulangan (loop), hasilnya adalah algoritma in-place:
Pada kedua kasus, algoritma akan berakhir karena paa setiap pemanggilan rekursif atau pengulangan, jangkauan indeks rightdikurang left akan selalu mengecil, dan akhirnya pasti akan menjadi negatif.
Pencarian biner adalah sebuah algoritma logaritmik dan bekerja dalam waktu O(log n). Secara khusus, 1 + log2N pengulangan yang diperlukan untuk menghasilkan jawaban. Hal ini dianggap lebih cepat dibandingkan sebuah pencarian linear. Pencarian biner dapat diimplementasikan dengan rekursi atau iterasi, seperti yang terlihat di atas, walaupun pada kebanyakan bahasa pemrograman akan lebih elegan bila dinyatakan secara rekursif.
· jika data yang dicari terletak dibelakang atau paling akhir, maka akan membutuhkan waktu yang lama dalam proses pencariannya.
· beban komputer akan semakin bertambah jika jumlah data dalam array sangat banyak.
Proses:
· Mulai dari awal(atau dari akhir) cek seluruh record dalam array atau list, baca satu persaru
· Temukan record sesuai dengan key yang dicari.
· Proses Searching berhenti karena salah satu alasan.
Ø Success – Found the target key
Ø End of List – No more records to compare
· Mulai dari awal(atau dari akhir) cek seluruh record dalam array atau list, baca satu persaru
· Temukan record sesuai dengan key yang dicari.
· Proses Searching berhenti karena salah satu alasan.
Ø Success – Found the target key
Ø End of List – No more records to compare
Diaplikasikan pada Array (sorted &unsorted) atau Linked List.
Algoritma Sequential Search :
1. i ← 0
2. ketemu ←false
3. Selama (tidak ketemu) dan (i < N) kerjakan baris 4
4. Jika (Data[i] = key) maka
5. ketemu ←true
6. jika tidak
7. i ←i+1
8. Jika (ketemu) maka
9. i adalah indeks dari data yang dicari
10. jika tidak
11. data tidak ditemukan
Algoritma Sequential Search :
1. i ← 0
2. ketemu ←false
3. Selama (tidak ketemu) dan (i < N) kerjakan baris 4
4. Jika (Data[i] = key) maka
5. ketemu ←true
6. jika tidak
7. i ←i+1
8. Jika (ketemu) maka
9. i adalah indeks dari data yang dicari
10. jika tidak
11. data tidak ditemukan
Binary Search
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. Sebuah pencarian biner adalah salah satu contoh dari algoritma divide and conquer (atau lebih khusus algoritma decrease and conquer) dan sebuah pencarian dikotomi (lebih rinci di Algoritma pencarian).Algoritma
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. Berikut ini adalah pseudocode sederhana yang menentukan indeks (posisi) dari nilai yang diberikan dalam sebuah list berurut, a berada antara left dan right :
Karena pemanggilan fungsi di samping adalah rekursif ekor, fungsi tersebut dapat dituliskan sebagai sebuah pengulangan (loop), hasilnya adalah algoritma in-place:
Pada kedua kasus, algoritma akan berakhir karena paa setiap pemanggilan rekursif atau pengulangan, jangkauan indeks rightdikurang left akan selalu mengecil, dan akhirnya pasti akan menjadi negatif.
Pencarian biner adalah sebuah algoritma logaritmik dan bekerja dalam waktu O(log n). Secara khusus, 1 + log2N pengulangan yang diperlukan untuk menghasilkan jawaban. Hal ini dianggap lebih cepat dibandingkan sebuah pencarian linear. Pencarian biner dapat diimplementasikan dengan rekursi atau iterasi, seperti yang terlihat di atas, walaupun pada kebanyakan bahasa pemrograman akan lebih elegan bila dinyatakan secara rekursif.
Listing Program
import java.util.*;
public class umur2
{
public static void main (String[]args)
{
Scanner input = new Scanner (System.in);
int a;
boolean data = false;
String [] nama = {"Ani","Budi","Septi","Caca","Roka"};
int [] umur = {7, 10, 8, 12, 5};
System.out.println ("DATA NAMA DAN UMUR ANAK :\nNama\t\tUmur");
for (int x = 0 ; x < umur.length ; x++)
{
System.out.println (nama[x]+"\t\t"+umur[x]);
}
System.out.print ("\nSOAL :\n1. Mencari usia anak yang berusia 8 tahun
dari dalam data\n2. Menampilkan nama anak yang usianya lebih dari 10
tahun\n3. Menampilkan nama anak yang usianya kurang dari 10
tahun\n\nMasukkan nomor soal : ");
int soal = input.nextInt();
switch (soal)
{
case 1 :
int angka = 8;
System.out.print ("\nYang berusia "+angka+" tahun : ");
for (a = 0 ; a < umur.length ; a++)
{
if (umur[a] == angka)
{
data = true;
System.out.print (" "+nama[a]+", ");
}
}
break;
case 2 :
System.out.print ("\nYang berusia lebih dari 10 tahun : ");
for (a = 0 ; a < umur.length ; a++)
{
if (umur[a] > 10)
{
data = true;
System.out.print (""+nama[a]+" ");
}
}
break;
case 3 :
System.out.print ("\nYang berusia kurang dari 10 tahun : ");
for (a = 0 ; a < umur.length ; a++)
{
if (umur[a] < 10)
{
data = true;
System.out.print (""+nama[a]+", ");
}
}
break;
default :
System.out.println ("Pilihan salah.");
}
}
}
Printscreen (Output)
Mencari usia anak yang berumur 8 tahun
2. Menampilkan nama anak yang berusia lebih dari 10 tahun
3. Menampilkan nama-nama anak yang usianya kurang dari 10 tahun.
Pembahasan
Program ini adalah
salah satu contoh dari Sequential Search dimana program ini akan mencari
nama anak dengan kondisi umur yang telah ditentukan berdasarkan data
yang telah disediakan. Algoritma program :
Ø Inisialisasi variabel data yang memiliki nilai yang salah
Ø Buat array bertipe string yang berisi nama anak
Ø Buat array bertipe integer yang berisi umur anak
Ø Tampilkan data kedua array tersebut sebagai soal untuk user
Ø Gunakan switch case untuk memilih apa yang akan dilakukan program
Ø Disetiap case, lakukan perulangan sehingga data yang ditemukan sesuai dengan yang diperintahkan.
Ø Apabila data ditemukan rekam secara keseluruhan
Ø Lalu tampilkan semua nama anak yang ditemukan
Flowchart
Penjelasan :
Pertama mendeklarasikan variabel array dengan nama “nama” bertipe data string. Lalu mendeklarasikan variabel array dengan nama “umur” bertipe data integer. Setelah itu melakukan perulangan for loop untuk menampilkan data kedua buah array agar tampil semua datanya.
Kita lalu menggunakan variabel soal sebagai switch untuk memilih case mana yang akan dijalankan pada program yang akan diinput oleh user.
Pada case 1, kita menggunakan perulangan for untuk mengecek nilai setiap
indeks array umur untuk dibandingkan dengan umur yang ingin dicari
user. Jika umur yang dicari user dapat ditemukan, maka program akan
mencetak nama anak yang memiliki usia itu. Dan jika tidak bisa
ditemukan, program akan memberitahu bahwa usia yang user cari tidak bisa
ditemukan.
Pada case 2, kita menggunakan perulangan for untuk mengecek nilai setiap array umur apakah memenuhi syarat. Syarat dari case 2 adalah umur anak harus lebih dari 10. Meskipun program sudah menemukan satu anak yang umurnya memenuhi syarat, tetapi untuk case 2, program akan mengecek seluruh array tanpa terkecuali. Setiap hasil pengecekan sesuai dengan syarat, program akan mencetak nama anak yang memiiki usia tersebut. Setelah pengecekan selesai sampai data terakhir, barulah program tersebut berhenti.
Pada case 2, kita menggunakan perulangan for untuk mengecek nilai setiap array umur apakah memenuhi syarat. Syarat dari case 2 adalah umur anak harus lebih dari 10. Meskipun program sudah menemukan satu anak yang umurnya memenuhi syarat, tetapi untuk case 2, program akan mengecek seluruh array tanpa terkecuali. Setiap hasil pengecekan sesuai dengan syarat, program akan mencetak nama anak yang memiiki usia tersebut. Setelah pengecekan selesai sampai data terakhir, barulah program tersebut berhenti.
Pada case 3, kita menggunakan perulangan for untuk melakukan pengecekan
nilai-nilai array dalam variabel umur apakah memenuhi syarat atau tidak.
Syarat untuk case 3 ini adalah nilai array umur harus lebih dari 10.
Apabila ada array yang sudah memenuhi syarat tersebut, maka program
tetap terus akan melakukan pengecekan terhadap seluruh nilai array umur.
Setiap ada nilai yang memenuhi syarat, program akan mencetak nama anak
yang usianya memenuhi syarat.
Default digunakan apabila user menginputkan pilihan selain case yang telah disediakan. Dalam program ini, yang dilakukan adalah mencetak pernyataan bahwa user menginputkan pilihan yang salah.
Default digunakan apabila user menginputkan pilihan selain case yang telah disediakan. Dalam program ini, yang dilakukan adalah mencetak pernyataan bahwa user menginputkan pilihan yang salah.