Posizione più vicina - Heapify o Build-heap

2

Quindi diciamo che abbiamo un set di punti di dati GPS e la posizione corrente. Se ti viene chiesto di fornire il punto più vicino alla tua posizione corrente, possiamo utilizzare un heap con la distanza che rappresenta la chiave. Ora, se aggiorniamo la posizione corrente, sospetto che solo alcune delle chiavi cambieranno abbastanza da violare la proprietà heap. Sarebbe più efficiente ricostruire l'heap dopo aver ricalcolato le chiavi o eseguire heapify (supponendo che solo alcune delle chiavi siano state modificate abbastanza). Si presume che non saltiamo con la nuova posizione (la nuova posizione corrente è vicina all'ultima posizione corrente).

    
posta Trevor Adams 16.11.2011 - 05:08
fonte

1 risposta

1

Sono abbastanza sicuro che non puoi (errare) usare gli heap per il tuo scopo. Ti suggerisco di utilizzare invece strutture di dati create appositamente per il tuo problema.

Se il tuo set di punti dati GPS cambia quasi mai, alberi KD sono probabilmente la scelta migliore per questo . Se anche i tuoi punti dati si spostano, i quad-alberi sono probabilmente i migliori. Se ti senti particolarmente algoritmico, potresti persino provare a utilizzare hashing sensibile alla località .

Se non vuoi interrogare la tua struttura dati ogni volta che cambia la tua posizione attuale, potresti invece trovare i due punti più vicini, calcolare la differenza delle distanze da te ai due punti e solo ri-interrogare i dati struttura se la posizione corrente si è spostata dalla sua posizione quando hai interrogato la struttura dati rispetto a questa differenza.

Quindi, se A e B sono i due punti più vicini (A è il più vicino) alla posizione corrente D, e quindi inizi a muoverti da D di nuovo e finisci alla posizione C, allora devi solo interrogare nuovamente la struttura se | BD | - | A-D | < = | C-D |, perché solo così ti sei allontanato abbastanza da D per ottenere un punto diverso E (potenzialmente) interessante.

Se i tuoi punti dati e la posizione corrente possono essere davvero lontani tra loro, potresti dover tenere conto dell'arrotondamento della terra. Probabilmente non devi, ma non dimenticarlo.

    
risposta data 16.11.2011 - 12:51
fonte

Leggi altre domande sui tag