Алгоритм знаходження діаметра дерева за допомогою BFS / DFS. Чому це працює?


28

Це посилання надає алгоритм пошуку діаметра непрямого дерева за допомогою BFS / DFS . Підведення підсумків:

Запустіть BFS на будь-якому вузлі s у графі, запам'ятавши останній вузол u. Запустіть BFS з запам'ятовування вузла v, виявленого останнім. d (u, v) - діаметр дерева.

Чому це працює?

Сторінка 2 цього дає міркування, але це заплутано. Я цитую початкову частину доказу:

Запустіть BFS на будь-якому вузлі s у графі, запам'ятавши останній вузол u. Запустіть BFS з запам'ятовування вузла v, виявленого останнім. d (u, v) - діаметр дерева.

Правильність: Нехай a і b є будь-якими двома вузлами, такими, що d (a, b) - діаметр дерева. Існує унікальний шлях від a до b. Нехай t - перший вузол на цьому шляху, виявлений BFS. Якщо шляхи від s до u та від a до b не ділять ребра, то шлях від t до u включає s. Такp1p2

d(t,u)d(s,u)

d(t,u)d(s,a)

.... (більше нерівностей випливає ..)

Нерівності для мене не мають сенсу.


Я не знаходжу цитату в пов'язаному питанні.
Рафаель

1
Спробуйте замінити "не ділити краї" на "не ділити вершини" у рішенні.
Yuval Filmus

Ви використовуєте лише BFS, а не DFS.
Ескіз

Відповіді:


11

Усі частини доведення претензії залежать від двох вирішальних властивостей дерев з непрямими краями:

  • 1-зв'язаність (тобто між будь-якими 2 вузлами в дереві є рівно один шлях)
  • будь-який вузол може служити коренем дерева.

Виберіть довільний вузол дерева . Припустимо, це вузли з . Припустимо далі, що алгоритм знаходить вузол починаючи з спочатку, деякий вузол починаючи з наступний. wlog . зауважимо, що має дотримуватися, якщо тільки перший етап алгоритму не закінчиться на . Ми побачимо, що .u , v V ( G ) d ( u , v ) = d i a m ( G ) x s y x d ( s , u ) d ( s , v ) d ( s , x ) d ( s , у ) x d ( x , y ) =su,vV(G)d(u,v)=diam(G)xsyxd(s,u)d(s,v)d(s,x)d(s,y)xd(x,y)=d(u,v)

Найбільш загальну конфігурацію всіх включених вузлів можна побачити в наступній псевдо-графіці (можливо, або або обидва): s = z x ys=zuvs=zxy

(u)                                            (x)
  \                                            /
   \                                          /
    \                                        /
     ( z_uv )---------( s )----------( z_xy )
    /                                        \
   /                                          \
  /                                            \
(v)                                            (y)

ми знаємо, що:

  1. d ( u , v ) < d i a m ( G )d(zuv,y)d(zuv,v) . інакше суперечить припущенню.d(u,v)<diam(G)
  2. d ( u , v ) < d i a m ( G )d(zuv,x)d(zuv,u) . інакше суперечить припущенню.d(u,v)<diam(G)
  3. xd(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u) , інакше етап 1 алгоритму не буде зупинилися на .x
  4. yd(zxy,y)d(v,zuv)+d(zuv,zxy) , інакше етап 2 алгоритму не зупинився б на .y

1) і 2) означає .d(u,v)=d(zuv,v)+d(zuv,u)d(zuv,x)+d(zuv,y)=d(x,y)+2d(zuv,zxy)d(x,y)

3) і 4) означає еквівалент до .d(zxy,y)+d(s,zxy)+d(zxy,x)d(s,zuv)+d(zuv,u)+d(v,zuv)+d(zuv,zxy)d(x,y)=d(zxy,y)+d(zxy,x)2d(s,zuv)+d(v,zuv)+d(u,zuv)d(u,v)

тому .d(u,v)=d(x,y)

