Алгоритм Прима: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Строка 31: Строка 31:
 
=== Существующие реализации алгоритма ===
 
=== Существующие реализации алгоритма ===
  
* [http://www.boost.org/libs/graph/doc/ Boost Graph Library] (функция <code>[http://www.boost.org/libs/graph/doc/prim_minimum_spanning_tree.html prim_minimum_spanning_tree]</code>), сложность <math>O(m \ln n)</math>.
+
* C++: [http://www.boost.org/libs/graph/doc/ Boost Graph Library] (функция <code>[http://www.boost.org/libs/graph/doc/prim_minimum_spanning_tree.html prim_minimum_spanning_tree]</code>), сложность <math>O(m \ln n)</math>.
 
* Java: [http://jgrapht.org JGraphT] (класс <code>[http://jgrapht.org/javadoc/org/jgrapht/alg/PrimMinimumSpanningTree.html PrimMinimumSpanningTree]</code>).
 
* Java: [http://jgrapht.org JGraphT] (класс <code>[http://jgrapht.org/javadoc/org/jgrapht/alg/PrimMinimumSpanningTree.html PrimMinimumSpanningTree]</code>).
  

Версия 22:50, 11 июня 2015

1 Свойства и структура алгоритмов

1.1 Общее описание алгоритма

Алгоритм Прима[1][2] предназначен для решения задачи о построении минимального остовного дерева во взвешенном неориентированном графе.

1.2 Математическое описание

1.3 Вычислительное ядро алгоритма

1.4 Макроструктура алгоритма

1.5 Описание схемы реализации последовательного алгоритма

1.6 Последовательная сложность алгоритма

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

  • При использовании списков вершин сложность [math]O(n^2)[/math].
  • При использовании бинарной кучи рёбер сложность [math]O(m \ln m)[/math].
  • При использовании бинарной кучи вершин и сортировке рёбер у каждой вершины сложность [math]O(m \ln n)[/math].
  • При использовании быстрой кучи[3] сложность [math]O(m + n \ln^2 n)[/math].
  • При использовании фибоначчиевой кучи[4] сложность [math]O(m + n \ln n)[/math].

1.7 Информационный граф

1.8 Описание ресурса параллелизма алгоритма

1.9 Описание входных и выходных данных

1.10 Свойства алгоритма

2 Программная реализация алгоритмов

2.1 Особенности реализации последовательного алгоритма

2.2 Описание локальности данных и вычислений

2.3 Возможные способы и особенности реализации параллельного алгоритма

2.4 Масштабируемость алгоритма и его реализации

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

3 Литература

  1. Prim, R C. “Shortest Connection Networks and Some Generalizations.” Bell System Technical Journal 36, no. 6 (November 1957): 1389–1401. doi:10.1002/j.1538-7305.1957.tb01515.x.
  2. Dijkstra, E W. “A Note on Two Problems in Connexion with Graphs.” Numerische Mathematik 1, no. 1 (December 1959): 269–71. doi:10.1007/BF01386390.
  3. Navarro, Gonzalo, and Rodrigo Paredes. “On Sorting, Heaps, and Minimum Spanning Trees.” Algorithmica 57, no. 4 (March 23, 2010): 585–620. doi:10.1007/s00453-010-9400-6.
  4. Fredman, Michael L, and Robert Endre Tarjan. “Fibonacci Heaps and Their Uses in Improved Network Optimization Algorithms.” Journal of the ACM 34, no. 3 (July 1987): 596–615. doi:10.1145/28869.28874.