Ovviamente, per fare una ricerca di interpolazione, hai bisogno di un tipo di chiave per cui è noto più di un ordine: devi essere in grado di fare calcoli sui tasti per stimare una probabile distanza, non solo confrontare i tasti per determinare quale è maggiore o minore.
Per quanto riguarda le proprietà del set di dati, per lo più si tratta di una proprietà: una probabilità che le chiavi siano ragionevolmente in modo uniforme (o almeno prevedibilmente) distribuite in tutta la gamma di possibilità. Senza di ciò, una ricerca di interpolazione può effettivamente essere più lenta di una ricerca binaria.
Ad esempio, considera un set di dati con stringhe di lettere minuscole come chiavi. Supponiamo che tu abbia una chiave che inizia con "x". Una ricerca di interpolazione indicherà chiaramente che si dovrebbe iniziare la ricerca molto vicino alla fine del set. Se, tuttavia, la maggior parte delle tue chiavi inizia effettivamente con 'z', e quasi nessuna con qualcosa da 'a' anche se 'y', quella che stai cercando potrebbe essere molto vicina al all'inizio del set. Può / può richiedere un considerevole numero di iterazioni prima che la ricerca si avvicini all'inizio dove risiede la stringa che inizia con 'w'. Ogni iterazione rimuoverà solo il 10% circa del set di dati dalla considerazione, quindi ci vorranno diverse iterazioni prima che si avvicini all'inizio dove risiedono effettivamente le chiavi che iniziano con "w".
Al contrario, una ricerca binaria dovrebbe iniziare al centro, ottenere il segno di un quarto alla seconda iterazione, un ottavo sul terzo e così via. Le sue prestazioni non risentirebbero praticamente dello sfasamento dei tasti. Ogni iterazione rimuoverà la metà del set di dati dalla considerazione, proprio come se le chiavi fossero equamente distribuite.
Mi affretto ad aggiungere, tuttavia, che ci vuole veramente abbastanza una distribuzione distorta per rendere la ricerca di interpolazione notevolmente peggiore di una ricerca binaria. Ad esempio, può funzionare abbastanza bene anche in presenza di una discreta quantità di clustering localizzato.
Vorrei anche ricordare che una ricerca di interpolazione non ha necessariamente bisogno di usare l'interpolazione lineare. Ad esempio, se è noto che le tue chiavi seguono una distribuzione non lineare (ad esempio una curva a campana), diventa abbastanza facile tenerne conto nella funzione di interpolazione per ottenere risultati leggermente diversi dall'avere una distribuzione uniforme.