Ovviamente, per fare una ricerca di interpolazione, hai bisogno di un tipo di chiave per la quale è noto più che un ordine: devi essere in grado di fare calcoli sulle chiavi per stimare una distanza probabile, non solo confrontare le chiavi per determinare quale è maggiore o minore.
Per quanto riguarda le proprietà del set di dati, si tratta principalmente di una proprietà: una probabilità che le chiavi siano ragionevolmente equamente (o almeno prevedibilmente) distribuite in tutta la gamma di possibilità. Senza questo, una ricerca di interpolazione può effettivamente essere più lenta di una ricerca binaria.
Ad esempio, considerare 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 è necessario 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' sebbene 'y', quella che stai cercando potrebbe effettivamente essere molto vicino all'inizio del set. Può / può richiedere un numero considerevole di iterazioni prima che la ricerca si avvicini all'inizio dove risiede la stringa che inizia con 'w'. Ogni iterazione eliminerebbe solo il 10% circa del set di dati dalla considerazione, quindi occorrerebbero diverse iterazioni prima di avvicinarsi all'inizio in cui le chiavi iniziano con 'w'
Al contrario, una ricerca binaria inizierebbe nel mezzo, arrivando al segno di un quarto alla seconda iterazione, un segno di un ottavo sul terzo e così via. Le sue prestazioni non sarebbero quasi influenzate dall'inclinazione dei tasti. Ogni iterazione eliminerebbe la metà del set di dati dalla considerazione, proprio come se le chiavi fossero distribuite uniformemente.
Mi affretto ad aggiungere, tuttavia, che ci vuole davvero una distribuzione piuttosto distorta per rendere una 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 deve necessariamente utilizzare l'interpolazione lineare. Ad esempio, se i tuoi tasti sono noti per seguire 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.