spotting graph cycles-간단한 설명


9

평신도 용어로 그래프에서 사이클을 찾는 방법을 이해하도록 도와 줄 수 있습니까?

나는 같은 다른 질문을 읽고 이것은 또한 및 위키 피 디아 페이지의 일부를하지만, 수학 전문 용어로 오히려 빨리 내려 보인다.

Java, 모델링 노드 및 'in'및 'out'모서리에 그래프 모델이 있으며 모델은 한 방향으로 만 연결된 노드를 알고 있으므로 리프 노드를 시작점으로 찾을 수 있습니다. 루트에서 찾은 다른 모든 노드의 목록을 유지하면서 각 "워크"에 대해 각 리프 노드에서 그래프를 다시 표시합니다. 어떤 시점에서 목록에 이미 무언가가 보이면 그래프에서주기를 찾았 음을 알 수 있습니다. 그러나 이것은 약간 단순하다고 느낍니다.

이것이 해결 된 문제라고 확신합니다. 간단한 용어로 설명 할 수 있다면 좋을 것입니다.

-에이스

답변:


6

평신도의 용어로 스포팅 그래프주기를 설명하는 가장 간단한 방법은 다음과 같습니다.

  • 먼저, 그래프가 무엇인지, 노드와 모서리가 무엇인지에 대한 기본 사항을 알고 있다고 가정합니다. 이 예에서는 모든 모서리가 단방향 인 그래프가 있다고 가정합니다.
  • 그래프를 작성하고 하나의 노드를 시작점으로 선택하십시오.
  • 일종의 컨테이너 객체를 만듭니다 (목록 또는 해시가 가장 효과적입니다). "방문"이라고합니다.
  • 두 번째 컨테이너 오브젝트 (여기서 큐가 이상적임)를 작성하고 "열기"라고합니다.
  • 시작 노드를 열기 목록에 추가하십시오.
  • 열기 목록이 비어 있지 않은 동안 반복하십시오.
    • Open에서 첫 번째 항목을 제거하고 Current라고 부릅니다.
    • 방문에 현재가 있으면주기가있는 것입니다.
    • 그렇지 않은 경우 방문한 사용자에게 현재를 추가 한 다음 현재의 아웃 바운드 에지에서 도달 할 수있는 모든 노드를 열기에 추가하십시오.
  • Open이 비어 있고 사이클이 감지되지 않으면 사이클이없는 것입니다. (최소한 시작점에서 도달 할 수있는 세트에 있지는 않습니다. 그래프에 섬이있는 경우 그래프 전체가 아닐 수도 있습니다.)

0

기본적으로 그래프 에서 폭 넓은 우선 검색 을 수행 하고 해시 맵을 사용하여 방문한 노드를 추적합니다.

언제라도 이미 방문한 노드 (해시 맵에 있음)가 발생하면 그래프에주기가 있음을 알 수 있습니다.

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