Table of Contents
그래프 이론의 Eulerian Circuits 이해
Eulerian 회로는 그래프의 모든 가장자리를 정확히 한 번 통과하고 시작 vertex로 돌아 오는 닫히는 걸음입니다. 개념은 1736 년 Leonhard Euler에 의해 구성 된 Königsberg 문제의 유명한 Seven Bridges에서 유래했습니다. Euler는 그래프의 모든 vertex가도 연결되는 경우 (방사성 vertices)이 존재한다는 것을 증명했습니다. 이 기본 결과는 그래프 이론을 위해 기초를 놓고 네트워크 분석, 결합 및 설계에 중요한 영향을 미칩니다.
G] = (]V], E])는 비접촉된 그래프가 된다. Eulerian 회로는 모든 vertex v Δ ] ]]] Graph와 동일하게 연결될 때만 존재한다.
Hierholzer의 알고리즘은 무엇입니까?
Hierholzer의 Algorithm, 1873 년 독일 mathematician Carl Hierholzer가 발표 한 것은 필요한 조건이 만족 할 때 Eulerian 회로를 건설하는 효율적인 방법입니다. 그것은 사이클의 시리즈를 찾는 회로를 구축하고 그들을 merging. 알고리즘은 선형 시간 O E)의 가장자리를 만드는 데 최적의 숫자를 만들기 위해 최적의 숫자를 만들기 위해.
키 개념
- Cycle detection: vertex에서 시작, 시작 vertex로 반환 할 때까지 사용하지 않는 가장자리를 따르십시오. 이 간단한 사이클을 형성합니다.
- Merging Cycle: 현재 회로에 베텍스가 여전히 사용되지 않은 가장자리가 있을 때, 새로운 주기는 그 베텍스에서 형성되고 회로에 삽입됩니다.
- Edge 제거: 가장자리가 사용되어, 그들은 표시되거나 수정을 방지하기 위해 제거된다.
Hierholzer의 Algorithm의 단계별 설명
알고리즘은 반복적으로 반복적으로 반복적으로 확장하여 회로를 구축할 수 있습니다. 아래는 상세한 고장입니다.
1 단계 : 시작 Vertex를 선택하십시오.
적어도 하나의 가장자리와 모든 vertex를 선택하십시오. 그래프가 연결되고 모든 정도가 균등하기 때문에, 모든 vertex가 작동됩니다. 일반적으로 알고리즘은 vertex v에서 시작합니다.
2 단계 : 사이클을 가로
현재 베텍스에서, 이웃에 사용되지 않는 가장자리를 따르십시오. 사용되지 않는 가장자리를 따라 계속 이동, 사용으로 각 가장자리를 표시, 당신은 시작 베텍스로 돌아올 때까지. 이것은 사이클을 생산 C. 사이클이 그래프의 모든 가장자리를 포함하면, 알고리즘은 종료 - 우리는 Eulerian 회로가 있습니다.
Step 3: 사용되지 않은 가장자리를 가진 Vertices를 찾아내십시오
어떤 vertex ]u에 대한 현재 회로를 스캔하면 여전히 사용하지 않는 가장자리가 있습니다. 존재하지 않는 경우, 알고리즘이 완료됩니다. 그렇지 않으면, u]]는 vertex가 될 수 있습니다.
단계 4: u]에서 새로운 사이클 구축
u에서 시작하면, 사용되지 않은 가장자리 중 주기 공정을 반복합니다. 이것은 새로운 사이클 ]C′를 생성하고 u]]]에서 끝납니다.
단계 5: 새로운 주기를 메인 회로로 옮기십시오
]C′]의 위치에 메인 회로에 u]. 결과 워크는 여전히 회로 (닫히는) 그리고 지금까지 방문한 모든 가장자리를 다룹니다. 단계로 돌아갑니다 3.
모든 vertex는 심지어도 있기 때문에 프로세스가 결코 찔린 적이 없습니다. vertex에 들어가면 항상 버텍스의 정도가 0이 될 때까지 사용하지 않는 가장자리가 될 것입니다. 알고리즘은 최종 도보가 한 번씩 정확하게 포함된다는 것을 보증합니다.
예: Eulerian 회로 구축
A, B, C, D, E. Edges : AB, AC, AD, BC, BD, CE, DE. (이는 각 vertex가 학위가있는 작은 그래프입니다 : deg (A) = 3, deg (B) = 3, deg (C) = 2, deg (D) = 3, deg (E) = 1? 그것은 심지어 학위 조건을 만족하지 않습니다. 그래프는 다음과 같습니다. 1, C, D, C, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D
Hierholzer의 알고리즘을 실행하십시오.
- Vertex 1. 가장자리를 따라 시작하십시오 : 1‐2 (사용), 2‐3 (사용), 지금 3. 사용되지 않는 가장자리 3‐4 (사용), 4‐5 (사용), 5‐3 (사용). 3로 돌아 가기, 그러나 초기 시작점이었다 1. 우리는 1으로 돌아 갔다. 실제로 알고리즘은 시작 vertex로 돌아 오는 사이클을 형성해야합니다. 제대로 추적하자 : 1에서 시작, 1‐2, 2‐3, 3 ‐3, 1 ‐3, 1 ‐3, 2 ‐3 (사용). 그 사이클을 3 ‐4 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐3 ‐
- 스캔 C1: vertex 3 사용되지 않은 가장자리. 3에서 새로운 사이클을 시작: 3‐4, 4‐5, 5‐3. 사이클 C2 = 3‐4‐5‐3.
- 베텍스 3에서 C1로 Merge C2 : 결과 회로 : 1‐2‐3‐4‐5‐3‐1. 사용되는 모든 가장자리는 Eulerian입니다.
이 예제는 알고리즘의 우아함을 보여줍니다. 주기는 발견되고 원활하게 결합됩니다.
복잡성 및 구현 고려
Hierholzer의 알고리즘은 ]O] ]V + E]]) 에버레이션 제거(예:)에 대한 애드자크리스트 표현 및 효율적인 데이터 구조를 사용하는 시간(예:)에서 실행됩니다. 알고리즘은 각 가장자리가 처리되는 것이 [FLT]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
지시 그래프를 위해 동일한 접근법은 그래프가 Eulerian (각 vertex에서 ‐ 정도를 동일)로 제공된다. 심지어도의 알고리즘 요구는 지시 사항뿐만 아니라 번역한다.
Fleury의 Algorithm과 비교
Eulerian 회로를 찾는 또 다른 유명한 알고리즘은 Fleury의 Algorithm입니다. 나머지 그래프가 연결되는 것을 보장하면서 가장자리를 횡단하여 작동하는 것은 (즉, 다리를 피하는). Fleury의 알고리즘은 O]E]2[FLT:]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Hierholzer의 알고리즘 적용
Eulerian 회로를 효율적으로 찾을 수있는 능력은 많은 실제 사용.
중국 Postman 문제
중국 Postman 문제 (도보 검사)에서 목표는 적어도 한 번에 모든 가장자리를 커버하는 가장 짧은 닫히는 산책을 찾을 수 있습니다. 이미 Eulerian 인 그래프를 들어, 솔루션은 단순히 Eulerian 회로입니다. Hierholzer의 알고리즘은 회로를 제공합니다. 비 Eulerian 그래프의 경우, 문제는 모든 도를 만들 수 있도록 가장자리를 duplicating로 감소시키고 Hierholzer의 알고리즘을 적용 할 수 있습니다.
네트워크 Routing 및 회로 설계
Eulerian 회로는 거리 스위퍼, 쓰레기 수집 및 각 링크가 정확히 한 번에 추적되어야하는 네트워크 패킷 전송에 효율적인 경로 설계에 사용됩니다. 알고리즘은 중복 여행을 최소화하는 데 도움이됩니다.
DNA 파편 회의
계산학에서, genome 집합에 de Bruijn 도표 접근은 k ‐mer 도표를 통해서 Eulerian 경로 또는 회로를 찾아내기에 의존합니다. Hierholzer의 알고리즘은 많은 모회사의 핵심 성분이고, 짧은 읽음에서 연속적인 순서의 개조를 가능하게 합니다.
컴퓨터 그래픽 및 미로 세대
Eulerian trail은 미로를 생성하고 가장자리가 펜을 들어 올리지 않고 그려야 할 특정 그래프 그림 알고리즘에 사용됩니다. 알고리즘은 최적의 건설을 제공합니다.
통합 회로 테스트
매우 큰 scale 통합 (VLSI) 디자인에서, 모든 연결을 테스트하는 것은 Eulerian 회로 문제로 모델링 할 수 있습니다, 최소화 테스터 운동.
더 읽기 및 외부 리소스
Eulerian 회로와 Hierholzer의 알고리즘에 대한 이해를 깊게하려면 다음 리소스가 권장됩니다.
- Eulerian Path – Wikipedia – 정의, 역사, 알고리즘의 종합 개요.
- Eulerian Path – CP Algorithms – C++ 구현 및 복잡성 분석에 대한 자세한 설명.
- Hierholzer의 알고리즘 – Wolfram MathWorld – 수학적인 관점.
- NetworkX: Eulerian Path Example – Python의 네트워크 분석 라이브러리를 사용하여 실제적인 데모.
- Hierholzer의 Algorithm for Directed Graph – GeeksforGeeks – 여러 언어로 구현.
관련 기사
Hierholzer의 알고리즘은 우아함, 속도 및 넓은 적용성을 위해 그래프 트래버스의 모서리스톤을 유지한다. 이 문제를 찾는 데 도움을 얻은 것은 Eulerian 회로를 건설하기 위해 직선적이고 최적의 솔루션을 제공합니다. 네트워크 경로, 조립 게놈 또는 해결 퍼즐을 설계하고 있는지 여부, 이 알고리즘은 심지어 ‐ ‐ 의성적인 구조와 그래픽을 처리하기위한 강력한 도구로 당신을 갖는다. 그것은 단지 의성적인 구조와 같은 복잡한 구조와 같은 복잡한 구조로 만들 수 있습니다.