4501
правка
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) м (→Алгоритм I) |
||
Строка 15: | Строка 15: | ||
== Алгоритм I == | == Алгоритм I == | ||
Этот алгоритм выбирает | Этот алгоритм выбирает ребра для остова по принципу жадности; он напоминает алгоритм Крускала для вычисления минимального остовного дерева. Ребра графа обрабатываются в порядке возрастания их весов. Начиная с остова <math>E_{S} = \varnothing</math>, алгоритм последовательно добавляет ребра. Решение о том, добавлять ли некоторое ребро (скажем, <math>(u, v) \, </math>) к <math>E_{S} \, </math> или нет, принимается на основе следующего соображения: | ||
''Если расстояние между u и v в подграфе, индуцированном текущими | ''Если расстояние между u и v в подграфе, индуцированном текущими ребрами остова <math>E_{S} \, </math>, больше, чем t-weight(M, v), то ребро (u, v) следует добавить к to <math>E_{S} \, </math>, в противном случае отбросить.'' | ||
Из этого следует, что <math>P_{t}(x, y) \, </math> будет выполняться для | Из этого следует, что <math>P_{t}(x, y) \, </math> будет выполняться для каждого ребра E, не входящего в <math>E_{S} \, </math>, так что в конце концов подграф <math>(v, E_{S}) \, </math> будет представлять собой t-остов. Хорошо известное утверждение элементарной теории графов гласит, что граф с более чем <math>n^{1+\frac{1}{k}}</math> ребрами должен содержать цикл длиной не более 2k. Из приведенного выше алгоритма следует, что длина любого цикла в подграфе <math>(V, E_{S}) \, </math> должна составлять не менее t + 1. Следовательно, для t = 2k – 1 количество ребер в подграфе <math>(V, E_{S}) \, </math> будет менее <math>n^{1+\frac{1}{k}}</math>. Таким образом, Алгоритм I вычисляет (2k–1)-остов размера <math>O(n^{1+\frac{1}{k}})</math>, что является оптимальным, с учетом вышеупомянутой нижней границы. | ||
правка