Per ciascun punto in un grafico di grandi dimensioni, sto cercando di creare un elenco che contenga il numero di nodi non visitati alla distanza n
dal nodo iniziale. Un esempio di output è: [1,3,6]
che significa che a distanza 0 è il nodo di partenza stessa, ad una distanza 1 ci sono 3 nuovi (inesplorati) nodi, eccConteggio nodi non visitati alla distanza n per ogni nodo nel grafico
Se si ha solo un punto di partenza, questo è abbastanza facile: basta aumentare un contatore di shell in cima a una ricerca in ampiezza. Il problema inizia quando devo farlo per ogni nodo nel mio grafico. Poiché il mio grafico è grande (> 100000 nodi), diventa piuttosto lento eseguire la routine sopra per ogni punto.
Il mio primo tentativo di ottimizzare questo è stato quello di verificare se la lista sul nodo a
potesse essere costruita dagli elenchi di tutti i vicini di a
, ma finora non ho avuto fortuna, in parte a causa di cicli nel grafico. Spero che alcuni di voi possano avere delle buone idee, magari coinvolgendo alcune informazioni aggiuntive che posso memorizzare nella cache.
La mia domanda: c'è un modo per ottimizzare tale ricerca se si sa che si dovrà fare per il nodo ogni?
Il [tutto più breve problema percorsi] (http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm) è fondamentalmente ciò che cercate dopo il raggruppamento dalla distanza e il conteggio, e probabilmente si può fare davvero molto meglio di O (| V |^3). – Nuclearman
La mia ricerca per ampiezza è O (| E |), che è uguale a O (| V |) nel mio caso. Devo farlo per ogni nodo, quindi la mia complessità attuale è O (| V | ²). Ora sto usando il calcolo parallelo per accelerare il processo, ma altri suggerimenti sono i benvenuti! –
Dovrebbe essere ancora O (| V | * | E |), che è O (| V |^3) nel peggiore dei casi. Tuttavia, se stai dicendo che | V | è vicino a | E |, quindi probabilmente non c'è molto di più di quello che puoi fare considerando che ci sono O (| V |^2) possibili combinazioni di vertici per cui dovresti elencare i percorsi più brevi. Sebbene, se la maggior parte dei vertici ha grado 2 o meno, allora può essere pratico elencare semplicemente i percorsi più lunghi (o quelli sufficientemente lunghi) ed estrarre da essi i percorsi più brevi. – Nuclearman