salvataggio delle informazioni sulla connettività in una rete di nodi / spigoli

1

Voglio implementare l'algoritmo A * . Ho una rete con Nodi e Bordi, entrambe sono classi.

Ora, non sono sicuro su come accedere alle informazioni sulla connettività. Un nodo dovrebbe sapere quali bordi si allontanano da esso? Un edge dovrebbe sapere quali due nodi si connettono?

Credevo che entrambe le risposte fossero vere, ma poi ci sono delle dipendenze circolari, cioè quando copi un nodo, copia tutti i bordi che ha, che, a sua volta, copiano tutti i nodi che connettono e così via.

Forse è meglio salvare tutti i problemi di connettività nella classe Network? Ma poi devo crearli esplicitamente e devo aggiornarli manualmente se cancello o aggiungo nodi / spigoli.

Qual è un buon modo per avvicinarsi a questo?

    
posta gartenriese 07.10.2014 - 21:08
fonte

2 risposte

1

Grafici

Le dipendenze di un grafico sono:

 graph  <- {vertices, edges}
 edge   <- {u, v}   // u and v are vertices
 vertex <- {Label}

L'etichetta di un vertice può essere implicita dalla struttura dei dati dell'implementazione, ad es. è indice all'interno di un array. I vertici dipendono dalle etichette indipendentemente dai bordi perché un singolo vertice è ancora un grafico [o un albero o una rete] a sé stante.

Logica aziendale

In un'implementazione, l'etichetta del vertice potrebbe essere utilizzata per recuperare un record. Ciò che è archiviato nel record è una questione di logica aziendale, non una proprietà di grafici. Pertanto la scelta di archiviare i bordi al vertice è soggetta all'analisi ingegneristica. Ma tutte le operazioni grafiche possono essere implementate senza farlo.

Man mano che informazioni più dettagliate vengono archiviate nei vertici, meno generale diventa l'implementazione. Memorizzare i bordi sul nodo è essenzialmente il caching e include tutti i problemi normalmente associati a qualsiasi altro processo di cache, ad es. i router e gli switch dedicano molta energia all'implementazione della logica di business per far fronte alla memorizzazione dei bordi nei nodi.

Compromessi

Più l'implementazione è matematica, più è facile ragionare. Più business piace, più alto è il limite massimo per le prestazioni finali in teoria. Tuttavia, i massimali teorici sulle prestazioni si basano sull'ottimizzazione della logica aziendale ed è più difficile che ottenere la matematica giusta.

    
risposta data 05.02.2015 - 05:03
fonte
1

Se i bordi non hanno attributi (che non hai indicato) il modo più semplice è di non aggiungere il margine A → B se A → B esiste già. Ecco come i meccanismi di allagamento decentralizzati (ad es. USENET) evita i cicli di formazione.

Per quanto riguarda gli oggetti che dovrebbero sapere a cosa sono connessi, hai uno scambio spazio / tempo: puoi sapere che i nodi conoscono nodi o nodi o entrambi. Per fare cose utili con i grafici, entrambi sono probabilmente i migliori altrimenti passerai molto tempo a cercare elementi.

    
risposta data 08.10.2014 - 02:27
fonte

Leggi altre domande sui tag