레이블이 고유 한 경우 크기가 N
인 그래프의 경우 자체 루프가 없거나 각 정점 쌍 사이에 여러 개의 가장자리가 있다고 가정하면 O(N^2)
가장자리가 있습니다. 모서리 수를 E
으로합시다.
부모 그래프에서 설정된 가장자리를 해시하는 경우 하위 그래프의 가장자리를 통과하여 각각이 해시 테이블에 있는지 (원하는 경우 올바른 값으로) 확인할 수 있습니다. 각 가장자리에 대해이 작업을 한 번 수행하므로 O(E)
입니다.
이의이 (
N
꼭지점) 그래프
G
과 (
M
정점으로) 가능한 서브 그래프
G_1
을 부르 자, 당신은
G_1 is in G
을 찾고 싶어요. 레이블이 고유하지 때문에
, 당신은, 동적 프로그래밍과 같은 대신으로 하위 문제를 구축 할 수 있습니다 - 대신 O(2^N)
하위 문제, 각 서브 그래프 하나를 가지고, 당신은 O(M 2^N)
하위 문제가 - G_1
의 각 정점 일 (M
으로 정점)을 각각의 가능한 하위 그래프와 비교합니다. 기본 케이스 index = M
인과
isSubgraph(index, bitmask) =
for all vertex in G
if G[vertex] is not used (check bitmask)
and G[vertex]'s label is equal to G_1[index]'s label
and isSubgraph(index + 1, (add vertex to bitmask))
return true
return false
, 당신은 비트 마스크 (그리고 암시 적 레이블 - 주어진 가장자리 평등를 확인할 수 있습니다
G_1 is in G = isSubgraph(0, empty bitmask)
과 상태는 같은 설정됩니다 매핑). 또는 if 문 내에서 검사를 수행 할 수도 있습니다. 현재 index
을 확인하고 현재 서브 그래프 G_1[0..index]
은 G[bitmask]
(동일한 암시 적 레이블 매핑과 동일 함)과 재귀하기 전에 비교합니다.
N = 20
의 경우이 값은 충분히 빠릅니다.
(귀하의 메모를 추가하거나 DP를 사용하여 이것을 다시 작성할 수 있습니다).
당신이 언급 한이 선 그래프는 무엇입니까? 더 작은 그래프는 항상 단순한 경로라고 말하고 있습니까? – polygenelubricants
@ Jeeyoung : 그냥 fyi, 이건 하위 그래프 동형 문제 라 불립니다. 레이블을 사용하면 레이블이있는 하위 그래프 동형성 문제라고 생각합니다. –