Algoritma pencarian biner: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Borgxbot (bicara | kontrib)
k Bot: Penggantian teks otomatis (-==Lihat juga== +==Lihat pula==)
Borgxbot (bicara | kontrib)
k Robot: Cosmetic changes
Baris 24:
 
'''function''' binarySearch(a, value, left, right)
'''while''' left ≤ right
mid := floor((right-left)/2)+left
'''if''' a[mid] = value
Baris 70:
Ada beberapa hal yang tidak terkait dengan komputer dimana sebuah pemilahan biner adalah cara tercepat untuk mengisolasi sebuah solusi yang dicari. Pada pemecahan sebuah permasalah dengan banyak kemungkinan penyebab, kita dapat mengubah setengah sangkaan, kita lihat apakah permasalahan masih terjadi dan tentukan bagian setengah berikutnya; ubah setengah sangkaan sisanya, dan seterusnya.
 
Contoh nyata lainnya: pada satu revisi di antara 500 revisi terakhir, sebuah paragraf penting terhapus dari sebuah artikel Wikipedia—pertanyaanyaWikipedia—pertanyaanya di revisi mana? Kita menghadapai paling banyak 500 opersi pembandingan, atau 9 pembandingan dengan pemilahan biner (2 pangkat 9, yaitu 512).
 
== Dukungan Bahasa ==
Banyak pustaka standard menyediakan suatu cara untuk pencarian biner. [[Bahasa pemrograman C|C]] menyediakan <code>bsearch</code> dalam pustaka standardnya. [[Standard Template Library|STL]]-nya [[C++]] menyediakan [[fungsi algoritma]] <code>[[lower bound]]</code> dan <code>[[upper bound]]</code>. [[Java (sun)|Java]] menyediakan sebuah himpunan method statik ''overloded'' <code>binarySearch</code> dalam kelas {{JavaDoc:SE|package=java.util|java/util|Arrays}} untuk melakukan pencarian biner pada array java.
 
== 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]], algoritma-algoritma yang mengasihlan jawaban sederhana berupa ya/tidak.
 
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.
 
== Lihat pula ==
* [[Pencarian biner seragam]]
* [[Notasi O besar]]
Baris 91:
 
== References ==
* [[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&ndash;426409–426.
 
[[Kategori:Algoritma]]
Baris 98:
[[de:Binäre Suche]]
[[es:Búsqueda binaria]]
[[fi:Puolitushaku]]
[[fr:Dichotomie]]
[[it:Ricerca dicotomica]]
[[pt:Pesquisa binária]]
[[sk:Binárne vyhladávanie]]
[[fi:Puolitushaku]]