Ось доказ того, що більш детально слідує набір рішення MIT, пов'язаний з оригінальним запитанням. Для наочності я буду використовувати ті самі позначення, які вони використовують, щоб порівняння було простіше зробити.
Припустимо, у нас є дві вершини і такі, що відстань між і на шляху є діаметром, наприклад, відстань - максимально можлива відстань між будь-якими двома точками на дереві. Припустимо, у нас також є вузол (якщо , тоді було б очевидно, що схема працює, оскільки перша BFS отримає , а друга повернеться до a). Припустимо також, що у нас є вузол такий, що .b a b p ( a , b ) d ( a , b ) s ≠ a , b s = a b u d ( s , u ) = max x d ( s , x )абабp ( a , b )г( а , б )s ≠ a , bs = aбуг( s , u ) = максхг( s , x )
Лема 0: і і - вузли листя.bаб
Доведення: Якби вони не були листковими вузлами, ми могли б збільшити , поширивши кінцеві точки до вузлів листків, суперечивши діаметром.d ( a , b )г( а , б )г( а , б )
Лемма 1: .max[d(s,a),d(s,b)]=d(s,u)
Доведення: Припустимо, для суперечності, що і і були суворо меншими ніж . Ми розглядаємо два випадки:d(s,a)d(s,b)d(s,u)
Випадок 1: шлях зовсім НЕ містить вершину . У цьому випадку не може бути діаметром. Щоб зрозуміти чому, нехай є унікальною вершиною на з найменшою відстані до . Тоді ми бачимо, що , оскільки . Аналогічно, ми мали б також . Це суперечить що є діаметром.p(a,b)sd(a,b)tp(a,b)sd(a,u)=d(a,t)+d(t,s)+d(s,u)>d(a,b)=d(a,t)+d(t,b)d(s,u)>d(s,b)=d(s,t)+d(t,b)>d(t,b)d(b,u)>d(a,b)d(a,b)
Випадок 2: шлях містить вершину . У цьому випадку знову не може бути діаметром, оскільки для деякої вершини така, що , і і було б більше .p(a,b)sd(a,b) ud(s,u)=maxxd(s,x)d(a,u)d(b,u)d(a,b)
Лема 1 дає причину, чому ми починаємо другий пошук Хреста-Першого за останньою виявленою вершиною першого BFS. Якщо - унікальна вершина з найбільшою можливою відстані від , то за лемою 1 вона повинна бути однією з кінцевих точок деякого шляху з відстанню, що дорівнює діаметру, а отже, другою BFS з як корінь однозначно знаходить діаметр. З іншого боку, якщо існує хоча б одна вершина така, що , то ми знаємо, що діаметр , і не має значення, чи запустимо ми другий BFS з або .u s u v d ( s , v ) = d ( s , u ) d ( a , b ) = 2 d ( s , u ) u vuusuvd(s,v)=d(s,u)d(a,b)=2d(s,u)uv