DAG의 전 이적 감소


13

DAG가 주어지면 전이 감소 를 찾기위한 O (V + E) 알고리즘을 찾고 있습니다.

즉, 임의의 v 및 u에 대해 u에서 v에 도달 할 수 있으면 모서리를 제거한 후에도 여전히 도달 할 수 있도록 가능한 많은 모서리를 제거합니다.

이것이 표준 문제인 경우 모델 솔루션을 알려주십시오.


인용 한 wikipedia lemma에 제공된 참조를 사용할 수 없습니까?
Hendrik Jan

2
글쎄, 위키 백과에서 논의 된 알고리즘은 요청에 따라 대신 (가장 좋은 경우, 즉 비순환 그래프의 경우 로 실행됩니다. 여기서 정답은 현재 찾고있는 알고리즘이 존재하지 않을 수 있다는 것입니다.O ( V + E )O(V×E)O(V+E)
Carlos Linares López

1
당신이 요구하는 것이 존재하는지 확실하지 않다는 것에 동의했습니다. sciencedirect.com/science/article/pii/0012365X9390164O 와 같은 알고리즘이 있다면 흥미롭지 않을만한 논문이 많이 있습니다 . 즉, 동기 부여가 무엇인지 더 구체적으로 지정할 수 있다면 더 구체적인 해결책이있을 수 있습니다. 예를 들어, 그래프에 대해 다른 것을 알고 있습니까, 아니면 작동합니까? O(n(n+m))
William Macrae

어딘가에서 문제를 보았지만 추가 정보가 없었으며 문제에 오타가있을 수 있습니다.
Karan

1
DAG에서 토폴로지 정렬을 수행하지만 와 같은 하위 항목을 사용하여 도달 가능한 정점을 추적 한 다음 최신 항목부터 정렬 된 그래프, 사용되지 않는 가장자리를 제거하고 도달 기능을 보존에 의해 이동, 이것은 당신이 제거 할 수 가장자리를 최대 및 제공하지만, 나는 확실히 그것을 최대 가능성을 얻는 경우에 (그것의 아니에요 .reachable[v]=vchildrenvreachable[v]O(|E|+|V|)

답변:


8

각 정점에서 DFS를 수행하면이 문제를 해결할 수 있습니다.

  1. 각 정점 에 대해 가 의 직계 자손이 되도록 각 정점 에서 DFS를 시작하십시오 . 는 모서리입니다.uGvvu(u,v)
  2. 각 정점 들어 의 DFS로 연결할 , 에지를 제거 . v ( u , v ' )vv(u,v)

위의 전체적인 복잡성은 DFS ' 실행의 복잡성인데 , 이는 입니다.O ( N ( N + M ) )NO(N(N+M))


1
무의식적으로 이것은 질문 자체에 링크 된 Wikipedia 기사 의 알고리즘 과 동일한 복잡성 집니다. O(NM)
David Richerby

1
동의했다. 이 질문에 대한 간결한 답변이 있기 때문에 하나를 제시했습니다. 또한 솔루션은 IMO 일 가능성이 적습니다. O(N)
pratyaksh

3

O(|E|)

  1. uv
  2. u(v,u)
  3. wuv(v,w)
  4. (v,v)vv

v(v,v)v

O(|E|)


1

렘마 : 모서리 V-> Y가 있고 Y도 V 의 간접적 인 후속 작업 인 경우 (예 : V-> W-> + Y) 모서리 V-> Y는 전 이적이며 전 이적 근의 일부가 아닙니다.

방법 : 각 정점의 전이 폐쇄를 추적하여 터미널에서 초기 정점까지 역 토폴로지 순서로 작업합니다. V의 간접 후계자 세트는 V의 직계 후계자의 전이 폐쇄의 결합입니다. V의 전이 폐쇄는 간접 후계자와 직계 후임의 결합입니다.

연산:

    Initialise Visited as the empty set.
    For each vertex V of G, 
        Invoke Visit(V).

    Visit(V):
        If V is not in Visited,
            Add V to Visited, 
            Initialise Indirect as the empty set,
            For each edge V -> W in G,
                Invoke Visit(W),
                Add Closure(W) to Indirect.
            Set Closure(V) to Indirect.
            For each edge V -> W in G,
                Add W to Closure(V),
                If W is in the set Indirect,
                    Delete the edge V -> W from G.

이것은 정점 세트 (예 : 비트 맵)를 추적하는 효율적인 방법이 있다고 가정하지만이 가정은 다른 O (V + E) 알고리즘에서도 이루어 졌다고 생각합니다 .

잠재적으로 유용한 부작용은 G의 각 정점의 전이 폐쇄를 찾는 것입니다.


이전 계정에 게시 된 답변을 삭제했습니다. 그래도 두 계정을 병합하려면 도움말 센터 의 단계를 따르십시오 . 즉, 이전 계정에는 더 이상 눈에 띄는 내용이 없으므로 새 계정에 충실 할 수 있습니다.
Gilles 'SO- 악마 중지

0

동일한 문제를 해결했지만 정확히 동일하지는 않았지만 원래 연결된 정점이 여전히 연결되어 있고 새로운 연결이 이루어지지 않도록 축소 후 그래프에서 최소 가장자리를 요구했습니다. 분명한 것처럼, 감소 된 그래프를 찾는 것이 아니라 중복 에지가 몇 개나 있는지를 말하는 것입니다. 이 문제는 O (V + E)에서 해결할 수 있습니다. 설명 링크는 https://codeforces.com/blog/entry/56326 입니다. 그러나 실제로 그래프를 만들려면 O (N)보다 복잡도가 높습니다.

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