Изменения

Перейти к: навигация, поиск

Алгоритмы на деревьях

524 байта добавлено, 07:48, 12 января 2015
Нет описания правки
=== Алгоритм ===
==== Наивный алгоритм ====
Найдём центр графа исходя из его определения.
* Построим матрицу <tex>A_{n \times n}</tex> (<tex>n</tex> — мощность множества <tex>V</tex>), где <tex>a_{ij} = d_{ij}</tex>, то есть матрицу кратчайших путей. Для её построения можно воспользоваться [[Алгоритм_Флойда|алгоритмом Флойда-Уоршелла]] или [[Алгоритм_Дейкстры|Дейкстры]].
* Подсчитаем максимум в каждой строчке матрицы <tex>A</tex>. Таким образом, получим массив длины <tex>n</tex>.
* Найдём наименьший элемент в этом массиве. Эта вершина и есть центр графа. В том случае, когда вершин несколько, все они являются центрами.
Асимптотика зависит от используемого способа подсчета кратчайших путей. При Флойде это будет <tex>O(V^3)</tex>, а при Дейкстре — максимум из асимптотики конкретной реализации Дейкстры и <tex>O(V^2)</tex>, за которую мы находим максимумы в матрице.
 
==== Алгоритм для дерева за O(n) ====
Найдём центр дерева, действуя как в доказанной выше теореме.
 
Будем удалять висячие вершины (или "обрезать листья"), пока в дереве не останется одна или две вершины — они и будут центрами.
== См. также ==
19
правок

Навигация