Доказательство правильности: алгоритм для диаметра дерева в теории графов

чтобы найти диаметр дерева, я могу взять любой узел из дерева, выполнить BFS, чтобы найти узел, который находится дальше всего от него, а затем выполнить BFS на этом узле. Наибольшее расстояние от второго BFS даст диаметр.

Я не уверен, как это доказать, правда? Я пробовал использовать индукцию по количеству узлов, но слишком много случаев.

любые идеи были бы очень признательны...

3 ответов


назовем конечную точку, найденную первым BFS x. Решающим шагом является доказательство того, что x, найденный на этом первом шаге, всегда "работает", то есть всегда находится на одном конце некоторого самого длинного пути. (Обратите внимание, что в целом может быть более одного одинаково длинного пути.) Если мы сможем установить это, то легко увидеть, что BFS, укорененный в x, найдет какой-то узел как можно дальше от x, который поэтому должен быть общим самым длинным путем.

подсказка: предположим, (наоборот), что существует более длинный путь между двумя вершинами u и v, ни одна из которых не является x.

заметьте, что на уникальном пути между u и v должна быть некоторая самая высокая (ближайшая к корню) вершина h. Существует две возможности: либо h находится на пути от корня BFS к x, либо нет. Покажите противоречие, показав, что в обоих случаях путь u-v может быть сделан, по крайней мере, так долго, заменив некоторый сегмент пути в нем путем x.

[EDIT] на самом деле, возможно, нет необходимости рассматривать 2 случая отдельно после всех. Но мне часто легче разбить конфигурацию на несколько (или даже много) случаев и рассматривать каждый отдельно. Здесь случай, когда h находится на пути от корня BFS к x, легче обрабатывать и дает ключ к другому случаю.

[EDIT 2] возвращаясь к этому позже, теперь мне кажется, что два случая, которые необходимо рассмотреть, (i) путь u-v пересекает путь от корня до x (at некоторые вершина y, не обязательно в самой высокой точке пути u-v h); и (ii) это не так. Нам все еще нужно h, чтобы доказать каждый случай.


я собираюсь отработать j_random_hacker это!--22-->. Пусть s, t быть максимально удаленной парой. Пусть u - произвольная вершина. У нас есть схема, как

    u
    |
    |
    |
    x
   / \
  /   \
 /     \
s       t ,

здесь x соединение s, t, u.

предположим, что v является вершиной, максимально удаленной от u. Если схема теперь выглядит как

    u
    |
    |
    |
    x   v
   / \ /
  /   *
 /     \
s       t ,

затем

d(s, t) = d(s, x) + d(x, t) <= d(s, x) + d(x, v) = d(s, v),

где неравенство выполняется, потому что d(u, t) = d(u, x) + d(x, t) и d(u, v) = d(u, x) + d(x, v). Существует симметричный случай, когда v крепится между s и x вместо между x и t.

другой случай выглядит как

    u
    |
    *---v
    |
    x
   / \
  /   \
 /     \
s       t .

теперь

d(u, s) <= d(u, v) <= d(u, x) + d(x, v)
d(u, t) <= d(u, v) <= d(u, x) + d(x, v)

d(s, t)  = d(s, x) + d(x, t)
         = d(u, s) + d(u, t) - 2 d(u, x)
        <= 2 d(x, v)

2 d(s, t) <= d(s, t) + 2 d(x, v)
           = d(s, x) + d(x, v) + d(v, x) + d(x, t)
           = d(v, s) + d(v, t),

так max(d(v, s), d(v, t)) >= d(s, t) аргументом усреднения и v принадлежит к максимально удаленной паре.


вот альтернативный способ взглянуть на это:

предположим G = ( V, E) - непустое конечное дерево с множеством вершин V и edge set E.

рассмотрим следующий алгоритм:

  1. пусть графа = 0. Пусть все ребра в E изначально неокрашенный. Пусть C изначально быть равна V.
  2. рассмотрим подмножество V ' of V содержащий все вершины ровно по одному неокрашенное ребро:
    • если V ' пусто тогда пусть d = графа * 2, и остановится.
    • если V' содержит ровно два элемента, затем цвет их взаимный (неокрашенный) край зеленый, пусть d = графа * 2 + 1, и остановка.
    • иначе V ' содержит не менее трех вершин; действуйте следующим образом:
  3. инкремент графа один.
  4. удалить все вершины, от C что нет неокрашенные.
  5. для каждой вершины в V С двумя или более неокрашенными ребра, перекрасить каждый из его зеленых ребер в красный цвет (некоторые вершины могут иметь нуль таких ребер).
  6. для каждой вершины в V', цвет его неокрашенный край зеленый.
  7. вернитесь к Шагу (2).

Это в основном окрашивает график от листьев внутрь, отмечая пути с максимальным расстоянием до листа зеленым цветом и отмечая те, которые имеют только более короткие расстояния красным цветом. Между тем, узлы C, в центр, с меньшее максимальное расстояние до листа сокращается до C содержит только один или два узла с наибольшим максимальным расстоянием до листа.

по конструкции все простые пути от вершин листа до их ближайшей центральной вершины, которые пересекают только зеленые края, имеют одинаковую длину (графа), и все другие простые пути от вершины листа до его ближайшей центральной вершины (пересекая по крайней мере один красный край) короче. Кроме того, он может быть доказано, что

  • этот алгоритм всегда завершается при заданных условиях, оставляя все края G окрашен либо в красный, либо в зеленый цвет и уходит C С одним или двумя элементами.
  • при завершении алгоритма,d диаметр G, измеряется по краям.
  • даны вершины v на V, в максимальная длина простых путей в G начиная с v - это именно те, которые содержат все вершины центра, заканчиваются на листе и пересекают только зеленые края между центром и дальней конечной точкой. Эти идут от v, через центр, к одному из самых дальних от центра листьев.

Теперь рассмотрим алгоритм, который может быть более практичным, в свете вышесказанного. Начиная с любой вершины v, есть только один простой путь p из этой вершины, заканчивающейся в центральной вершине и содержащей все вершины центра (потому что G - это дерево, и если есть две вершины в C тогда они разделяют край). Можно показать, что максимальные простые пути в G С v как одна конечная точка все имеют форму объединения p С простым путем от центра к листу, пересекая только зеленые края.

ключевым моментом для наших целей является то, что входящие краю другой конечной точки обязательно зеленый. Поэтому, когда мы выполняем поиск самых длинных путей, начинающихся там, у нас есть доступ к тем, которые пересекают только зеленые края от листа через (все вершины) центра к другому листу. Это именно простые пути максимальной длины в G, поэтому мы можем быть уверены, что второй поиск действительно покажет диаметр графика.