Ho un'implementazione dell'algoritmo di Dijkstra, basato sul codice this website. Fondamentalmente, ho un numero di nodi (diciamo 10000) e ogni nodo può avere da 1 a 3 connessioni ad altri nodi.Algoritmo di Dijkstra: consumo di memoria
I nodi vengono generati in modo casuale all'interno di uno spazio 3d. Anche le connessioni vengono generate casualmente, tuttavia cerca sempre di trovare le connessioni con i vicini più vicini e aumenta lentamente il raggio di ricerca. Ad ogni connessione viene data una distanza di uno. (Dubito che ciò sia importante ma è solo uno sfondo).
In questo caso, l'algoritmo viene utilizzato per trovare il numero più breve di hop dal punto di partenza a tutti gli altri nodi. E funziona bene per 10.000 nodi. Il problema che ho è che, man mano che il numero di nodi aumenta, diciamo verso 2 milioni, uso tutta la memoria del mio computer quando provo a costruire il grafico.
Qualcuno sa di un modo alternativo di implementare l'algoritmo per ridurre l'impronta di memoria, oppure c'è un altro algoritmo là fuori che utilizza meno memoria?
Da Dijkstra stessa scala linearmente con il numero di nodi immagino è la rappresentazione grafico stesso che costa tanto memoria. Quale struttura dati usi per rappresentare il grafico? – Howard
Ancora più importante, che tipo di architettura stai facendo funzionare? Un PC con un paio di GB di RAM dovrebbe essere in grado di memorizzare A LOT più di 2 milioni di nodi, a meno che ogni nodo ne occupi diverse centinaia - a quel punto si vorrà probabilmente riconsiderare le informazioni del proprio nodo. –
potresti avere perdite di memoria nella costruzione della fase del grafico. puoi pubblicare il tuo codice? – emreakyilmaz