аналогічні докази справедливі для альтернативних конфігурацій

                 (u)                          (x)
                   \                          /
                    \                        /
                     \                      /
     ( s )---------( z_uv )----------( z_xy )
                     /                      \
                    /                        \
                   /                          \
                 (v)                          (y)

і

                          (x)        (u)  
                          /            \  
                         /              \ 
                        /                \
     ( s )---------( z_xy )----------( z_uv )
                        \                /          
                         \              /           
                          \            /            
                          (y)        (v)            

це всі можливі конфігурації. зокрема, завдяки результату етапу 1 алгоритму та через етап 2.y p a t h ( x , u ) , y p a t h ( x , v )xpath(s,u),xpath(s,v)ypath(x,u),ypath(x,v)


(1) Що стосується першої графіки, чи не повинен шлях від s до x завжди містити вершини u і v у певному порядку, оскільки вони присутні на дереві, створеному BFS? (2) Чи можете ви пояснити, як отримуються нерівності? (3) Оскільки BFS, починаючи з s та починаючи з x, містять u, v десь на шляху, я вважаю, що графіка повинна бути такою, як показано у посиланні imgur.com/jQ94erY . Як тут застосовуються ваші міркування?
curryage

@curryage зауважте, що дерево задано і не будується bfs! конкретні відповіді: оголошення 1) ні. уявіть уточнення дерева у графіці (1), додавши довільно багато вузлів на краю і рівно 1 вузол на краю . перший етап bfs закінчиться на x. оголошення 2) яка нерівність / і є незрозумілою? ми завжди припускаємо, що - шлях, довжина діаметра діаграму графіка . це добре визначено, оскільки G є 1-з'єднаним. ad 3) no: 3.1 між будь-якими 2 вузлами, крім , існує більше 1 шляху , тож графік не є деревом. ...( z x y , x ) ( u , v ) d i a g ( G ) ( s , y )(s,zxy)(zxy,x)(u,v)diag(G)(s,y)
колапс

@ перебіг ... 3,2 ; це неможливо, оскільки за припущенням, а діаметр графіка - максимальне мінімальне відстань між будь-якими двома вузлами. у випадку з деревом існує рівно 1 шлях між будь-якими 2 вузлами, тому визначення зменшується до "максимальної відстані між будь-якими двома вузлами". d ( u , v)d(x,y)>d(u,v)d(u,v)=diam(G)
колапс

9

Інтуїцію позаду дуже легко зрозуміти. Припустимо, я повинен знайти найдовший шлях, який існує між будь-якими двома вузлами в даному дереві.

Накресливши кілька діаграм, ми можемо спостерігати, що найдовший шлях завжди буде проходити між двома вузлами листка (вузли, що мають між собою лише один край). Це також може бути доведено суперечливістю, що якщо найдовший шлях знаходиться між двома вузлами і один або обидва з них не є листовим вузлом, то ми можемо продовжити шлях, щоб отримати довший шлях.

Отже, один із способів - спочатку перевірити, які саме вузли є вузлами листків, а потім запустити BFS з одного з вузлів листа, щоб отримати вузол, що знаходиться найдалі від нього.

Замість того, щоб спочатку знаходити, які вузли є вузлами листків, ми починаємо BFS із випадкового вузла, а потім бачимо, який вузол найдаліший від нього. Нехай найдальший вузол буде x. Зрозуміло, що x - листовий вузол. Тепер, якщо ми запустимо BFS з x і перевіримо найдаліший вузол від нього, отримаємо нашу відповідь.

Але яка гарантія того, що х буде кінцевою точкою максимального шляху?

Давайте подивимось на прикладі: -

       1   
    / /\ \
   6 2  4 8
         \ \
          5 9
           \
            7

Припустимо, я почав свій BFS з 6. Вузол на максимальній відстані від 6 - це вузол 7. За допомогою BFS ми можемо отримати цей вузол. Тепер ми розмістимо зірка BFS з вузла 7, щоб отримати вузол 9 на максимальній відстані. Шлях від вузла 7 до вузла 9 очевидно є найдовшим шляхом.

