경계 높이 트리에 무작위로 생성하려면 어떻게해야합니까?


9

내가 작업중 인 프로젝트의 경우 높이가 제한된 임의의 스패닝 트리를 생성해야합니다.

기본적으로 다음을 수행합니다. 1) 스패닝 트리 생성 2) 실행 가능 여부를 확인합니다 (가능한 경우).

1) 최소 스패닝 트리 (Prim 또는 Kruskal)에서 시작하여 존재하지 않는 가장자리를 추가하면 사이클이 생성됩니다.이 사이클을 감지 하고이 사이클의 가장자리 중 하나를 제거하여 새로운 스패닝 트리를 제공합니다. 새로운 가장자리를 추가 하여이 스패닝 트리 ...

2) 특별한 정점이 있다고 가정 vcenter. 모든 정점v경로의 길이 vVcenter 그보다 작아야한다 δ, 어디 δ 주어진 매개 변수입니다.

이것을하는 더 나은 (영리한) 방법이 있습니까?

추신 : 나는 다른 제약 조건 (제 실수)을 지정하는 것을 잊었습니다. 정점의 정도도 제한되어야합니다.


이게 맞는지 잘 모르겠습니다. 첫 번째 단계에서 나무의 높이가 (아마도) 줄어들도록 임의적으로 또는 가장자리를 제거합니까?
Sacha

가장자리를 임의로 추가하고 제거합니다.
Arman

대신 트리에 걸친 임의의 최단 경로 를 샘플링 할 수 있습니까? 그것은 간단합니다
Yaroslav Bulatov

가장자리에 비용이 있습니까? 높이가 넓은 나무를 찾고 있습니까?δ최소 비용? @pboothe가 쓴 것처럼 BFS를 사용할 수 있습니다. 유일한 문제는 BFS가 너무 많은 메모리를 사용한다는 것입니다. 비용을 염려한다면 유클리드 최소 스패닝 트리 ( en.wikipedia.org/wiki/Euclidean_minimum_spanning_tree ) 에 대해 wikipedia에서 알고리즘을 사용해 볼 수 있습니다 . 그것은 실행 시간이O(nlogn)O(n)공간.
Marcos Villagra

따라서 문제에는 세 가지 한계가 있습니다 : 나무의 높이, 각 정점의 정도 및 v_center와의 거리, 맞습니까? 경계 제약 조건 자체만으로도 문제가 발생하기는 어렵지만 정확한 알고리즘이 아닌 솔루션을 신속하게 생성 할 수있는 방법을 찾고 있다고 가정합니다.
Jagadish

답변:


7

몇 년 전 깊숙이 펼쳐진 나무를 연구하고 있었는데 정말 흥미 롭습니다. 내 동료 중 일부는 훌륭한 작업을 수행 한 메시지 전달 알고리즘을 제안했지만 사용 가능한 코드를 찾을 수 없습니다. 우리는 그것을 물리학 스타일로 작성했습니다 : http://iopscience.iop.org/1742-5468/2009/12/P12010/ . 그들은 그것이 학위로도 작동한다고 말했지만 그것은 논문으로 만들지는 않았습니다.

내가 Markov Chain Monte Carlo라고 부르는 당신이 제안한 접근법은 종종 메시지 전달 방식의 경쟁자입니다. 주어진 그래프의 경계, 경계 깊이에 걸친 스패닝 트리에서 무작위로 거의 균일하게 샘플링하는 데 관심이 있다면 "부드러운"경계를 사용하도록 접근 방식을 변경하는 것이 좋습니다. 즉, 나무가 뎁스 바운드를 위반하게 만드는 엣지 스왑을 거부하는 대신 수락하지만 바운드를 위반하지 않는 스왑보다 확률이 낮습니다. 이 확률이 얼마나 낮은지를 제어하는 ​​매개 변수가있는 경우, 거의 균일 한 임의의 실행 가능한 솔루션에 도달 할 때까지 제한 조건 위반 구성의 가능성을 줄이거 나 줄일 수 있습니다.

가장 큰 문제는 체인을 얼마나 오래 운영해야 하는가입니다. 최대 차수가 2 인 스패닝 트리는 해밀턴 경로이므로 일반 크기가 그래프의 크기에 기하 급수적이어야합니다. 그러나 관심있는 그래프는 어떤면에서 특별 할 수 있습니다.



3

세트에서 스패닝 트리를 균일하게 샘플링하는 것이 문제인 경우 S, 어디 S 최대 높이의 모든 스패닝 트리 세트입니다. h일부 입력의 경우 h그런 다음 전략이 효과적입니다 (예 : 임의의 스패닝 트리를 샘플링하고 높이가 최대인지 확인하십시오) h).

그러나 설명 한 알고리즘이 임의의 스패닝 트리를 생성하는지 확실하지 않습니다. 대신 표준 알고리즘을 보는 것이 좋습니다. Wilson의 알고리즘과 Aldous-Broder의 알고리즘이라는 두 가지 알고리즘이 있습니다. 당신은 여기를 볼 수 있습니다 . 새로운 (근사) 알고리즘이 있지만 상당히 복잡합니다.

또한 경계 높이를 사용하여이 스패닝 트리를 직접 생성하는 방법이있을 수 있습니다. 그러나 나는 그런 알고리즘에 대해 들어 본 적이 없습니다.


1

너비 우선 검색을 사용하십시오! 그래프의 모든 정점에서 BFS를 수행하고 가장 작은 결과 트리를 선택하십시오. BFS는 항상 루트에서 가장 적은 홉을 가진 다른 모든 정점까지의 경로를 찾습니다.


당신은 확실히 맞습니다. 우리는 BFS로 작업을 시작했지만 정점의 정도 제약 때문에 작동하지 않았습니다. 이 제약 조건 (내 실수)에 대해 언급하는 것을 잊었습니다. 생성 된 트리의 정점의 정도도 경계해야합니다. 귀하의 답변은 현재 질문에 정확하지만 질문을 편집해야한다고 생각합니다.
Arman

그렇다면 당신의 문제는 학위 제한 스패닝 트리 -en.wikipedia.org/wiki/Degree-constrained_spanning_tree
Peter Boothe의
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.