Алгоритм Дейкстры в Java

1

У меня есть некоторые проблемы, реализующие алгоритм Дейкстры в Java.
Я использую этот (первый) псевдокод: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
Строка 15 вам нужно получить вершину с самым низким расстоянием. Но как я могу сохранить расстояние с соответствующим расстоянием.
Примечание: вершина определяется как целое число.

Мои решения, которые не работали должным образом:

  1. Карта с K = вершина, V = расстояние, Проблема: длительный поиск, чтобы получить min dist
  2. SortedMap с K = расстояние, V = вершина, проблема: почти каждое расстояние определяется как Integer.MAX_VALUE

Поэтому я ищу быстрый способ сохранить вершину на расстоянии, и должно быть легко получить вершину с минимальным расстоянием.

  • 0
    Я не думаю, что вы можете найти что-то быстрее, чем Карта для вашего решения
  • 0
    в качестве альтернативы вы можете использовать некоторые уже реализованные графические структуры для Java
Показать ещё 2 комментария
Теги:
algorithm
data-structures
dijkstra

1 ответ

0

Попробуйте использовать PriorityQueue. Таким образом, вы можете просто удалить голову, так как она будет иметь минимальное расстояние от всех вершин.

Дополнительную информацию о PriorityQueue можно найти здесь: http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

  • 1
    Очередь приоритетов - плохой выбор для алгоритма Дейкстры, потому что вам обычно нужно изменять стоимость вершин после каждого ослабления. Это означает, что вам нужно будет найти произвольный узел в очереди с приоритетами (который не является головным), и это не может быть эффективно выполнено в очереди с приоритетами. Это можно решить, не изменяя стоимость каждого узла, а вставляя его несколько раз - но это требует дополнительной работы и увеличивает сигнатуру памяти алгоритма до O(|E|) (в то время как обычно это O(|V|)
  • 0
    @amit У меня была та же идея, пока я не прочитал здесь www3.cs.stonybrook.edu/~rezaul/papers/TR-07-54.pdf, что на самом деле вставка и удаление элементов может быть лучше, чем keyDecrease для большинства графиков.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню