BFS / DFS를 사용하여 나무의 지름을 찾는 알고리즘. 왜 작동합니까?


28

링크는 BFS / DFS를 사용하여 방향이없는 트리의 직경을 찾기위한 알고리즘을 제공합니다 . 요약 :

그래프에서 임의의 노드에서 BFS를 실행하고 마지막으로 발견 한 노드 u를 기억하십시오. 마지막으로 발견 된 노드 v를 기억하면서 u에서 BFS를 실행하십시오. d (u, v)는 나무의 지름입니다.

왜 작동합니까?

이 중 2 페이지 는 추론을 제공하지만 혼란 스럽습니다. 증거의 초기 부분을 인용하고 있습니다.

그래프에서 임의의 노드에서 BFS를 실행하고 마지막으로 발견 한 노드 u를 기억하십시오. 마지막으로 발견 된 노드 v를 기억하면서 u에서 BFS를 실행하십시오. d (u, v)는 나무의 지름입니다.

정확성 : d (a, b)가 나무의 지름이되도록 a와 b를 두 개의 노드로 둡니다. a에서 b까지의 고유 한 경로가 있습니다. BFS가 발견 한 경로의 첫 번째 노드가되게하십시오. s에서 u 로의 경로 와 a에서 b 로의 경로가 모서리를 공유하지 않으면 t에서 u까지의 경로에 s가 포함됩니다. 그래서p1p2

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

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

.... (더 많은 불평등은 다음과 같습니다 ..)

불평등은 나에게 이해가되지 않습니다.


연결된 질문에서 따옴표를 찾지 못했습니다.
Raphael

1
솔루션에서 "가장자리 공유 안 함"을 "정점 공유 안 함"으로 바꾸십시오.
Yuval Filmus

DFS가 아닌 BFS 만 사용하고 있습니다.
Thumbnail

답변:


11

주장을 입증하는 모든 부분은 방향이없는 가장자리가있는 나무의 두 가지 중요한 속성에 달려 있습니다.

  • 1- 연결성 (예 : 트리의 두 노드 사이에 정확히 하나의 경로가 있음)
  • 모든 노드는 트리의 루트 역할을 할 수 있습니다.

임의의 트리 노드 선택 . 가 노드라고 가정합니다 . 알고리즘이 먼저 에서 시작 하는 노드 찾고 다음 에 에서 시작하는 일부 노드 찾는다고 가정하십시오 . 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 , y ) 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. d(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 단계로 인해xpath(s,u),xpath(s,v)ypath(x,u),ypath(x,v)


(1) 첫 번째 그래픽과 관련하여 s에서 x 로의 경로에는 항상 정점 u와 v가 BFS에 의해 생성 된 트리에 있기 때문에 어떤 순서로 정점을 포함해서는 안됩니까? (2) 불평등이 어떻게 얻어지는 지 명확히 할 수 있습니까? (3) s에서 시작하고 x에서 시작하는 BFS가 경로의 어딘가에 u, v를 포함하기 때문에 그래픽은 imgur.com/jQ94erY 링크에 나와 있어야합니다 . 귀하가 제공 한 추론이 여기에 어떻게 적용됩니까?
curryage

@curryage 노트는 나무가 BF에 의해 주어지고 건설되지 않는다는 것에 유의하십시오! 구체적인 답변 : 광고 1) 아니요. 가장자리에 임의로 많은 노드 를 추가하고 가장자리에 정확히 하나의 노드 를 추가하여 그래픽 (1)에서 트리의 개선을 상상해보십시오 . 첫 번째 단계 bfs는 x에서 끝납니다. ad 2) 어떤 불평등이 불분명합니까? 우리는 항상 가 그래프의 직경 의 길이 라고 가정합니다 . 이것은 G가 1로 연결되어 있기 때문에 잘 정의되어 있습니다. ad 3) no : 3.1 와 떨어져있는 2 개의 노드 사이에 1 개 이상의 경로가 있으므로 그래프는 트리가 아닙니다. ...(s,zxy)(zxy,x)(u,v)diag(G)(s,y)
collapsar

