최소 스패닝 트리를 위한 병렬 알고리즘

Parallel algorithms for minimum spanning trees

그래프 이론에서 V { V } { E }인 그래프 G ( E최소 스패닝 트리(MST) { T 모든 정점을 포함하는 그래프 G{\ G 트리 하위 그래프입니다.

MST는 실용적이고 이론적인 다양한 분야에서 유용하고 다용도적인 도구입니다.예를 들어, 한 창고에서 특정 제품을 여러 상점에 공급하려는 회사는 창고에서 시작되는 MST를 사용하여 각 회사 상점으로 가는 최단 경로를 계산할 수 있습니다.이 경우 상점과 창고는 정점으로 표시되고 이들 사이의 도로 연결은 모서리로 표시됩니다.각 모서리에는 해당 도로 연결의 길이가 라벨로 표시됩니다.

G G 엣지 언웨이트인 모든 스패닝트리는 엣지 수가 같기 때문에 무게가 동일합니다.엣지 무게 부여의 경우 스패닝트리 중 가장 낮은 엣지의 무게 합계를 최소 스패닝트리(MST라고 부릅니다그것은 반드시 독특한 것은 아니다.보다 일반적으로, 반드시 접속되어 있지 않은 그래프에는 최소 스패닝 포레스트가 있습니다.이 포레스트는 연결된 각 컴포넌트의 MST 조합으로 구성됩니다.

MST를 찾는 것은 그래프 이론에서 광범위한 문제이기 때문에, 그것을 해결하기 위한 많은 순차적 알고리즘이 존재한다.그 중에는 각각 MST의 다른 특성을 이용하는 Prim 알고리즘, Kruskal 알고리즘Bor'vka 알고리즘있다.모두 유사한 방식으로 작동합니다. E E 하위 집합은 유효한 MST가 발견될 때까지 반복적으로 성장합니다.그러나 실제적인 문제는 매우 큰 경우가 많기 때문에(때로는 도로 네트워크의 가장자리가 수십억 개에 달할 수 있음), 퍼포먼스가 중요한 요소입니다.이를 개선하는 방법 중 하나는 기존의 MST 알고리즘[1]병렬화하는 것입니다.

프림 알고리즘

이 알고리즘은 MST의 컷 속성을 사용합니다.다음으로 간단한 고급 의사 코드의 실장을 나타냅니다.

  {  T \  \}   {  { s  { V -  하여 가장 밝은, 를 찾습니다. ( )  { v \ (  \ S )   S { } { \ {  \ { v \    ({ ( ,v ) { } { displaystyle  t \ cup \ { \ { rets } 

각 모서리는 정확히 두 번, 즉 각 끝점을 검사할 때 관찰됩니다.각 정점은 각 루프 반복에서 가장 가벼운 에지를 선택하는 것을 제외하고 총 O( +) \ O ( + ) 대해 정확히 한 번 검사됩니다.이 선택은 priority queue(PQ; 우선 큐)를 사용하여 실행되는 경우가 많습니다.각 엣지별로 최대 1개의 조작(( 1){ O (1 )이 실행되고 각 루프 반복은 1개의 deleteMin 조작(( n )\ O ( \ n )} )를 실행합니다.따라서 Fibonacci 힙을 사용하면 Prim 알고리즘의 총 런타임은 점근적으로 O n O n.

루프는 본질적으로 순차적이며 적절히 병렬화할 수 없다는 점에 유의해야 합니다.이는 S{\ S V S {\V S 한쪽 끝점이 있는 가장 밝은 가장자리가T {\T에 추가됨에 따라 변경될 수 있으므로 가장 밝은 가장자리 두 개를 동시에 선택할 수 없습니다.그러나 병렬화에 대한 몇 가지 시도가 존재합니다.

1가지 방법은 O(){ O ( )프로세서를 하여 EREW-PRAM [2]머신의O ( O (1에서의 PQ 액세스를 지원함으로써 총 실행시간을 ( +){ O ( + displaystyle O ( n + m )

크루스칼 알고리즘

Kruskal의 MST 알고리즘은 MST의 사이클 속성을 사용합니다.다음에, 고도의 의사 코드의 표현을 나타냅니다.

  ({ T 포레스트는 각각의 서브트리 v에 있는 모든 정점을 무게 오름차순으로 나타냅니다  {{ v T  T  다른 서브트리에 있는 }} 반환T

displaystyle T)의 서브트리는 union-find 데이터 구조에 저장되므로 O m O((, n \alpha (m, 에서 정점이 동일한 서브트리에 있는지 확인할 수 있습니다따라서 알고리즘의 총 실행시간은 ( rt () +α (){ O ( ( n ) + \ ( )} 。α ( n )는 단일값의 역Ackerman 함수를 나타냅니다.여기서 ( n ) \ ( )는 5 미만의 정수를 생성합니다.

접근법 1: 정렬 단계 병렬화

프림의 알고리즘과 유사하게, Kruskal의 접근법에는 고전적인 변형에서는 병렬화할 수 없는 구성요소가 있다.예를 들어, 두 개의 정점이 동일한 하위 트리에 있는지 여부를 판단하는 것은 두 개의 결합 연산이 동시에 동일한 하위 트리에 결합하려고 시도할 수 있기 때문에 병렬화하기가 어렵습니다.병렬화를 위한 유일한 기회는 분류 단계에 있습니다.O( n) { O ( \ n ) }프로세서에서는 의 경우 정렬이 선형적이기 때문에 총 런타임은 ( ( n) { ( \ ( n )} 로 수 있습니다.

접근법 2: 필터-크루스칼

또 다른 접근법은보다 적극적으로 시켜 원래의 알고리즘을 수정하는 것입니다.이 아이디어는 Osipov [3][4]등에 의해 제시되었다.Filter-Kruskal의 기본 개념은 정렬 비용을 절감하기 위해 가장자리를 빠른 정렬 필터링하는 것과 유사한 방법으로 분할하는 것입니다.다음에, 고도의 의사 코드의 표현을 나타냅니다.

filterKruskal ( \ G ) :m< \  m< } Kruskal인 문턱 값:반환 kruskal(G{\displaystyle G})중심)chooseRandom(E{\displaystyle E})(E≤{\displaystyle(E_{\leq}}, E>)←{\displaystyle E_{>})\gets}한 ←{A\gets\displaystyle}filterKruskal(E≤{\displaystyle E_{\leq}})partition(E{\displaystyle E}, 피벗).   e   {\  E   A  {\A} {\displaystyle  filterKruskal {\ E_{})을 합니다E≤ ←∅{\displaystyle E_{\leq}\gets \emptyset}E>← ∅{\displaystyle E_{>}\gets}foreach(u, v)∈ E{\displaystyle(u,v)\in E}:weight(u, v{\displaystyle u,v})≤{\displaystyle \leq}피벗:E≤← E≤ ∪(u, v){\displaystyle E_{\leq}\gets E_ \emptyset.{\leq}\cup{(u,v)}}일 경우 다른 E>← E>∪(u, v)}반환(E≤{\displaystyle E_{\leq}}, E>,{\displaystyle E_{>}})filter(E{\displaystyle E}):Efil tered← ∅{\displaystyle E_{필터링 된}\gets \emptyset}foreach(u, E_{>}\cup{(u,v)}{\displaystyle E_{>}\gets.v=∈ E{\displ E : find-set(u) \ \ find-set ():             r e  (, v) \ { }\  E_{ filtered }  e e e e e e e e e e e e e e e e e e e e e e e 。

정렬, 분할 및 필터링은 가장자리가 코어 간에 단순히 분할되는 직관적으로 쉬운 병렬화를 가지므로 필터-크루스칼이 병렬화에 더 적합합니다.

보르시브카 알고리즘

Borvvka 알고리즘의 배후에 있는 주된 아이디어는 가장자리 수축이다.엣지{ (를) 그래프에서 한 후 모든엣지 {E {\\{ E}를 {u로 리다이렉트하여 엣지 {u}를 축소합니다.이러한 새 모서리에는 이전 모서리의 무게가 유지됩니다.MST의 무게뿐만 아니라 MST가 어떤 가장자리를 구성하는지를 결정하는 것이 목적이라면 가장자리를 수축시킨 정점 쌍 간에 주목해야 한다.다음으로 높은 수준의 의사 코드의 표현을 제시하겠습니다.

반면 V<T;0S{\displaystyle V>0}v에 ∅{\displaystyle S\gets \emptyset}←∅{\displaystyle T\gets \emptyset}←∈ V{v\in V\displaystyle}S← S{\displaystyle S\gets S}∪{\displaystyle \cup}{u, v}∈ E{\displaystyle\와 같이{u,v\}\in E}에{u, v}∈ S{년.displaS 계약{ {\{      \ TT\ S} 반환 T

수축으로 인해 한 쌍의 정점 사이에 여러 모서리가 생길 수 있습니다.O( ) \ O ( )에서는 가장 가벼운 것을 직관적으로 선택할 수 없습니다.다만, 정점을 공유하는 모든 수축이 병렬로 행해진다면, 이것은 가능합니다.정점이 1개밖에 남지 않은 경우 재귀는 정지합니다.즉, 알고리즘에서는 n개 \ n 반복이 필요하기 때문에 O logn의 합계 실행 시간이 됩니다.

병렬화

이 algorithm[5][6][7]의 하나의 가능한 parallelisation고 T∈ O(로그 c⁡ m){T(m,n,p)\in O(\log ^{c}m)\displaystyle}(m, n, p)지속적인 c{\displaystyle c}. 그는 존재하는polylogarithmic 시간 복잡도, 즉 T⋅ p(m, n, p)∈ O(m로그 ⁡ n){\displaystyle T(m,n,p)\cdot p\in O(nm\log)}를 산출한다.T이 전무하다는 , ,) { T ( , , } { p}프로세서를 한 머신 상에서 m{ m개의 엣지, { n개의 정점을 그래프의 실행시간을 나타냅니다.기본 개념은 다음과 같습니다.

반면 V1{\displaystyle V1} 가벼운 사건 O// edges을 찾(mp+로그 ⁡ n+로그 ⁡ p)각 꼭지점에 // O(np+로그⁡ n){O({\frac{n}{p}}+\log n)\displaystyle}계약 O// 각 부분 그래프(해당 부분 그래프를 할당{O({\frac{m}{p}}+\log n+\log p)\displaystyle}.  mp  

그러면 MST는 발견된 가장 가벼운 모든 가장자리로 구성됩니다.

이 병렬화에서는 G ( ,) \ G= ( , 배열 그래프가 사용됩니다.이 그래프는 3개의 배열로 구성됩니다. n의 \ \ Gamma} + 1의 δ \ 1의m 엔드포인트 m of of of of of of of of of of of of of of of of of of of of of m of of of of of of m of of of of of of of of of of of of of of of m m 및 c c 길이 m 모서리 중량을 나타냅니다.입사하는 각의 다른 한쪽 끝은 - 】【의 엔트리에서 찾을 수 있습니다.】【 \gamma Γ{\displaystyle \Gamma}에서 i{\displaystyle 나는}-th 가장자리의 무게 c[나는]{\displaystyle c[나는]}에 iγ{\displaystyle \gamma}에 사이 vertices 너{\displaystyle u}그리고 v{\displaystyle v}만일Γ[u]≤ 나는 <-th 가장자리{\displaystyle 나는}, Γ는 경우에는 u+ 찾을 수 있다.1 i <\ [ ] \ style [ i ]=

가장 가벼운 사고 에지 찾기

먼저 엣지는 각 p 프로세서 간에 분산됩니다.ii -th [ i p \[ { \ { } { p} })와 [ ( +) m -](\ \ [ +) } { 사이에 저장된 엣지를 수신합니다.또한 각 프로세서의 엣지가 필요합니다.}은는) 엣지의 엔드포인트 중 하나만을 저장하고 d pred}에 저장합니다. 이 정보는 {\ p} 바이너리 검색을 하는n \O(\n) \ O +p얻을.실제로 후자의 접근법이 점근적으로 더 나쁠지라도 때로는 더 빠르다.

이제 각 프로세서가 각 정점에 입사하는 가장 가벼운 엣지를 결정합니다.

V나는 치고 p;{\frac{(i+1)m}{p}}-1;ve++}만약Γ[v+1])e{\displaystyle \Gamma[v+1]=e}++{\displaysty e←에{\displaystyle v\gets}find(나는 치고 p{\displaystyle{\frac{나는}{p}}},Γ{\displaystyle \Gamma})e<>(나는 1+)mp− 1;e++{\displaystyle e\gets{\frac{나는}{p}};e< ←.르 v++} [   [   [ ]{  [  c [ ]} [ v  e \  [ ]\ e경우

여기에서는, 몇개의 정점이 복수의 프로세서에 의해서 처리되는 문제가 발생합니다.이에 대한 가능한 해결책은 각 프로세서가 v\ prev \ display style prev \ array를 가지고 있으며, 나중에 리덕션을 사용하는 다른 프로세서와 조합됩니다.각 프로세서는 최대 2개의 정점을 가지며, 다른 프로세서에 의해 처리되며 각 감소폭은( pO(\p입니다. 이 순서의 총 실행시간은 O( m + log" + ") { O ( { \ {} { ) + \ n + \ p 입니다.

정점에 하위 그래프 할당

이전 단계에서 수집한 모서리만으로 구성된 그래프를 관찰합니다.이러한 모서리는 가장 가벼운 입사 모서리인 정점에서 멀리 떨어져 있습니다.결과 그래프는 약하게 연결된 여러 구성요소로 분해됩니다.이 단계의 목적은 부품이 되는 구성요소를 각 정점에 할당하는 것입니다.모든 정점은 정확히 하나의 나가는 에지를 가지므로 각 컴포넌트는 유사 트리입니다. 즉, 컴포넌트의 가장 가벼운 에지와 반대 방향으로 병렬로 실행되는 단일 추가 에지가 있는 트리입니다.다음 코드는 이 추가 에지를 루프로 변환합니다.

모두 병렬            한다면            

약하게 연결된 모든 구성 요소는 루트에 루프가 있는 방향 트리가 됩니다.이 루트는 각 컴포넌트의 대표로서 선택됩니다.다음 코드에서는 각 정점에 대표성을 할당하기 위해 배율을 사용합니다.

하는 동안에      모든 것            

이제 모든 서브그래프는 입니다.일부 고급 기술을 사용하는 경우 이 단계에서는 Op + logn ){ O { n 시간이 합니다.

서브그래프 축소

이 단계에서는 각 하위 그래프가 하나의 정점으로 축소됩니다.

  {\ k 개수의  V  {,  , -   , \  V \ gets { 0 , \ : }  {, ,  - 1} \  \  0 , 1 } \ 1、 k - 

( n + p) { O ( { \ { } { } + \ p} ) 에서는 프리픽스 합계를 사용하여 bijectionive 함수를 찾을 수 있습니다.새로운 정점과 엣지 세트가 생겼기 때문에 인접 배열을 재구축해야 합니다.이는 Op + O p E E에서 할 수 있습니다.

복잡성

Each iteration now needs time and just like in the sequential case there are iterations, resulting in a total runtime of . If ( \ m \ Omega ( p \ ^ {)알고리즘의 효율은 ( )\ \ (n ){ m \ O ( ) m 、 매우 효율적입니다.

기타 알고리즘

MST를 검출하는 문제를 다루는 다른 병렬 알고리즘이 여러 개 있습니다.이러한 프로세서 수를 선형으로 설정하면 O( n O[8][9]n에서 이를 실현할 수 있습니다.Bader와 Cong는 최적의 시퀀셜 [10]알고리즘보다8개의 코어로 5배 빠른 MST 알고리즘을 제시했습니다.

또 다른 과제는 외장 메모리 모델입니다. Dementiev 등에 의해 제안된 알고리즘이 내장[11] 메모리만을 사용하는 알고리즘보다 2~5배 느리다고 주장되고 있습니다.

레퍼런스

  1. ^ Sanders; Dietzfelbinger; Martin; Mehlhorn; Kurt; Peter (2014-06-10). Algorithmen und Datenstrukturen Die Grundwerkzeuge. Springer Vieweg. ISBN 978-3-642-05472-3.
  2. ^ Brodal, Gerth Stølting; Träff, Jesper Larsson; Zaroliagis, Christos D. (1998), "A Parallel Priority Queue with Constant Time Operations", Journal of Parallel and Distributed Computing, 49 (1): 4–21, CiteSeerX 10.1.1.48.3272, doi:10.1006/jpdc.1998.1425
  3. ^ Osipov, Vitaly; Sanders, Peter; Singler, Johannes (2009), "The filter-kruskal minimum spanning tree algorithm", Proceedings of the Eleventh Workshop on Algorithm Engineering and Experiments (ALENEX). Society for Industrial and Applied Mathematics: 52–61, CiteSeerX 10.1.1.218.2574
  4. ^ Sanders, Peter. "Algorithm Engineering script" (PDF). Algorithm Engineering KIT Homepage. Retrieved 25 February 2019.
  5. ^ Sanders, Peter. "Parallel Algorithms script" (PDF). Parallel Algorithms KIT Homepage. Retrieved 25 February 2019.
  6. ^ Zadeh, Reza. "Distributed Algorithms and Optimization" (PDF). Distributed Algorithms and Optimization Stanford University Homepage. Retrieved 25 February 2019.
  7. ^ Chun, Sun; Condon, Anne (1996). "Parallel implementation of Bouvka's minimum spanning tree algorithm". Proceedings of International Conference on Parallel Processing: 302–308. doi:10.1109/IPPS.1996.508073. ISBN 0-8186-7255-2.
  8. ^ Chong, Ka Wong; Han, Yijie; Lam, Tak Wah (2001), "Concurrent threads and optimal parallel minimum spanning trees algorithm", Journal of the Association for Computing Machinery, 48 (2): 297–323, CiteSeerX 10.1.1.32.1554, doi:10.1145/375827.375847, MR 1868718
  9. ^ Pettie, Seth; Ramachandran, Vijaya (2002), "A randomized time-work optimal parallel algorithm for finding a minimum spanning forest" (PDF), SIAM Journal on Computing, 31 (6): 1879–1895, doi:10.1137/S0097539700371065, MR 1954882
  10. ^ Bader, David A.; Cong, Guojing (2006), "Fast shared-memory algorithms for computing the minimum spanning forest of sparse graphs", Journal of Parallel and Distributed Computing, 66 (11): 1366–1378, doi:10.1016/j.jpdc.2006.06.001
  11. ^ 를 클릭합니다Dementiev, Roman; Sanders, Peter; Schultes, Dominik; Sibeyn, Jop F. (2004), "Engineering an external memory minimum spanning tree algorithm", Proc. IFIP 18th World Computer Congress, TC1 3rd International Conference on Theoretical Computer Science (TCS2004) (PDF), pp. 195–208.