SEARCHING
kali ini saya akan sedikit berbagi ilmu tentang search engine berproses, langsubg aja baca dibaca
Searching adalah
proses pencarian data dalam array menggunakan sequential dan binary. Sequential
digunakan ketika data yang dicari tidak berurutan dan binary sebaliknhya.
1.
Sequential
Sequential
dilakukan denhgan cara membandingkan data yang akan dicari menggunakan array,
contoyhnya seperti dibawah ini :
0
|
1
|
2
|
3
|
4
|
5
|
|
X
|
77
|
34
|
21
|
87
|
120
|
12
|
Data diatas
sengaja saya buat acak agar kita bisa langsung praktek dan bias memahaminya, anggap
saja kita akan mencari angka 87. Pertama kita buat dulu pseudeucodenya
1.
Index = 0
2.
Input kriteria
3.
While kriteria
tidak sama dengan X[index]
4.
Index++
5.
Jika kriteria
sama dengan X[index]
6.
Output ketemu
= X[index]
Langsung saja gan ini prosesnya
1.
Apakah
kriteria = 87 tidak sama dengan X[0] (77)
Ya maka index++
2.
Apakah
kriteria = 87 tidak sama dengan X[1] (34)
Ya maka index++
3.
Apakah
kriteria = 87 tidak sama dengan X[2] (21)
Ya maka index++
4.
Apakah
kriteria = 87 tidak sama dengan X[3] (87)
Tidak
5.
Maka ketemu = X[3] (87)
Gimana gan udah faham belum??? Mudah kan
2.
Binary search
Binary search
dilakukan dengan cara mengurutkan data pada array, proses pencariannya dengan
cara membandingkan nilai tengah data array. Berikut contoh arraynya
0
|
1
|
2
|
3
|
4
|
5
|
6
|
|
X
|
12
|
55
|
59
|
67
|
72
|
113
|
132
|
Dari data
array di atas kita akan mencari 72. Kita harus mencari data tengah terlebih
dahulu, tetapi jika data array berjumlah ganjil itu akan mempercepat proses
pencarian karena tak harus mencari data tengah dengan rumus. Berikut cara
mencari data tengah array yang berjumlah gelap
data tengah
= (index awal + index akhir)/2 = ….
data tengah
= (0 + 6)/2 = 6 / 2 = 3
dari
cara di atas dapat kita ketahui bahwa data tengah array adalah index ke 3
0
|
1
|
2
|
3
|
4
|
5
|
6
|
|
X
|
12
|
55
|
59
|
67
|
72
|
113
|
132
|
awal
|
Tengah
|
akhir
|
Untuk mempermudah
memahami proses pencarian lkita buat pseudeucode dulu
1.
Tengah =
(index awal + index akhir)/2 =
2.
Input kriteria
3.
Jika kriteria
> tengah, maka nilai awal = tengah +1
4.
Jika kriteria
< tengah, maka nilai awal = tengah -1
5.
Jika kriteria
== tengah, ketemu tengah
Sekarang mari kita berproses
1.
Tengah X[3]
2.
Kriteria =
72
3.
72 > 67
Awal = tengah +1
4
|
5
|
6
|
72
|
113
|
132
|
Awal
|
akhir
|
4.
Tengah =
(4 + 6)/2 = 5
4
|
5
|
6
|
72
|
113
|
132
|
awal
|
Tengah
|
akhir
|
5.
72<113
Akhir = tengah -1
4
|
72
|
Tengah
|
nah apabila penjelasan di atas kurang difahami, dibawah ini saya mencatumkan contoh kodingan untuk searching
<!DOCTYPE html>
<html>
<head>
<title>PENCARIAN AAAA</title>
<script type="text/javascript">
var angka=[];
function Random()
{
for(var i = 0; i < 50; i++)
{
angka[i] = Math.floor(Math.random()*(100 ));
document.getElementById("txt_keluar").innerHTML += angka[i]+", ";
}
}
function AmbilArray(sort)
{
for(var i= 0; i < angka.length; i++)
document.getElementById(sort).innerHTML += angka[i] + ", "
}
function Insert()
{
for(var o = 0; o < angka.length; o++)
{
var nomer = angka[o]
for(var k = o - 1; k > -1 && angka[k] > nomer; k--)
{
angka[k + 1] = angka[k]
}
angka[k + 1] = nomer
}
AmbilArray("lbl_urut")
}
function Menampilkan(hasil, tengah)
{
if (hasil == true)
{
document.getElementById("lbl_hasil").innerHTML="Data ditemukan pada index ke- "+tengah;
}
else
{
document.getElementById("lbl_hasil").innerHTML="Data tidak ditemukan"
}
}
function RecrusiveBinarySearch(DataPencarian)
{
var Mulai = performance.now();
Insert();
var Awal = 0;
var Akhir = angka.length - 1;
var Tengah
var Hasil = false;
while(Awal <= Akhir)
{
Tengah = Math.floor((Akhir + Awal)/2);
if(angka[Tengah] == DataPencarian)
{
Hasil = true;
break;
}
else if(DataPencarian < angka[Tengah])
{
Akhir = Tengah - 1;
}
else
{
Awal = Tengah + 1
}
}
if(Hasil == true)
{
document.getElementById("out_hasil").innerHTML = "Data Ditermukan pada Indeks ke - "+Tengah;
}
else
{
document.getElementById("out_hasil").innerHTML = "Data Tidak Ditemukan"
}
var Berhenti = performance.now();
var Waktu = parseFloat((Berhenti - Mulai)/1000).toFixed(5);
document.getElementById("out_waktu").innerHTML = "Waktu Pencarian : " + Waktu + "detik"
}
</script>
</head>
<body>
<input type="button" value="Klik Untuk Acak Angka" onclick="Random()">
<br><br>
<label id="txt_keluar">RANDOM DATA : </label>
<br><br>
<label> Urut dulu : </label>
<label id="lbl_urut"></label><br><br>
<label>CARI DATA : </label>
<input type="text" placeholder="--masukkan angka--" id="tx_masukdata">
<input type="button" value="LAKUKAN PENCARIAN" onclick="RecrusiveBinarySearch(tx_masukdata.value)"><br>
<br>
<label id="out_hasil"></label>
<br>
<label id="out_waktu"></label>
</form>
</body>
</html>
<html>
<head>
<title>PENCARIAN AAAA</title>
<script type="text/javascript">
var angka=[];
function Random()
{
for(var i = 0; i < 50; i++)
{
angka[i] = Math.floor(Math.random()*(100 ));
document.getElementById("txt_keluar").innerHTML += angka[i]+", ";
}
}
function AmbilArray(sort)
{
for(var i= 0; i < angka.length; i++)
document.getElementById(sort).innerHTML += angka[i] + ", "
}
function Insert()
{
for(var o = 0; o < angka.length; o++)
{
var nomer = angka[o]
for(var k = o - 1; k > -1 && angka[k] > nomer; k--)
{
angka[k + 1] = angka[k]
}
angka[k + 1] = nomer
}
AmbilArray("lbl_urut")
}
function Menampilkan(hasil, tengah)
{
if (hasil == true)
{
document.getElementById("lbl_hasil").innerHTML="Data ditemukan pada index ke- "+tengah;
}
else
{
document.getElementById("lbl_hasil").innerHTML="Data tidak ditemukan"
}
}
function RecrusiveBinarySearch(DataPencarian)
{
var Mulai = performance.now();
Insert();
var Awal = 0;
var Akhir = angka.length - 1;
var Tengah
var Hasil = false;
while(Awal <= Akhir)
{
Tengah = Math.floor((Akhir + Awal)/2);
if(angka[Tengah] == DataPencarian)
{
Hasil = true;
break;
}
else if(DataPencarian < angka[Tengah])
{
Akhir = Tengah - 1;
}
else
{
Awal = Tengah + 1
}
}
if(Hasil == true)
{
document.getElementById("out_hasil").innerHTML = "Data Ditermukan pada Indeks ke - "+Tengah;
}
else
{
document.getElementById("out_hasil").innerHTML = "Data Tidak Ditemukan"
}
var Berhenti = performance.now();
var Waktu = parseFloat((Berhenti - Mulai)/1000).toFixed(5);
document.getElementById("out_waktu").innerHTML = "Waktu Pencarian : " + Waktu + "detik"
}
</script>
</head>
<body>
<input type="button" value="Klik Untuk Acak Angka" onclick="Random()">
<br><br>
<label id="txt_keluar">RANDOM DATA : </label>
<br><br>
<label> Urut dulu : </label>
<label id="lbl_urut"></label><br><br>
<label>CARI DATA : </label>
<input type="text" placeholder="--masukkan angka--" id="tx_masukdata">
<input type="button" value="LAKUKAN PENCARIAN" onclick="RecrusiveBinarySearch(tx_masukdata.value)"><br>
<br>
<label id="out_hasil"></label>
<br>
<label id="out_waktu"></label>
</form>
</body>
</html>
Sekian dari saya, apabila
ada kekurangan dan tidak bias difahami bias langsung komen. terimakasih
Komentar
Posting Komentar