@curryage ... 3.2 ; 가정에 의해 이므로 불가능 하며 그래프의 지름은 두 노드 사이의 최대 최소 거리입니다. 트리의 경우 두 노드 사이에 정확히 하나의 경로가 있으므로 정의는 '두 노드 사이의 최대 거리'로 줄어 듭니다. d(x,y)>d(u,v)d(u,v)=diam(G)
collapsar

9

직관은 이해하기 매우 쉽습니다. 주어진 트리의 두 노드 사이에 존재하는 가장 긴 경로를 찾아야한다고 가정하십시오.

일부 다이어그램을 그린 후에는 가장 긴 경로가 항상 두 개의 리프 노드 (한 가장자리 만 연결된 노드) 사이에서 발생한다는 것을 알 수 있습니다. 이것은 가장 긴 경로가 두 노드 사이에 있고 두 노드 중 하나 또는 둘 다가 리프 노드가 아닌 경우 경로를 확장하여 더 긴 경로를 얻을 수 있음을 증명할 수도 있습니다.

따라서 한 가지 방법은 먼저 어떤 노드가 리프 노드인지 확인한 다음 리프 노드 중 하나에서 BFS를 시작하여 노드를 가장 멀리 가져옵니다.

먼저 어떤 노드가 리프 노드인지를 찾는 대신 임의 노드에서 BFS를 시작한 다음 어느 노드가 가장 노드인지 확인합니다. 가장 먼 노드를 x로 설정하십시오. x가 리프 노드라는 것이 분명합니다. 이제 x에서 BFS를 시작하고 가장 먼 노드를 확인하면 답을 얻습니다.

그러나 x가 최대 경로의 끝 점이된다는 보장은 무엇입니까?

예를 보자 :-

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

6에서 BFS를 시작했다고 가정합니다. 6에서 최대 거리에있는 노드는 노드 7입니다. BFS를 사용하여이 노드를 얻을 수 있습니다. 이제 노드 7에서 BFS를 별표로하여 최대 거리에서 노드 9를 얻습니다. 노드 7에서 노드 9까지의 경로는 분명히 가장 긴 경로입니다.

노드 6에서 시작한 BFS가 최대 거리에서 노드로 2를 제공 한 경우 어떻게됩니까? 그런 다음 2에서 BFS를 할 때 최대 거리에서 노드로 7을 얻고 가장 긴 경로는 길이가 4 인 2-> 1-> 4-> 5-> 7이됩니다. 그러나 실제 가장 긴 경로 길이는 5입니다. 노드 6의 BFS는 노드 2를 최대 거리에서 노드로 제공하지 않기 때문에 발생합니다.

희망이 도움이됩니다.


1
그 간단하고 명확한 설명입니다! 고마워요 :)
anekix

4

다음은 원래 질문에 더 연결된 MIT 솔루션 세트를 따르는 증거입니다. 명확하게하기 위해, 나는 그들이 사용하는 것과 동일한 표기법을 사용하여 비교를보다 쉽게 ​​할 수 있습니다.

우리는 두 정점 있다고 가정 및 간 거리되도록 와 경로에 예를 들어 거리, 직경이고 트리 내의 임의의 두 지점 사이의 최대 가능한 거리이다. 또한 노드 ( 이면 첫 번째 BFS가 얻고 두 번째가 a로 돌아 가기 때문에 체계가 작동하는 것이 분명합니다 )를 가정하십시오. 와 같은 노드 가 있다고 가정 합니다.ababp(a,b)d(a,b)sa,bs=abud(s,u)=maxxd(s,x)

Lemma 0 : 와 는 모두 리프 노드입니다.ab

증명 :가 리프 노드가 아니라면, 우리가 증가 할 수 리프 노드 끝점을 연장함으로써 모순 의 직경을 주도한다.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)

Lemma 1은 우리 가 첫 번째 BFS 의 마지막으로 발견 된 정점 에서 두 번째 너비 우선 검색을 시작하는 이유를 제공합니다 . 가 에서 가능한 최대 거리를 갖는 고유 한 정점 인 경우 Lemma 1에 의해 직경과 동일한 거리를 가진 경로의 끝점 중 하나 여야 하며, 따라서 루트가 명확하게 가있는 를 가진 두 번째 BFS가 직경. 반면에 와 같은 다른 정점 하나 이상 있으면 직경이 임을 알 수 있습니다. 또는 에서 두 번째 BFS를 시작하는지 여부는 중요하지 않습니다 .uusuvd(s,v)=d(s,u)d(a,b)=2d(s,u)uv


