방향이 바뀐 그래프에서 구성 요소를 추적하는 온라인 알고리즘이 있습니까?


12

문제

무 방향 그래프 (멀티 에지 포함)가 있으며 시간이 지남에 따라 변경되며 노드와 가장자리가 삽입 및 삭제 될 수 있습니다. 그래프를 수정할 때마다이 그래프의 연결된 구성 요소를 업데이트해야합니다.

속성

추가 속성은 두 구성 요소가 다시 연결되지 않는다는 것입니다. 분명히, 그래프는 임의의 양으로 사이클을 가질 수 있습니다 (그렇지 않으면 솔루션은 사소합니다). 모서리 에 노드 n이 포함되어 있지 않으면 해당 노드를 채택하지 않습니다. 그러나 n e 이면 n e로 변경할 있습니다 .ennene

구혼

나는 지금까지 두 가지 가능한 접근법을 가지고 있지만, 알다시피 그것들은 끔찍합니다.

느린 상태

매번 수정 된 요소에서 시작하여 그래프를 검색 (dfs / bfs) 할 수 있습니다. 이것은 공간을 절약하지만 각 수정에 대해 O (n + m)을 가지므로 느립니다.

Stateful fast (-er) (?) 접근 방식

각 노드의 가능한 모든 경로를 가능한 모든 노드에 저장할 수 있지만 올바르게 보면 O (n ^ 4) 메모리가 필요합니다. 그러나 런타임 개선 방법이 확실하지 않습니다 (동일한 구성 요소의 모든 노드에 대한 정보를 최신으로 유지해야하기 때문에 하나가있는 경우).

질문

포인터, 그 문제에 대해 더 많이 배울 수있는 방법 또는 내가 구축 할 수있는 알고리즘이 있습니까?

노트

런타임 / 메모리가 크게 개선되면 때로는 두 가지 구성 요소가 하나라고 말하는 최적이 아닌 솔루션으로 살 수 있지만 물론 최적의 솔루션을 선호합니다.


"속성"에서 마지막 두 문장을 읽으면, 당신은 단지 감소 문제에만 관심이있는 것 같습니다. 그렇다면, 동적 감소 연결에 대한 Thorup의 작업을 확인하십시오. (당신은 문제의 완전 역동적 인 버전을위한 JeffE의 포인터를 통해 인용을 찾을 수 있습니다.)
Maverick Woo

@Maverick Woo : 항상 새로운 모서리 / 노드가있을 수 있습니다. 나는 이것이 바로 마지막 재산이 그렇게 강하지 않다고 생각합니다. 여전히 감가 상각 자격이 있습니까?
비트 마스크

죄송합니다. 첫 문장을 어떻게 놓쳤는 지 모르겠습니다. 아래 "답변"을 참조하십시오.
Maverick Woo

답변:


17

다항식 시간으로 에지 삽입, 에지 삭제 및 연결 쿼리 (동일한 연결된 구성 요소에있는 두 정점이 있습니까?)를 지원하는 여러 데이터 구조가 있습니다.


일단 논문을 살펴본 후에는 이것을 받아 들일 것입니다.
비트 마스크

6

연결된 구성 요소 분해에 대한 동적 그래프 알고리즘을 찾고 있다고 생각합니다. Holm, de Lichtenberg 및 Thorup [HLT01]의 알고리즘은 각 엣지 업데이트에서 다항식 시간을 상각했습니다. 지난번에 문제를 살펴본 지 오래되었습니다. 아마도 더 최근의 진전이있을 것입니다.

[HLT01] Jacob Holm, Kristian de Lichtenberg 및 Mikkel Thorup. 연결성, 최소 스패닝 트리, 2 에지 및 이중 연결성을위한 폴리 로그 결정 론적 완전 동적 알고리즘. ACM의 전표 , 48 (4) : 723–760, 2001 년 7 월. http://doi.acm.org/10.1145/502090.502095


재수 불길한 물건. 당신은 나에게 콜라를 빚지고있다.
Jeffε

@JeffE : 나는 그 게임 에 대해 몰랐다 . 그러나 규칙에 따르면, 나는 게임을 잃지 않았습니다 (나는 그냥 "징크스"상태에 있습니다). 그래서 나는 더 이상 말하지 않으면 코카콜라를 빚지지 않습니다 ... 아, 잠깐만 기다리십시오.
Tsuyoshi Ito

만약 당신이 명성 포인트에서 거래 할 수 있다면 :)
Suresh Venkat

5

(지금까지는 연결 쿼리 만 사용하겠습니다. 불행히도 응용 프로그램에는 충분하지 않을 수 있습니다.)

동적 연결 문제에 대한 이전의 많은 작업은 에지 업데이트 모델에 있습니다. 정점 수가 고정되어 있다고 가정하고 쿼리를 수행하는 동안 에지를 삽입 및 / 또는 삭제할 수 있습니다. 삽입 (삭제) 만 할 수있는 경우에는 증분 (감소)입니다. 둘 다 할 수 있다면 그것은 완전히 역동적입니다. JeffE가 지적한 Thorup의 작업 (및 의견에서)은 모두 최신 업데이트입니다.

CS 이론 커뮤니티 인 AFAIK는 일반 그래프에 대한 정점 업데이트 만보고 있습니다. FOCS 2008에서 Chan, Pătraşcu 및 Roditty가이 작업에 획기적인 작업을 수행했습니다. 최신 링크 (2010 년 9 월)와 그 안에 대한 참조는이 링크 를 참조하십시오 .


Holm et. 알. 내 문제에 대한 접근 방식이 작동하지 않습니까? 나는 그것을 채택하려고했다.
비트 마스크

1
그래프의 범위가 제한되어 있다면 이론적으로 많은 모서리 업데이트를 사용하여 정점 업데이트를 에뮬레이션 할 수 있습니다. 그렇지 않으면 단일 정점 업데이트 (예 : 별 그래프의 중심 제거)로 인해 그래프의 연결성이 크게 변경 될 수 있으며이 경우 Chan et al.
Maverick Woo

내가 참조. 나는 원래 질문에서 정점 제거 가 드물기 때문에 나란히 할 수 있다고 언급 했어야합니다 .
비트 마스크
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.