Algoritma Search





Assalamulaikum Wr.Wb bagaimana hari anda? Baik? alhamdulillah kalau begitu.

Baiklah saya akan menjelaskan tentang algoritma sequential search dan binary search.

Mungkin masih ada yg belum mengerti tentang dua istilah diatas. nah disini saya akan sedikit membagi ilmu yg saya dapat kepada anda sekalian semua.

APA ITU SEQUENTIAL SEARCH?

sequential search adalah metode untuk menemukan nilai target dalam daftar. Ini secara berurutan memeriksa setiap elemen dari daftar untuk nilai target sampai ada kecocokan atau sampai semua elemen dicari. Pencarian berikutnya adalah metode untuk menemukan nilai target dalam daftar. Ini secara berurutan memeriksa setiap elemen dari daftar untuk nilai target sampai ada kecocokan atau sampai semua elemen telah dicari.

Algoritmanya deskriptifnya adalah :

1. Input data yang dicari (x)
2. Bandingkan x dengan data ke-1 sampai n
3. Jika ada data yang sama dengan x maka cetak pesan “ada”
4. Jika tidak ada data yang sama maka cetak pesan “tidak ada”

saya akan berikan contoh dibawah. kita disuruh untuk mencari dengan nilai 29




Cara mengerjakannya adalah
1. 29 ==  x[0] = tidak ada = indeks ++
2. 29 ==  x[1] = tidak ada = indeks ++
3. 29 == x[2] = ada = tampilkan

APA ITU BINARY SEARCH?

Binary search, juga dikenal sebagai half-interval search, logarithmic search, atau binary chop, adalah algoritma pencarian yang menemukan posisi nilai target dalam array yang diurutkan. Pencarian biner membandingkan nilai target dengan elemen tengah dari array; Jika mereka tidak setara, setengah di  mana target tidak dapat dibohongi dihilangkan dan pencarian berlanjut pada sisa setengahnya sampai berhasil. Jika pencarian diakhiri dengan setengah sisanya kosong, targetnya tidak ada dalam array.

Algoritma dari binary search adalah:
1. Tentukan posisi awal = 0 dan posisi akhir = N – 1
2. Hitung posisi tengah = (posisi awal + posisi akhir) / 2
3. Bandingkan data yang dicari dengan elemen posisi tengah
4. Jika data yang dicari sama maka catat posisi dan cetak kemudian berhenti
5. Jika lebih besar maka akan dilakukan pencarian kembali ke bagian kiri dengan nilai posisi awal =        posisi tengah + 1 dan posisi akhir tetap kemudian ulangi mulai poin 2
6. Jika nilai datanya lebih kecil maka akan dilakukan pencarian kembali ke bagian kiri dengan nilai        posisi awal tetap dan nilai posisi akhir = posisi tengah – 1 kemudian ulangi mulai poin 2.

Contoh :

kita akan mencari nilai bilangan 23, pertama kita cari dulu index tengahnya dengan menggunakan algoritma atau tata cara sebelumnya,
-jumlah data dalam array ada 8 jadi kita kurangi 1 menjadi 7 dan dibagi 2 ketemu 3,5 lalu kita sederhanakan saja menjadi 3.
-nah setelah ketemu index ke 3 dengan nilai 45 maka kita akan persempit lagi pencariannya
- nilai 45 lebih besar dari 23 maka  kita gunakan algoritma ke 5 dengan menambahkan index tengah dengan 1 maka hasilnya menjadi 4 dan lalu kita bagi 2(algoritma 2) dengan hasil index 2 maka kita akan mendapat nilai yg kita cari yaitu 23.

pengerjaan lain.
1. Cari x[23]

---Binary Search---
-->0 + 7/2 = 3,5 = 3

-->0 + 4/2 = 2

Mungkin itu saja yg dapat saya sampaikan kali ini, saya dapat menyimpulkan bahwa dari kedua cara diatas ada yg memiliki kelebihan maupun kekurangan masing2 tergantung berapa banyaknya data yg dicari.

berikut adalah contoh script dari search :

<!DOCTYPE html>
<html>
<head>
<script>
var arraynya = new Array()
function dtrndm()
{
    for(var i = 0; i < 50; i++)
    {
        arraynya[i] = Math.floor(Math.random()*(100 ));
        document.getElementById("randomdata").innerHTML += arraynya[i]+", ";
    }
}
        function takearray(sort)
        {
            for(var i= 0; i < arraynya.length; i++)
                document.getElementById(sort).innerHTML += arraynya[i] + ", "
        }
        function prosesnya()
        {
            for(var y = 0; y < arraynya.length; y++)
            {
                var nomer = arraynya[y]
                for(var p = y - 1; p > -1 && arraynya[p] > nomer; p--)
                {
                    arraynya[p + 1] = arraynya[p]
                }
                    arraynya[p + 1] = nomer                             
            }
            takearray("urut")
        }
        
        
function search(arrayToSearch, valueToSearch)
    {
    var mulai = 0;
    var selesai = arrayToSearch.length -1;
    while(mulai <= selesai)
        {
        var middle = Math.ceil((selesai + mulai)/2)
        var middleValue = arrayToSearch[middle];
        if(middleValue === valueToSearch)
            {
            return middle;
            }
        else if(valueToSearch < middleValue)
            {
            selesai = middle -1;
            }
        else
            {
            mulai = middle +1 ;
            }
        }
            return middle;
    }
    function tampil(cari)
        {
            var Mulai = performance.now(cari);
            var a = arraynya;
            var b = cari;
            var mid = search(a, b);

            if (mid != -1)
          {
              alert("data telah ditemukan di indeks :"+mid);
              document.getElementById("hasil").innerHTML="Data ditemukan pada index ke- "+mid;
        
          }
          else
          {
              alert("Maaf data tidak ditemukan");
              document.getElementById("hasil").innerHTML="Data tidak ditemukan"
          }
          var Berhenti = performance.now();
            Waktu = parseFloat((Berhenti - Mulai)/10000).toFixed(5);
            document.getElementById("out_waktu").innerHTML = "Waktu Pencarian : " + Waktu + "detik"
        }
    </script>
</head>
<body>
<center>
<h1>Search</h1>
</center>
<form>
<label id="randomdata">Masukkan data </label>
<br>
<input type="button" value="Random" onclick="dtrndm()">
<br>
<label id="urut">Data Di Urutkan </label>
<br>
<input type="button" value="Urutkan" onclick="prosesnya()">
<br>
<input type="text" size="12" id="cari">
<input type="button" value="Proses" onclick="tampil(cari.value)">
<br>
<label id="hasil"></label>
<br>
<label id="out_waktu"></label>
</form>
</body>
</html>

dan berikut adalah screenshot dari hasilnya


sekian dari saya wassalamualaikum Wr.Wb.





Komentar

Postingan populer dari blog ini

Nested Looping/perulangan bersarang

Stack Dan Queue

Sorting