Saat melakukan kata kode kedua (yang meminta Anda untuk menerapkan algoritma pencarian biner lima kali, setiap kali dengan metode yang berbeda), saya telah menghasilkan solusi yang sedikit berbeda yang berfungsi sebagai berikut:
Jika saya memiliki array yang disortir dengan panjang 100 dan saya melihat bidang awalnya berisi angka 200 dan bidang akhirnya berisi angka 400, saya, sebagai matematika yang mempelajari manusia, kemungkinan akan mulai mencari di sekitar bidang 35 jika saya mencari di angka 270, dan bukan bidang 50 seperti dalam algoritma pencarian biner normal.
Kemudian, jika angka pada bidang 35 array adalah 270, 35 adalah indeks yang saya cari.
Jika bukan itu masalahnya saya dapat membandingkan angka yang saya dapatkan (katakanlah 280) dan ulangi operasi dengan mengambil bagian bawah array (jadi saya memiliki 35 bidang dengan bidang awal berisi 200 dan bidang akhir berisi 280) jika nomor yang saya temukan lebih besar dari apa yang saya cari, atau bagian atas array (katakan saya mendapat 260: sekarang saya memiliki 65 indeks, yang pertama berisi 260 dan yang terakhir berisi 400). Orientatif, saya akan menuju ke atas indeks 4 dari sub array ini, yang merupakan indeks 39 dari seluruh array) jika angka yang saya dapatkan lebih kecil dari angka yang saya cari.
Pertanyaannya adalah: dapatkah algoritma ini dianggap sebagai algoritma pencarian biner? Jika tidak, apakah sudah mendapat namanya sendiri?
sumber
Jawaban:
Saya tidak akan menyebut ini pencarian biner.
Ini jelas mirip dengan pencarian biner dan wajar untuk melihatnya sebagai penyempurnaan dari pencarian biner. Namun memiliki karakteristik kompleksitas algoritma yang berbeda secara signifikan, Pencarian Interpolasi telah memperkirakan waktu berjalan O (log (log (n)) dengan asumsi data terdistribusi secara seragam, namun membayar untuk ini dengan memiliki O (n) waktu menjalankan kasus terburuk.
Saya lebih suka mengatakan "Waktu run kasus terburuk dari pencarian biner adalah O (log (n))" daripada "Tergantung pada pilihan elemen pembatas, run time case terburuk dari pencarian biner adalah O (log (n))". Ini berarti bahwa saya tidak dapat mengklasifikasikan pencarian Interpolasi sebagai algoritma pencarian biner.
sumber
Ya, ini dikenal sebagai Pencarian Interpolasi . Dengan beberapa peringatan (tergantung pada model komputasi Anda dan distribusi data) waktu berjalan yang diharapkan adalah , lebih baik daripada pencarian biner.O(loglogn)
sumber
Saya pikir terminologi yang benar akan menjadi pencarian yang direnungkan dikotomial.
Anda mencari dalam susunan datar dengan pencarian yang direnungkan selanjutnya berdasarkan pada distribusi rata yang seharusnya dari angka-angka di dalamnya.
Ini sesuai dengan bagaimana seseorang akan mencari kata dalam kamus. Tetapi bisa sangat tidak efisien jika distribusi data tidak teratur.
sumber