Próbuję znaleźć najkrótszą ścieżkę między dwoma węzłami w zestawie danych. I zaimplementowałem algorytm dijkstra i używam go do udowodnienia, że z dwoma węzłami (jak: Andrew_Card i Dick_Cheney) nie istnieje istnieje ścieżka między źródłem a miejscem docelowym. Jednak znajduję , że mój program jest zabijany przez system operacyjny.Pytanie dotyczące algorytmu dijkstra
Po debugowaniu okazało się, że problem może być związany z alokacją zasobów w pamięci RAM . Jeśli chodzi o algorytm Dijkstra, jeżeli liczba węzłów, n = 16375503, a następnie wymóg przestrzeń jest
n*n = 16,375,503 * 16,375,503 > 10^{14}.
Aby uruchomić ten algorytm w pamięci musimy przynajmniej
(10^{14} * 4)/(1024 * 1024 * 1024) = 10^5 GB (approximately equal)
of RAM.
Tak, to nie jest można znaleźć najkrótszą ścieżkę, używając dijkstry , jeśli chcemy zachować duży podłączony wykres w pamięci. Proszę mnie poprawić, jeśli się mylę, ponieważ utknąłem na tym od dłuższego czasu? Albo jeśli mógłbym znaleźć jakiś inny możliwy powód, który powinienem sprawdzić, to proszę mnie o to również poinformować.
I realizowany program w C++
Ilość krawędzi = 25.908.132
Ile krawędzi ma wykres? – kraskevich
Liczba krawędzi = 25,908,132 –
tak, to bardzo duża liczba ... Ale jaki błąd otrzymujesz. BTW musisz użyć debuggera w tym przypadku, aby dowiedzieć się, co dokładnie się dzieje ... – ravi