Вот доказательство, которое следует за множеством решений MIT, более тесно связанным с исходным вопросом. Для ясности я буду использовать те же обозначения, которые они используют, чтобы сравнение было легче сделать.
Предположим, у нас есть две вершины и b, такие, что расстояние между a и b на пути p ( a , b ) является диаметром, например, расстояние d ( a , b ) является максимально возможным расстоянием между любыми двумя точками в дереве. Предположим, у нас также есть узел s ≠ a , b (если s = a , тогда будет очевидно, что схема работает, поскольку первая BFS получит b , а вторая вернется к a). Предположим также, что у нас есть узелaбaбр ( а , б )d( а , б )s ≠ a , bс = аб такое, что d ( s , u ) = max x d ( s , x ) .Ud( s , u ) = максИксd( с , х )
Лемма 0: и и b являются листовыми узлами.aб
Доказательство: если бы они не были листовыми узлами, мы могли бы увеличить , расширив конечные точки до конечных узлов, что противоречит d ( a , b ) диаметру.d( а , б )d( а , б )
Лемма 1: .макс [ д( с , а ) , д( с , б ) ] = д( с , у )
Доказательство. Предположим, что и d ( s , b ) строго меньше, чем d ( s).d( с , а )d( с , б ) . Мы рассмотрим два случая:d( с , у )
Случай 1: путь вовсе не содержит вершину s . В этом случае d ( a , b ) не может быть диаметром. Чтобы понять почему, пусть t будет единственной вершиной на p ( a , b ) с наименьшим расстоянием до s . Тогда мы видим, что d ( a , u ) = d ( a , t ) + d ( t , sр ( а , б )sd( а , б )Tр ( а , б )s , поскольку d ( s , u ) > d ( s , b ) = d ( s , t ) + d ( t ,d( a , u ) = d( а , т ) + д( т , с ) + д( s , u ) >d( а , б ) =d( а , т ) + д( т , б ) . Точно так же мы бы также имели d ( b , u ) > d ( a , b ) . Это противоречит тому, что d ( a , b ) - диаметр.d( s , u ) > d( с , б ) = д( с , т ) + д( т , б ) > д( т , б )d( б , у ) > д( а , б )d( а , б )
Случай 2: путь содержит вершину s . В этом случае d ( a , b ) снова не может быть диаметром, так как для некоторой вершины u такой, что d ( s , u ) = max x d ( s , x ) , оба d ( a , u ) и d ( b) , у ) будет больше, чем гр ( а , б )sd( а , б ) Ud( s , u ) = максИксd( с , х )d( а , ты )d( б , ты ) .d( а , б )
Лемма 1 дает причину, по которой мы начинаем второй поиск в ширину в последней обнаруженной вершине первой BFS. Если u - единственная вершина с максимально возможным расстоянием от s , то по лемме 1 она должна быть одной из конечных точек некоторого пути с расстоянием, равным диаметру, и, следовательно, второй BFS с u в качестве корня однозначно находит диаметр. С другой стороны, если существует хотя бы одна другая вершина v такая, что d ( s , v ) = d ( s , u ) , то мы знаем, что диаметр равен dUUsUvd( s , v ) = d( с , у ) , и не имеет значения, начинаем ли мы второй BFS с u или v .d( а , б ) = 2 д( с , у )Uv