Binary Searching

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.

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 :

Contoh Aplikasi Binary Search dengan C dapat dilihat di http://lernc.blogspot.com/2011/05/binary-search-example-in-c-language.html
Function</strong> binarySearch(a, value, left, right)
    <strong>if</strong> right &lt; left
        <strong>return</strong> <em>not found</em>
    mid := floor((right-left)/2)+left
    <strong>if</strong> a[mid] = value
        <strong>return</strong> mid
    <strong>if</strong> value &lt; a[mid]
        <strong>return</strong> binarySearch(a, value, left, mid-1)
    <strong>else</strong>
        <strong>return</strong> binarySearch(a, value, mid+1, right)</pre>

Karena pemanggilan fungsi di atas adalah rekursif ekor, fungsi tersebut dapat dituliskan sebagai sebuah pengulangan (loop), hasilnya adalah algoritma in-place:

function</strong> binarySearch(a, value, left, right)
    <strong>while</strong> left ≤ right
        mid := floor((right-left)/2)+left
        <strong>if</strong> a[mid] = value
            <strong>return</strong> mid
        <strong>if</strong> value &lt; a[mid]
            right := mid-1
        <strong>else</strong>
            left  := mid+1
    <strong>return</strong> <em>not found

Advertisements
Binary Searching

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s