Saya baru saja membaca. Dapatkah algoritma ini dianggap sebagai algoritma Pencarian Biner? dan ingat bahwa beberapa tahun yang lalu saya menulis pengindeks / mencari file log untuk menemukan entri log dalam file teks biasa dengan jendela tanggal / waktu.
Ketika melakukan ini, saya memutuskan untuk mencoba pencarian interpolasi (saya tidak tahu itu namanya, saya agak menemukan ide itu sendiri). Kemudian untuk beberapa alasan saya melanjutkan ide bolak langkah interpolasi dengan langkah-langkah biner split: Pada langkah 0 saya akan interpolasi untuk menentukan titik uji, kemudian langkah 1 saya akan mengambil titik tengah yang tepat dll.
Saya kemudian membandingkan sistem menggunakan pencarian interpolasi murni, pencarian biner murni dan upaya kombinasi saya. Pendekatan bergantian adalah pemenang yang jelas, baik dalam waktu dan jumlah tes yang diperlukan sebelum menemukan serangkaian waktu yang dipilih secara acak.
Terinspirasi oleh pertanyaan yang ditautkan, saya hanya membuat pencarian cepat untuk "pencarian interpolasi bergantian dan pencarian biner" dan tidak menemukan apa pun. Saya juga mencoba "pencarian interpolasi lindung nilai" seperti yang disarankan pada komentar saya pada salah satu jawaban.
Apakah saya menemukan sesuatu yang diketahui? Apakah ada pembenaran teoretis untuk itu lebih cepat untuk jenis data tertentu? File log biasanya besar untuk saat itu (mis. 1-2 GB teks dengan mungkin 10 juta baris untuk dicari), dan penyebaran tanggal / waktu di dalamnya rumit dengan aktivitas yang padat, waktu puncak umum dan waktu tenang. Tes benchmark saya diambil dari distribusi waktu target yang rata untuk ditemukan.
sumber
prefetcht0
instruksi ) kedua kemungkinan untuk iterasi NEXT sebelum memuat titik tengah saat ini, untuk pencarian dalam memori di perangkat keras x86 modern. Anda tidak dapat melakukan itu jika Anda tidak dapat memprediksi alamat pengambilan berikutnya sebelumnya. Jadi detail implementasi praktis bisa menjadi signifikan, selain dari pertimbangan teoritis .