Difficoltà nel decidere la corretta struttura dei dati

1

Due oggetti interagiscono (Object Alpha, Object Beta)

Ciascuno contiene un punto (x, y) che verrà utilizzato per effettuare confronti, tra le altre cose.

L'attributo punto Alpha (x, y) dell'oggetto è dinamico e cambierà.

L'attributo punto Beta (x, y) è definitivo.

Ho bisogno di costruire una struttura dati che contenga tutte le Object Beta.

Stavo pensando ad una sorta di arraylist multidirezionale con un indice corrispondente ai valori dell'attributo point in modo da poter semplicemente scorrere avanti e indietro per trovare la beta più vicina all'interno di un determinato intervallo, tuttavia, come dovrei costruire una struttura dati come questo?

Forse un array multidimensionale collegato? Anche se questo sarebbe incredibilmente complesso quando uno aggiunge o rimuove elementi.

Qualche altro pensiero?

Use case - Object Beta essenzialmente è un oggetto che occupa un oggetto nello spazio reale. Vale a dire, l'attributo point corrisponde alla posizione GPS. L'oggetto Alpha è un altro oggetto nello spazio reale e l'attributo point corrisponde anche a una posizione GPS. Voglio trovare rapidamente l'importo x più vicino di Beta nella posizione attuale di Alpha. Aggiungi e rimuovi anche Beta da questa struttura senza ridefinire completamente l'intera struttura. Potrebbero esserci più di 1000 oggetti beta in questa struttura dati.

    
posta easymoden00b 26.02.2015 - 19:32
fonte

1 risposta

5

Raccomando di usare un R-tree (link a Wikipedia) Questa è la struttura dati standard che più usare per fare questo tipo di indicizzazione spaziale.

R-trees are tree data structures used for spatial access methods, i.e., for indexing multi-dimensional information such as geographical coordinates, rectangles or polygons. The R-tree was proposed by Antonin Guttman in 1984[1] and has found significant use in both theoretical and applied contexts.[2] A common real-world usage for an R-tree might be to store spatial objects such as restaurant locations or the polygons that typical maps are made of: streets, buildings, outlines of lakes, coastlines, etc. and then find answers quickly to queries such as "Find all museums within 2 km of my current location", "retrieve all road segments within 2 km of my location" (to display them in a navigation system) or "find the nearest gas station" (although not taking roads into account). The R-tree can also accelerate nearest neighbor search[3] for various distance metrics, including great-circle distance.[4]

Questo è un argomento abbastanza approfondito, consiglio di leggere l'intero articolo di Wikipedia collegato all'inizio della risposta.

Implementazioni in alcune lingue diverse:

risposta data 26.02.2015 - 19:53
fonte

Leggi altre domande sui tag