동적으로 에지를 추가하고 특정 쿼리를 수행 할 수 있는 유 방향 그래프 를 고려하십시오 .
예 : 분리 된 포리스트
다음 쿼리 세트를 고려하십시오.
arrow(u, v)
equiv(u, v)
find(u)
첫 번째는 화살표 추가 경우 그래프, 두번째는 결정 , 마지막 하나의 등가 클래스의 정규 대표 발견 , 즉 이되도록 암시 .
유사 상수 상각 복잡성, 즉 에서 이러한 쿼리를 구현 하는 분리 세트 포리스트 데이터 구조를 사용 하는 잘 알려진 알고리즘 이 있습니다. 이 경우 에는를 사용하여 구현됩니다 .equiv
find
더 복잡한 변형
이제 지시 사항이 중요한 더 복잡한 문제에 관심이 있습니다.
arrow(u, v)
confl(u, v)
find(u)
먼저 화살표 추가 노드가 있으면 초침 결정, 도달 양쪽으로부터 및 즉, . 마지막 객체 리턴한다 되도록 의미 여기서 쉽게 계산할 수 있어야한다. (즉,를 계산하기 위해 ). 목표는 이러한 작업이 빠르도록 올바른 데이터 구조를 찾는 것입니다.w u v u → ∗ ← ∗ v r ( u ) u → ∗ ← ∗ v r ( u ) ∙ r ( v ) ∙confl
사이클
그래프에는 사이클이 포함될 수 있습니다.
주요 문제에 대한 DAG 만 고려하기 위해 강력하게 연결된 구성 요소 를 효율적 이고 점진적으로 계산 하는 방법이 있는지 모르겠습니다 .
물론 DAG에 대한 솔루션도 감사하겠습니다. 최소 공통 조상의 증분 계산에 해당합니다.
순진한 접근
분리 된 포리스트 데이터 구조는 가장자리 방향을 무시하기 때문에 여기서는 도움이되지 않습니다. 참고 그래프는 합류하지 않은 경우, 하나의 노드가 될 수 없다.
정의 할 수있는 하나 및 정의하는 등 때 . 그러나 이것을 점진적으로 계산하는 방법은 무엇입니까?∙ S 1 ∙ S 2 S 1 ∩ S 2 ≠ ∅
이러한 큰 집합을 계산하는 것이 유용하지 않을 수 있으므로 일반적인 집합 찾기 알고리즘 에서처럼 작은 집합이 더 흥미로워 야합니다.