Ricerca interpolazione vs Ricerca binaria


13

Quando devo usare la ricerca interpolazione invece della ricerca binaria?

Ad esempio, ho un set di dati ordinato, in quali situazioni dovrei usare la ricerca binaria per trovare un elemento in questo set di dati o in quale situazione dovrei usare la ricerca interpolazione?

Quali proprietà del set di dati sarebbero il fattore determinante?

Risposte:


12

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.


1
Il problema che descrivi viene facilmente risolto utilizzando il primo e l'ultimo elemento per determinare l'intervallo invece di assumere Int.MIN_VALUE e Int.MAX_VALUE, che credo (almeno così ho imparato l'algoritmo) è il modo in cui la maggior parte lo fa.
Malfist,

2
@Malfist: può essere d'aiuto, ma non risolve necessariamente il problema. Nell'esempio, se avessi zero chiavi che iniziano con qualcosa da (diciamo) 'a' a 'q', l'interpolazione andrebbe abbastanza agevolmente. Un singolo outlier iniziato con a, tuttavia, danneggerebbe notevolmente le prestazioni.
Jerry Coffin,

1

Probabilmente penso che la domanda sia: quanto facilmente puoi trovare una funzione di interpolazione che effettivamente fa meglio della ricerca binaria.

Da Wikipedia sulla ricerca di interpolazione:

Utilizzando la notazione big-O, le prestazioni dell'algoritmo di interpolazione su un set di dati di dimensione N sono O (N); tuttavia, presupponendo una distribuzione uniforme dei dati sulla scala lineare utilizzata per l'interpolazione, è possibile dimostrare che le prestazioni sono O (log log N).

Le prestazioni pratiche della ricerca di interpolazione dipendono dal fatto che il numero ridotto di sonde sia compensato dai calcoli più complicati necessari per ciascuna sonda. Può essere utile per localizzare un record in un file ordinato di grandi dimensioni su disco, dove ogni sonda comporta una ricerca del disco ed è molto più lenta dell'aritmetica di interpolazione.

Le strutture di indicizzazione come gli alberi B riducono anche il numero di accessi al disco e sono più spesso utilizzate per indicizzare i dati su disco in parte perché possono indicizzare molti tipi di dati e possono essere aggiornati online. Tuttavia, la ricerca di interpolazione può essere utile quando si è costretti a cercare determinati set di dati su disco ordinati ma non indicizzati.


0

La ricerca binaria e la ricerca di interpolazione sono entrambe considerate metodi di ricerca lineare.

Entrambi si aspettano che l'elenco da cercare venga ordinato sulla colonna indicata come chiave . Questo è molto importante.

La ricerca binaria funziona per stringhe o numeri purché siano memorizzati in un ordine ordinato. L'idea principale alla base della ricerca binaria è che si basa sull'esame dell'elemento centrale. La ricerca di interpolazione è una variante. Invece di usare l'esatto elemento intermedio, indovina dove si trova l'elemento successivo da confrontare con il valore passato. Vedi il riferimento fornito dalla risposta JB King o quello sotto in questa risposta per i dettagli su come l'algoritmo di ricerca di interpolazione calcola il valore chiave successivo.

"La ricerca per interpolazione funziona solo su elementi numerici disposti in ordine di array ordinati con distribuzione uniforme (vale a dire, l'intervallo tra uno qualsiasi e gli elementi successivi è approssimativamente costante" (citazione dal riferimento sotto P 737, è incluso anche un confronto delle prestazioni tra diversi metodi di ricerca lineare ).

Google Libri - Strutture di dati classiche 2a ed.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.