2 세트의 Union/Intersection, 각 세트는 서브 세트에 의해 정의됩니다.

StackOverflow https://stackoverflow.com/questions/1616490

  •  06-07-2019
  •  | 
  •  

문제

우리는 다른 세트의 결합에서 모든 세트의 정의를 알고 있습니다.

예를 들어

A = B Union {1,2}

B = C Union d

C = {5,6}

d = {5,7}

e = {4}

그런 다음 a = {1,2,5,6,7}

연합 E = {1,2,4,5,6,7}

이를 수행하는 효율적인 알고리즘입니다. 노조의 계층 구조가 실제로 깊을 수 있다고 가정하고, 하위 집합이 자주 바뀔 수 있다고 가정합니다 (그다지 많지는 않습니다). 나는해야 할 노조의 양을 최소화 할 수있는 방법이 있어야한다고 생각합니다.

도움이 되었습니까?

해결책

그래서 당신은 변화하는 세트의 노조의 변하지 않는 계층을 가지고 있습니까? 그리고 당신은 당신의 예에서와 마찬가지로 한 세트의 가치에만 관심이 있습니까?

그런 다음 계층 구조를 평평하게하십시오. 즉, 당신의 예에서 당신은 한 번 계층 구조를 걸어 가기 위해 세트의 세트 세트를 찾아서이 세트의 조합이며 저장할 것입니다.

리프 세트가 변경 될 때마다 노동 조합을 재조정하려면 현재 포함 된 세트 수를 각 요소에 대해 추적 할 수 있습니다. 리프 세트가 변경되면 신속하게 업데이트 될 수 있으며 변경되지 않은 잎 세트를 보지 않아도됩니다. 그런 다음 주파수 수> 0이있는 요소는 현재 노동 조합에 있습니다.

다른 팁

아마도 당신은 일종의 것을 찾고있을 것입니다 분리 세트 데이터 구조?

이 경우에 대한 몇 가지 질문.

첫 번째 질문 :이 "스크립트" / "프로그램"이 얼마나 오래 실행해야합니까? 너무 길지 않으면 노조 조치를 수행하기 전에 이전 노조를 저장하고 캐시를 확인하는 것이 좋습니다. 요즘 기억은 비싸지 않습니다. :).

두 번째 질문 : 요소는 노조 전에 특정 순서로 요소입니까? 그렇지 않고 목록에 두 번 이상 액세스하는 경우 목록을 먼저 정렬하는 것이 매우 유용 할 수 있습니다 (예를 들어 목록 중반에만 결정을 내릴 수있는 것보다). MERGESORT 두 개의 주문 된 목록의 효율적인 조인의 강력한 기술입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top