Pencarian Biner
Berkas Biner Menyimpan data sembarang dan tidak dipisah-pisahkan dalam baris Bisa berisi data dan kode program dalam bahasa mesin Jika dibuka menggunakan text editor semacam Notepad, akan muncul huruf-huruf yang tak terbaca Macamnya : Object File : berisi byte-byte yang diatur dalam blok-blok yang dapat dipahami system linker Executable File : berisi kode mesin yang langsung dapat dimuat ke dalam memory dan dijalankan oleh loader Data File : berisi data semacam gambar, suara, video, dll
Pencarian Biner Membandingkan kunci yang dicari dengan rekaman pada posisi tengah dari berkas. Bila sama (kasus 1) berarti rekaman yang diinginkan sudah ditemukan, atau kalau tidak sama (kasus2) berarti separuh dari rekaman-rekaman dalam berkas akan dieliminasi dari perbandingan yang selanjutnya. Bila yang terjadi adalah kasus 2 maka proses pembandingan terhadap rekaman pada posisi tengah dilanjutkan menggunakan rekaman-rekaman yang tersisa
/* n buah rekaman diurutkan menaik menurut kunci rekaman */ AWAL :=1 Proc pencarian_biner /* n buah rekaman diurutkan menaik menurut kunci rekaman */ AWAL :=1 Akhir := n While AWAL ≤ AKHIR do tengah := [ (awal+akhir)/2] if kunci (cari) = kunci (tengah) then pencarian berakhir. else if kunci(cari) > kunci (tengah) then AWAL := TENGAH + 1 else AKHIR := TENGAH – 1 end rekaman tidak ditemukan end pencarian_biner 4
TENGAH := [(AWAL+AKHIR)/2] Flowchart utk pencarian biner Mulai AWAL = 1 AKHIR = N AWAL : AKHIR > Rekaman Tidak ditemukan ≤ TENGAH := [(AWAL+AKHIR)/2] Kunci(cari): Kunci (tengah) < = AKHIR = TENGAH -1 Rekaman ditemukan > Selesai AWAL = TENGAH +1 5
Tengah = [ (awal + akhir)/2 ]
Jika kunci cari < kunci tengah, maka bagian berkas mulai dari kunci tengah sampai akhir berkas dieliminasi. Jika kunci cari > kunci tengah , maka bagian berkas mulai dari depan sampai dengan kunci tengah dieliminasi. Jika Awal >Akhir maka rekaman tidak ditemukan Pembulatan angka untuk hasil nilai tengah adalah pembulatan ke bawah
Berikut akan dicari rekaman dengan kunci 49, berapa probe yang dilakukan untuk mendapatkannya? Keterangan : Bilangan yang dicetak tebal menunjukkan rekaman yang sedang dibandingkan dan tanda kurung membatasi bagian berkas yang tersisa yang masih harus diperbandingkan. Tanda [ untuk AWAL dan tanda ] untuk AKHIR.
Perhitungan 1 2 3 4 5 6 7 8 9 [21, 25, 28, 33, 38, 39, 48, 49, 69]
Perhitungan: TENGAH1 = [ (1 + 9)/2] = 5 → Kcari : Ktengah1 → 49 > 38 → AWAL = TENGAH1 + 1 = 6 TENGAH2 = [ (6 + 9)/2 ] = 7 → Kcari : Ktengah2 → 49 > 48 → AWAL = TENGAH2 + 1 = 8 TENGAH3 = [ (8 + 9)/2] = 8 → Kcari : Ktengah 3 → 49 = 49 Ketemu, di Probe = 3
Perhitungan 1 2 3 4 5 6 7 8 9 [21, 25, 28, 33, 38, 39, 48, 49, 69] [21, 25, 28, 33, 38, [39, 48, 49, 69] [21, 25, 28, 33, 38, 39, 48, [49, 69]
2. Berikut akan dicari rekaman dengan kunci 27. 1 2 3 4 5 6 7 8 9 [21, 25, 28, 33, 38, 39, 48, 49, 69] [21, 25, 28, 33], 38, 39, 48, 49, 69 21, 25, [28, 33], 38, 39, 48, 49, 69 21, 25], [28, 33, 38, 39, 48, 49, 69
Perhitungan : TENGAH1 = [ (1 + 9)/2] = 5 → Kcari : Ktengah1 → 27 < 38 → AKHIR = TENGAH1 - 1 = 4 TENGAH2 = [ (1 + 4)/2 ] = 2 → Kcari : Ktengah2 → 27 > 25 → AWAL = TENGAH2 + 1 = 3 TENGAH3 = [ (3 + 4)/2] = 3 → Kcari : Ktengah 3 → 27< 28 → AKHIR = TENGAH3 – 1 = 2 AWAL > AKHIR → Rekaman tidak ditemukan
Diketahui rekaman-rekaman dengan kunci 34, 44, 51, 56, 690, 890, 1060, 2876, 3570, dan 3999, berapa Probe diperlukan untuk menemukan reakaman dengan kunci 51, 1060 dan 895 menggunakan pencarian biner?