Algoritma pencarian biner: Perbedaan antara revisi
Konten dihapus Konten ditambahkan
k Bot: Perubahan kosmetika |
Penambahan link divide and conquer (ID) Tag: Suntingan perangkat seluler Suntingan peramban seluler Tugas pengguna baru Disarankan: tambahkan pranala |
||
(14 revisi perantara oleh 12 pengguna tidak ditampilkan) | |||
Baris 1:
Sebuah '''
==
Penerapan terbanyak dari pencarian biner adalah untuk mencari sebuah nilai tertentu dalam sebuah [[
Pencarian diawali dengan memeriksa nilai yang ada pada posisi tengah list;
Baris 8:
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''
'''function''' binarySearch(a, value, left, right)
'''if''' right < left
'''return''' ''not found''
mid
'''if''' a[mid] = value
'''return''' mid
Baris 21:
'''return''' binarySearch(a, value, mid+1, right)
Karena pemanggilan fungsi di atas adalah [[rekursif ekor]], fungsi tersebut dapat dituliskan sebagai sebuah pengulangan (''loop''), hasilnya adalah
'''function''' binarySearch(a, value, left, right)
'''while''' left ≤ right
mid
'''if''' a[mid] = value
'''return''' mid
'''if''' value < a[mid]
right
'''else
left
'''return''' ''not found''
Pada kedua kasus,
Pencarian biner adalah sebuah [[
== Contoh ==
Sebuah contoh aksi pencarian biner adalah sebuah permainan tebak-tebakan dimana seorang pemain harus menebak sebuah [[Bilangan asli|bilangan bulat positif]] yang dipilih oleh pemain lain di antara 1 dan ''N'', dengan memanfaatkan jawaban pertanyaan berupa ya dan tidak. Misalnya ''N'' adalah 16 dan angka yang dipilih adalah 11, permainan dapat berjalan sebagai berikut.
* Apakah angka lebih besar dari 8? (Ya)
* Apakah angka lebih besar dari 12? (Tidak)
* Apakah angka lebih besar dari 10? (Ya)
* Apakah
Sehingga, angka tersebut pasti 11. Pada setiap langkah, kita memilih sebuah angka yang tepat berada di tengah-tengah jangkauan nilai-nilai yang mungkin. Sebagai contoh, saat kita mengetahui angka tersebut lebih besar dari 8, tetapi lebih kecil atau sama dengan 12, kita mengetahui untuk memilih angka di tengah-tengah jangkauan [9, 12] (pada kasus ini 10 adalah yang optimal).
Paling banyak ada <math>\lceil\log_2 N\rceil</math> pertanyaan yang dibutuhkan untuk mendapatkan angka tersebut, karena setiap pertanyaan menghilangkan setengah dari ruang pencarian. Sebagai catatan bahwa dibutuhkan kurang dari satu pertanyaan (iterasi) untuk
Walaupun angka yang kita tebak sangat banyak, pada kasus tidak ada batas atas ''N'', kita masih dapat
Baris 75:
== Penerapan pada [[teori kompleksitas komputasi|teori kompleksitas]] ==
Seandainya kita tidak mengetahui sebuah jangkauan yang tetap tempat dari bilangan ''k''berada, kita masih dapat menentukan nilainya dengan mengajukan <math>2\lceil\log_2k\rceil</math> pertanyaan ya/tidak dalam bentuk "Apakah ''k'' lebih besar dari ''x''?" untuk beberapa bilangan ''x''. Sebagai konsekuensi sederhana dari cara ini, jika kita dapat menjawab pertanyaan "Apakah nilai bilangan bulat ''k'' lebih besar dari nilai yang diberikan?" pada suatu waktu kemudian kita dapat menemukan nilai dari bilangan tersebut sama lamanya ditambah dengan faktor log ''k''. Hal ini disebut sebuah ''[[reduksi (kompleksitas)|reduksi]]'', dan karena disebabkan reduksi ini maka kebanyakan teoris kompleksitas berkonsentrasi pada [[permasalahan keputusan]],
Sebagai contoh, anggap kita dapat menjawab "Apakah matriks ''n'' x ''n'' ini memiliki [[determinan]] lebih besar dari ''k''?" dalam waktu O(''n''<sup>2</sup>). Kemudian, dengan memanfaatkan pencarian biner, kita dapat menemukan (batas atas) determinan tersebut dalam waktu O(''n''<sup>2</sup>log ''d''), dimana ''d'' adalah determinan; sebagai catatan, d bukanlah ukuran dari masukan tetapi ukuran dari keluaran.
Baris 92:
* [[Donald Knuth]]. ''The Art of Computer Programming'', Volume 3: ''Sorting and Searching'', Third Edition. Addison-Wesley, 1997. ISBN 0-201-89685-0. Section 6.2.1: Searching an Ordered Table, pp.409–426.
[[Kategori:
[[Kategori:
|