대단해 이 답변을 게시 해 주셔서 감사합니다. 이 답변에 공언이 접수되지 않은 것에 놀랐습니다.
Zephyr

0

먼저 임의의 노드에서 DFS를 실행 한 다음 트리의 직경은 DFS 하위 트리에서 노드의 가장 깊은 잎 사이의 경로입니다. 여기에 이미지 설명을 입력하십시오


4
왜 이것이 작동합니까?
Yuval Filmus

0

BFS의 정의에 따라, 탐색 된 각 노드의 거리 (시작 노드로부터의 거리)는 탐색 된 이전 노드의 거리와 같거나 1 이상입니다. 따라서 BFS가 탐색 한 마지막 노드는 시작에서 가장 먼 노드 중 하나입니다. 마디.

따라서,에 BFS에게 배 양을 사용하는 알고리즘은 "임의의 노드 선택 . 찾기 노드 먼로부터 (마지막 노드부터 BFS 발견 ). 노드 찾기 로부터 먼 BFS부터 출발하여 실측치 (마지막 노드 ). "따라서 서로에서 최대 거리의 두 노드를 발견한다.xaxxbaa


1
직감에 대한 답변에 감사드립니다. 그러나 마지막 문장의 "그래"는 분명하지 않습니다. 왜 그런가요? 에서 가장 먼 노드가 서로 최대 거리에있는 두 노드 중 하나 여야 하는 이유는 무엇 입니까? 증거가 필요한 것 같습니다. x
DW

그런 증거를 만드는 방법을 잘 모르겠습니다. 대화가 직관적 인 것처럼 느낍니다. 두 노드가 서로 최대 거리에 있으면 주어진 노드에 대해 두 노드 중 하나가 가능한 최대 거리에 있습니다.
Extrarius

"직관적으로 진실한"주장은 일반적으로 일반적인 그래프에는 해당되지 않습니다. cs.stackexchange.com/a/213/755 의 그래프를 보고 노드 에서 BFS를 시작한다고 상상해보십시오 (즉, ). 그것은 선택할 것 하고 노드 찾기 에서 가장 큰 거리 ,하지만 서로 최대 거리의 두 노드를 찾을 수 없습니다. 따라서 주장 된 진술은 사실이라면 일반적인 그래프를 유지하지 않는 나무의 특별한 특성에 의존해야합니다. vx=va=uba
DW

그렇습니다. 그러나이 질문은 방향을 지정하지 않은 트리를 지정합니다.이 상황은 제가 직관하는 맥락입니다.주기가 길고 방향이 잘못되면 많은 그래프 문제를 추론하기가 훨씬 간단 해집니다.
Extrarius

0

알아야 할 한 가지 중요한 점은 나무가 항상 평면이라는 것입니다. 즉, 평평한 나무 위에 놓을 수 있으므로 평범한 2 차원 사고가 가능합니다. 이 경우 알고리즘은 어디서나 시작한다고 할 수 있습니다. 그 지점에서 그 지점으로부터 멀어 질 수있는 거리는 나무에서 가장 긴 거리이므로 지름입니다.

이 방법은 섬을 완전히 둘러싸는 가장 작은 원의 직경으로 정의한 경우 실제 물리적 섬의 직경을 찾는데도 효과적입니다.


0

@op, 사례가 PDF에서 정의되는 방식이 약간 다를 수 있습니다.

두 경우는 다음과 같아야한다고 생각합니다.

  1. p1 은 와 교차하지 않습니다 . 즉, 경로 과 사이에 공통 정점이 없습니다 . 이 경우, 를 에서 시작하여 첫 번째 BFS가 감지 한 의 첫 번째 노드로 정의 하십시오 .p2p1p2tp2s

  2. p1 및 에는 하나 이상의 공통 정점이 있습니다. 이 경우, 또한 에있는 첫 번째 BFS에서 감지 한 의 첫 번째 노드가되도록 를 정의 하십시오 .p2tp2p1

PDF의 나머지 증거는 다음과 같아야합니다.

이 정의에서 OP로 표시된 수치는 사례 2에 해당합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.