Se nessun recupero su una coordinata: è possibile proporre hashing x, y coppie di coordinate. Post propone un hash con bassa collisione, così come lo hash = (y << 16)^x;
.
Ma si desidera accedere al proprio valore di scrittura per xey. La struttura per memorizzare punti ed eseguire efficientemente operazioni su di essa è un punto QTree o Quad Tree. See here.
Il quadrifoglio punto è un adattamento di un albero binario utilizzato per rappresentare i dati del punto bidimensionale . Condivide le caratteristiche di tutti i quadrif. ma è un vero albero poiché il centro di una suddivisione si trova sempre su un punto .
Un nodo di un punto Quadtree è simile a un nodo di un albero binario, con la principale differenza che ha quattro puntatori (uno per ogni quadrante) invece di due ("sinistra" e "destra") come in un ordinario albero binario . Anche una chiave è solitamente scomposta in due parti, facendo riferimento a x e alle coordinate y. Pertanto un nodo contiene le seguenti informazioni: 4 Indicatori: quad ['NW'], quad ['NE'], quad ['SW'] e quad ['SE']; che a sua volta contiene: chiave; solitamente espresso come x, y coordinate valore; ad esempio un nome
Quindi, è possibile avere una funzione ricorsiva per interrogare tutti i punti all'interno di un intervallo AABB. È possibile adattare questa implementazione di QueryRange()
class QuadTree
{
function queryRange(AABB range)
{
Array of XY pointsInRange; // Prepare an array of results
// Check objects at this quad level
for (int p := 0; p < points.size; p++)
{
if (range.containsPoint(points[p]))
pointsInRange.append(points[p]);
}
pointsInRange.appendArray(northWest->queryRange(range));
pointsInRange.appendArray(northEast->queryRange(range));
pointsInRange.appendArray(southWest->queryRange(range));
pointsInRange.appendArray(southEast->queryRange(range));
return pointsInRange;
}
}
Quando ho detto userò tabella hash per ax coordinate, come per corrispondenti coordinate Y si verificano collisioni, per coloro userò liste concatenate, quindi Poi Intervistatore detto che se io sono già usando i pionter in questi elenchi collegati posso fare meglio a utilizzare questi puntatori. – user2328404
Non lo so, forse stava suggerendo di combinare in qualche modo tabelle x e y hash per risparmiare spazio. – user2328404