Ho appena letto Questo algoritmo può ancora essere considerato un algoritmo di ricerca binaria? e ha ricordato che qualche anno fa ho scritto un indicizzatore / ricerca di file di registro per trovare voci di registro in file di testo di grandi dimensioni in base alla finestra data / ora.
Mentre facevo questo, ho deciso di provare la ricerca di interpolazione (non sapevo come si chiamava, mi sono imbattuto nell'idea da solo). Quindi, per qualche motivo, ho continuato a pensare di alternare i passaggi di interpolazione con i passaggi di divisione binaria: sul passaggio 0 interpolerei per decidere il punto di prova, quindi il passaggio 1 prenderei il punto medio esatto, ecc.
Ho quindi confrontato il sistema usando la ricerca di interpolazione pura, la ricerca binaria pura e il mio tentativo di combinazione. L'approccio alternativo è stato un chiaro vincitore, sia nel tempo che nel numero di test richiesti prima di trovare una serie di tempi scelti casualmente.
Ispirato alla domanda collegata, ho appena fatto una rapida ricerca di "ricerca di interpolazione alternata e ricerca binaria" e non ho trovato nulla. Ho anche provato la "ricerca di interpolazione coperta" come suggerito nel mio commento su una delle risposte.
Mi sono imbattuto in una cosa conosciuta? C'è qualche giustificazione teorica per essere più veloce per alcuni tipi di dati? I file di registro erano in genere di grandi dimensioni per il tempo (ad esempio 1-2 GB di testo con forse 10 milioni di righe da cercare) e la diffusione di date / orari era complessa con forti esplosioni di attività, tempi di punta generali e periodi di quiete. I miei test di riferimento sono stati campionati da una distribuzione uniforme dei tempi target da trovare.