Що робити, якщо BFS, який починався з вузла 6, дав 2 як вузол на максимальній відстані. Тоді, коли ми отримаємо BFS з 2, ми отримаємо 7 як вузол на максимальній відстані, а найдовший шлях буде тоді 2-> 1-> 4-> 5-> 7 з довжиною 4. Але фактична найдовша довжина шляху - 5. Це не може трапляється тому, що BFS з вузла 6 ніколи не дасть вузол 2 як вузол на максимальній відстані.

Сподіваюся, що це допомагає.


1
ось просте і чітке пояснення! дякую :)
anekix

4

Ось доказ того, що більш детально слідує набір рішення 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 )ababp(a,b)d(a,b)sa,bs=abud(s,u)=maxxd(s,x)

Лема 0: і і - вузли листя.bab

Доведення: Якби вони не були листковими вузлами, ми могли б збільшити , поширивши кінцеві точки до вузлів листків, суперечивши діаметром.d ( a , b )d(a,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


Дивовижно. Дякуємо, що опублікували цю відповідь. Я здивований, що ця відповідь не отримала жодних відгуків.
Зефір

0

Спочатку запустіть DFS з випадкового вузла, потім діаметр дерева - це шлях між найглибшими листками вузла в його піддереві DFS: введіть тут опис зображення


4
Чому це працює?
Ювал Фільм

0

За визначенням BFS, відстань (від стартового вузла) кожного досліджуваного вузла або дорівнює відстані попереднього досліджуваного вузла, або більше на 1. Таким чином, останній вузол, досліджений BFS, буде серед тих, які віддаляються від стартового вузол.

Таким чином, алгоритм використання BFS в два раз кількості , щоб «Pick довільного вузол . Знайти вузол найбільш віддалені від (останнього вузла знайдений BFS , починаючи з ). Знайти вузол далі від (останньому вузлі , знайденому BFS , починаючи з ). ", який, таким чином, знаходить два вузли максимальної відстані від одного.a x x b a axaxxbaa


1
Дякую за відповідь з інтуїцією. Однак "таким чином" у вашому останньому реченні не є очевидним. Чому це випливає? Чому вузол, віддалений від , повинен бути одним з двох вузлів на максимальній відстані один від одного? Схоже, що для цього потрібні певні докази. x
DW

Я не впевнений, як побудувати такий доказ. Я відчуваю, що зворотне є інтуїтивно зрозумілим: якщо два вузли знаходяться на максимальній відстані один від одного, то для будь-якого заданого вузла один з двох знаходиться на максимально можливій відстані від нього.
Екстраріус

Заява "інтуїтивно правдива" взагалі не відповідає дійсності загальних графіків. Дивіться графік в cs.stackexchange.com/a/213/755 і уявіть собі, як запустити BFS з вузла (тобто, нехай ); тоді він вибере і знайде вузол на найбільшій відстані від , але при цьому не знайдеться два вузли максимальної відстані один від одного. Тож заявлене твердження, якщо це правда, повинно покладатися на якусь особливу властивість дерев, яка не відповідає загальним графам. x = v a = u b avx=va=uba
DW

Так, але це питання вказує на непрямі дерева, що є контекстом, який я інтуїтивно розумію. Цикли заборони та спрямовані краї робить багато проблем із графіком значно простішими.
Екстраріус

0

Одне ключове, що потрібно знати, - це те, що дерево завжди планарне, а значить, воно може бути викладене на площині, тому часто працює звичайне двомірне мислення. У цьому випадку алгоритм говорить, починаючи куди завгодно, йдіть якомога далі. Відстань від цієї точки до того, наскільки ви можете піти від цієї точки, є найдовшою відстані в дереві, а отже, і діаметром.

Цей метод також допоможе знайти діаметр справжнього фізичного острова, якби ми визначили його як діаметр найменшого кола, яке б повністю огортало острів.


0

@op, спосіб визначення справ у PDF може бути дещо відхиленим.

Я думаю, що два випадки мають бути:

  1. p1p2p1p2tp2s

  2. p1p2tp2p1

Решта доказів у PDF має випливати.

При такому визначенні цифра, показана ОП, потрапляє до випадку 2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.