Временная сложность алгоритма Флери

не могли бы вы помочь мне выяснить, временная сложность алгоритма Флери (который используется для получения Эйлерова цепь)?

3 ответов


здесь: http://roticv.rantx.com/book/Eulerianpathandcircuit.pdf вы можете прочитать, среди прочего, что это O(E), линейный счетчик ребер.


алгоритм Флери на самом деле не завершен, пока вы не укажете, как идентифицируются края моста. Тарьян дал алгоритм линейного времени для идентификации всех мостов (см.http://en.wikipedia.org/wiki/Bridge_ (graph_theory)), поэтому наивная реализация, что алгоритм Рерана Тарьяна после каждого удаленного ребра будет O(E^2). Вероятно, есть лучшие способы пересчитать набор мостов, но есть также лучший алгоритм O(E). (Видеть http://www.algorithmist.com/index.php/Euler_tour#Fleury.27s_algorithm ; не мой сайт :))


алгоритм Флери включает в себя следующие шаги:

  1. убедитесь, что граф имеет 0 или 2 нечетные вершины.

  2. Если есть 0 нечетных вершин, начните в любом месте. Если есть 2 нечетные вершины, начните с одной из них.

  3. следуйте ребра по одному за раз. Если у вас есть выбор между мостом и без моста, всегда выбирают не мост.

  4. стоп, когда вы бежите из стыки.

Если мосты обнаружены алгоритмом Тарьяна, и эти мосты хранятся в матрице смежности, то нам не нужно запускать алгоритм тарьяна каждый раз, чтобы проверить, является ли ребро мостом или нет. Мы можем проверить его во времени O (1) для всех других запросов моста. Таким образом, временная сложность алгоритма Флури может быть уменьшена до O(V+E) {поскольку это DFS}, но этому методу нужно o(V2) дополнительное пространство для хранения мостов.