동적 그래프에서 연결된 컴포넌트 정보를 유지하기위한 가장 효율적인 알고리즘 및 데이터 구조는 무엇입니까?


9

방향이없는 유한 희소 그래프가 있고 다음 쿼리를 효율적으로 실행할 수 있어야한다고 가정 해 봅시다.

  • IsConnected(N1,N2) 과 사이에 경로가 있으면 반환 하고 , 그렇지 않으면TN1N2F
  • ConnectedNodes(N) 에서 도달 할 수있는 노드 세트를 리턴합니다.N

이것은 그래프의 연결된 구성 요소를 사전 계산하여 쉽게 수행 할 수 있습니다. 두 쿼리 모두 시간에 실행될 수 있습니다 .O(1)

또한 Edge를 임의로 추가 할 수 있어야하는 경우 -구성 요소를 분리 세트 데이터 구조 에 저장할 수 있습니다 . 가장자리가 추가 될 때마다 다른 구성 요소의 두 노드를 연결하면 해당 구성 요소를 병합합니다. 이 추가 에 대한 비용 및 에 대한 비용 및 (뿐만 아니라 수 있습니다 ).AddEdge(N1,N2)O(1)AddEdgeO(InverseAckermann(|Nodes|))IsConnectedConnectedNodesO(1)

또한 가장자리를 임의로 제거 할 수 있어야하는 경우이 상황을 처리하기위한 최상의 데이터 구조는 무엇입니까? 알려져 있습니까? 요약하면 다음 작업을 효율적으로 지원해야합니다.

  • IsConnected(N1,N2) 과 사이에 경로가 있으면 반환 하고 , 그렇지 않으면 반환 합니다.TN1N2F
  • ConnectedNodes(N) 에서 도달 할 수있는 노드 세트를 리턴합니다 .N
  • AddEdge(N1,N2) -두 노드 사이에 가장자리를 추가합니다. 참고 , 또는 둘 모두가 전에 존재하지 않을 수 있습니다.N1N2
  • RemoveEdge(N1,N2) -두 노드 사이의 기존 모서리를 제거합니다.

(게임 개발의 관점에서 이것에 관심이 있습니다.이 문제는 몇 가지 상황에서 발생하는 것 같습니다. 플레이어가 전력선을 만들 수 있고 발전기가 건물에 연결되어 있는지 여부를 알아야 할 수도 있습니다. 문을 잠금 해제하면 적이 플레이어에게 도달 할 수 있는지 알아야합니다.하지만 매우 일반적인 문제입니다.


영형이자형이자형영형이자형에스 아마 실행할 수 없었다 영형(1)의 목록을 반환하면 노드, 필요합니다 Ω()시각. 구현영형이자형이자형영형이자형에스BFS를 사용하면 최적이므로 잠재적 데이터 구조는 IsConnected, AddEdge 및 RemoveEdge 만 지원하면됩니다. 이 질문에 관련 보인다 stackoverflow.com/questions/7241151/...
톰 반 데르 Zanden 이외에도

@TomvanderZanden (프로그래밍, 포인터 또는 참조로) 이미 빌드 된 집합을 반환하는 것은 영형(1)...의 사용자가별로 없지만 영형이자형이자형영형이자형에스 그것을 할 수 있었다 영형(1) 그리고 적용되지 않는 나는에스영형이자형이자형.
user253751

답변:


11

이 문제는 동적 연결성 으로 알려져 있으며 이론적 인 컴퓨터 과학 커뮤니티에서 활발한 연구 분야입니다. 여전히 몇 가지 중요한 문제가 여전히 열려 있습니다.

용어를 명확하게하기 위해 가장자리를 추가하고 삭제하려는 경우 완전 동적 연결 을 요구 합니다. Holm, de Lichtenberg 및 Thorup (J.ACM 2001)의 결과는 다음과 같습니다.영형(로그2) 업데이트 시간 영형(로그/로그로그)쿼리 시간. 내 이해에서 그것은 구현 가능한 것 같습니다. 간단히 말해서 데이터 구조는 스패닝 트리의 계층 구조를 유지하며 트리의 동적 연결은 다루기가 더 쉽습니다. 좋은 설명을 위해 Erik D. Demaine의 메모를 추천 할 수 있습니다 . 비디오는 여기 를 참조 하십시오 . Erik의 메모에는 다른 관련 결과에 대한 포인터도 포함되어 있습니다. 참고로이 모든 결과는 이론적 인 결과입니다.

이러한 데이터 구조는 ConnectedNodes 쿼리 자체를 제공하지 않지만이를 달성하기는 쉽습니다. 추가 데이터 구조로 그래프 (예 : 이중 연결 에지 목록)를 유지하고 깊이 우선 검색을 수행하여 특정 노드에서 도달 할 수있는 노드를 가져옵니다.

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