Binary Search pada Java

7
BINARY SEARCH Praktikum Algoritma dan Pemrograman Teknik Informatika UIN Sunan Gunung Djati Bandung Agus Andri Putra, ST.

Transcript of Binary Search pada Java

Page 1: Binary Search pada Java

BINARY SEARCHPraktikum Algoritma dan PemrogramanTeknik Informatika UIN Sunan Gunung Djati BandungAgus Andri Putra, ST.

Page 2: Binary Search pada Java

PENDAHULUAN• Salah satu syarat agar binary search dapat dilakukan adalah data

sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, binary search tidak dapat dilakukan. 

• 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

• Sebuah pencarian biner mencari nilai tengah (median), melakukan 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.

Page 3: Binary Search pada Java

ATURAN BINARY SEARCH• Prinsip dari Binary search dapat dijelaskan sebagai berikut :

• Mula-mula diambil posisi awal 0 dan posisi akhir = N-1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2. Kemudian data yang dicari dibandingkan dengan data tengah.

• Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah –1.

• Jika lebih besar, proses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah +1.

• Jika data sama, berarti data ditemukan.

Page 4: Binary Search pada Java

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.

Page 5: Binary Search pada Java

PENCARIAN BINER (BINARY SEARCH) DILAKUKAN UNTUK :• 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.

• 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).

• Syarat utama untuk pencarian biner adalah data di dalam tabel harus sudah terurut, misalkan terurut menaik.

Page 6: Binary Search pada Java

CONTOH PENULISAN ALGORITMA BINARY SEARCHKamus

Const N : integer = 8 { misalkan jumlah elemen array maksimum = 8 }Type A = array [ 1 ..... N ] of integerCari, BatasAtas, BatasBawah, Tengah : IntegerKetemu : boolean

ALGORITMAInput (cari) { meminta nilai data yang akan dicari}BatasAtas 1 { indeks array dimulai dari 1 }BatasBawah NKetemu FalseWhile (BatasAtas < BatasBawah) and (not ketemu) do

Tengah (BatasAtas + BatasBawah) div 2If A [Tengah] = cari thenKetemu true ElseIf ( A [Tengah] < cari ) then { cari di bagian kanan }BatasAtas Tengah + 1

ElseBatasBawah Tengah – 1 { cari di bagian kiri }EndifEndifEndWhileIf (ketemu) then

Output ( ‘Data berada di index nomor’, Tengah )Else Output ( ‘Data tidak ditemukan’ )Endif

Page 7: Binary Search pada Java

CONTOH DATA KASUS

Kasus 1 : cari = 12Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4

A [Tengah] = A [4] = 12, berarti loop pertama data langsung ditemukan 

Kasus 2 : cari = 15Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4

A [Tengah] = A [4] = 12 < cari = 15, berarti BatasAtas = Tengah + 1 = 4 + 1 = 5

Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 8) div 2 = 6A [Tengah] = A [6] = 25 > cari = 15, berarti BatasBawah = Tengah - 1 = 6 - 1 = 5

Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (5 + 5) div 2 = 5A [Tengah] = A [5] = 15, berarti setelah loop ketiga, data ditemukan

 

Kasus 3 : cari = 10Loop pertama : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 8) div 2 = 4

A [Tengah] = A [4] = 12 > cari = 10, berarti BatasBawah = Tengah - 1 = 4 - 1 = 3

Loop kedua : Tengah = (BatasAtas + BatasBawah) div 2 = (1 + 3) div 2 = 2A [Tengah] = A [2] = 5 < cari = 10, berarti BatasAtas = Tengah + 1 = 2 + 1 = 3

Loop ketiga : Tengah = (BatasAtas + BatasBawah) div 2 = (3 + 3) div 2 = 3A [Tengah] = A [3] = 8, berarti setelah loop ketiga, data tidak ditemukan

Untuk jumlah data sebanyak n, maka proses pembandingan maksimal sebanyak ( log n ) kali. Untuk contoh di atas, jumlah data 8, maka proses pembandingan maksimal sebanyak 3 kali.