지시 된 노동 조합 찾기


11

동적으로 에지를 추가하고 특정 쿼리를 수행 할 수 있는 유 방향 그래프 G 를 고려하십시오 .

예 : 분리 된 포리스트

다음 쿼리 세트를 고려하십시오.

arrow(u, v)
equiv(u, v)
find(u)

첫 번째는 화살표 추가 uv 경우 그래프, 두번째는 결정 uv , 마지막 하나의 등가 클래스의 정규 대표 발견 , 즉 r(u) 이되도록 uv 암시 r(v)=r(u) .

유사 상수 상각 복잡성, 즉 에서 이러한 쿼리를 구현 하는 분리 세트 포리스트 데이터 구조를 사용 하는 잘 알려진 알고리즘 이 있습니다. 이 경우 에는를 사용하여 구현됩니다 .O(α(n))equivfind

더 복잡한 변형

이제 지시 사항이 중요한 더 복잡한 문제에 관심이 있습니다.

arrow(u, v)
confl(u, v)
find(u)

먼저 화살표 추가 노드가 있으면 초침 결정, 도달 양쪽으로부터 및 즉, . 마지막 객체 리턴한다 되도록 의미 여기서 쉽게 계산할 수 있어야한다. (즉,를 계산하기 위해 ). 목표는 이러한 작업이 빠르도록 올바른 데이터 구조를 찾는 것입니다.w u v u v r ( u ) u v r ( u ) r ( v ) uvwuvuvr(u)uvr(u)r(v)confl

사이클

그래프에는 사이클이 포함될 수 있습니다.

주요 문제에 대한 DAG 만 고려하기 위해 강력하게 연결된 구성 요소 를 효율적 이고 점진적으로 계산 하는 방법이 있는지 모르겠습니다 .

물론 DAG에 대한 솔루션도 감사하겠습니다. 최소 공통 조상의 증분 계산에 해당합니다.

순진한 접근

분리 된 포리스트 데이터 구조는 가장자리 방향을 무시하기 때문에 여기서는 도움이되지 않습니다. 참고 그래프는 합류하지 않은 경우, 하나의 노드가 될 수 없다.r(u)

정의 할 수있는 하나 및 정의하는 등 때 . 그러나 이것을 점진적으로 계산하는 방법은 무엇입니까?S 1S 2 S 1S 2r(u)={vuv}S1S2S1S2

이러한 큰 집합을 계산하는 것이 유용하지 않을 수 있으므로 일반적인 집합 찾기 알고리즘 에서처럼 작은 집합이 더 흥미로워 야합니다.

답변:


3

( 편집 : 문제에 대한 나의 이해가 명확 해 졌으므로 이제 내 대답을 완전히 다시 작성했습니다.)

그래프가 작성되고 검색 될 때 그래프의 전이 폐쇄의 근사를 점진적으로 구성하고 개선하기 위해이 문제를 줄일 수있는 것처럼 들립니다.

u v v u u , v u v u w v wr(u) 는 추상적으로 그래프의 모든 에 대해 와 모두에서 도달 할 수있는 모든 노드의 집합입니다 . (물론, 모든 쌍이 반드시 두 노드 모두에 도달 할 수있는 노드를 갖는 것은 아닙니다.) union-find의 경우와 달리이 세트는 그래프에서 표준 대표 노드로 표시 될 수 없습니다. 와 모두에서 도달 할 수있는 노드 와 와 모두 에서 도달 할 수있는 노드가있을 수 있지만 와 모두에서 도달 할 수 없습니다 .uvvuu,vuvuwvw

당신이 모든에 대한 유지 말 , 노드의 집합에서 연결할 수 (I이 전화 할게 ). 이러한 세트는 각 노드에 대한 추가 데이터 구조이거나 최소한 그래프의 추가 "단축"모서리 세트 일 것입니다. 그래프의 지정된 구조를 유지하는 데 신경 쓰지 않으면 이러한 가장자리와 지정된 가장자리를 구분할 필요가 없습니다.u R ( u )uuR(u)

일반적인 경우보다 더 효율적인 데이터 구조 (예 : 비트 벡터 또는 해시 테이블)를 캡처하는 데이터 구조에 대한 아이디어가 없지만 이 세트를 점진적으로 업데이트 할 수 있습니다 .

당신이에서 우위를 추가 할 때마다 다른 노드로 , 당신은 설정 .v R ( u ) = R ( u ) R ( v )uvR(u)=R(u)R(v)

confl먼저 시도하여 구현하십시오 . 비어 있지 않으면 true를 반환하십시오. 이 경우 그러나 이다 빈에서 두 개의 평행 한 폭 우선 검색을 수행 할 및 당신도 모두 도달 세트를 배출 또는 공통의 노드를 찾을 때까지. 이렇게하는 동안 찾은 도달 가능한 노드를 포함하도록 및 (및 찾은 모든 중간 노드 의 도 업데이트 하십시오. 공통 노드를 찾으면 R (u) = R (v) = R (u) \ cup R (v)로 설정하십시오 .R ( U ) R ( V ) R ( U ) R ( V ) RR(u)R(v)R(u)R(v)R(u)R(v)R

find(u) 만 반환합니다 . 문제는 순전히 측면에서 구현되지 않는다는 것입니다 . 알고리즘이 비 증분 적이 지 않으면 어떻게 될 수 있는지 알지 못합니다 (예 : 그래프의 전 이적 폐쇄로 모든 노드의 모든 세트를 사전 계산하십시오 ). 비용이 가까운 지 알 수는 없지만 비용은 들지 않습니다 . (아마하지 않는 거짓 대답을에서. 귀하의 경우 두 BFS'es도 시작해야합니다 세트가 포화된다. 알고리즘은 비 증분을 만들어하지 않는 한이 또한 피할 것)R O ( α ( N ) ) RR(u)conflfindRO(α(n))conflR

이것은 La Poutré와 van Leeuwen의 그래프의 전 이적 폐쇄를 유지 하는 특별한 방법 인 것처럼 들린다 .

나는 이것이 질문에 완전히 대답하지는 않지만 그것을 명확히하는 데 도움이되며 그래프 알고리즘에 대한 경험이 많은 사람은 세트 를 인코딩하기 위해 더 나은 데이터 구조를 제공 할 수 있습니다 .R


답변 해 주셔서 감사합니다. 지금 질문을 더 명확하게 밝히기를 바랍니다. 연결된 구성 요소에 대해서는 신경 쓰지 않지만 CC 는 최종 솔루션에 도움 있습니다. 나는 이없는 이 아직이 DAG의 단일 노드가 될 수 없습니다. r ( u )r(u)r(u)
jmad

좋습니다. 조금 더 명확합니다. 는 추상적 으로 모든 대해 와 에서 도달 할 수있는 모든 노드의 집합 인 것으로 보입니다.u vr(u)uv 그래프의 v u 에. 이 세트는 u 의 "바로 가기"모서리 세트 일 수 있습니다. 그러면 그래프에서 도달 가능성의 전 이적 폐쇄를 계산하는 것처럼 보입니다. 나는 여전히 유니온 찾기보다 더 많은 스토리지 / 작업 (모든 "단축"모서리를 레이블 / 업데이트해야 함)을 필요로 할지라도 여전히 이것이 왜 점차적으로 수행 할 수 없었는지를 알지 못합니다 (경로를 압축 경로로). 이게 말이 되요? vuu
Chris Pressey

r(u)

confl(u,v)R(u)R(v)find

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