Arian Soleimanzadeh
  • 홈
  • 블로그
  • 팟캐스트
  • 비디오
  • 라이브러리
  • 문의
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
패널•빠른 문의

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

상담 예약

짧은 메시지를 남겨주세요 — 가능한 한 빠르게 답변드리겠습니다.

LinkedIn빠른 응답
홈/아티클/Hamiltonian Path와 Cycle: 모든 정점을 정확히 한 번 방문하기
AlgorithmsGraph Algorithms아티클

Hamiltonian Path와 Cycle: 모든 정점을 정확히 한 번 방문하기

Hamiltonian Path와 Cycle의 개념, Backtracking, Bitmask DP, 복잡도, Eulerian 및 TSP와의 차이를 설명합니다.

2026년 8월 21일9 분 읽기10 조회수
#Graph#Algorithms#Backtracking#JavaScript#TypeScript#Hamiltonian Path#Hamiltonian Cycle

Arian Soleimanzadeh

Software Engineer & Researcher

Hamiltonian Path와 Cycle 시각 가이드

Arian Soleimanzadeh

AI · 코드 · 제품

연구 + 엔지니어링
이 페이지에서
Path와 Cycle의 차이Eulerian Path와의 차이TSP와의 관계BacktrackingJavaScript 예제복잡도문제의 난이도실제 활용언제 사용하나?정리

Hamiltonian Path는 그래프의 모든 정점을 정확히 한 번씩 방문하는 경로입니다.

Hamiltonian Cycle은 여기에 마지막 정점에서 시작 정점으로 돌아오는 조건이 추가된 순환 경로입니다.

Path와 Cycle의 차이

Hamiltonian Path:

Code
1
A → B → C → D

Hamiltonian Cycle:

Code
1
A → B → C → D → A

Eulerian Path와의 차이

Hamiltonian 문제는 정점에 초점을 둡니다.

Code
1
모든 Vertex를 정확히 한 번

Eulerian 문제는 간선에 초점을 둡니다.

Code
1
모든 Edge를 정확히 한 번

TSP와의 관계

Hamiltonian Cycle은 가능한 순환 경로의 존재를 묻습니다.

TSP는 가중치를 추가하여 가능한 Hamiltonian Cycle 중 최소 비용을 찾습니다.

Backtracking

사용하지 않은 이웃을 선택하고 재귀적으로 진행합니다.

막다른 경로에 도달하면 이전 선택을 취소하고 다른 후보를 시도합니다.

JavaScript 예제

JavaScript
1234567891011121314151617181920212223242526272829303132
function findHamiltonianPath(graph) {
  const nodes = Object.keys(graph);

  function search(current, path, used) {
    if (path.length === nodes.length) {
      return [...path];
    }

    for (const next of graph[current] ?? []) {
      if (used.has(next)) continue;

      used.add(next);
      path.push(next);

      const result = search(next, path, used);

      if (result) return result;

      path.pop();
      used.delete(next);
    }

    return null;
  }

  for (const start of nodes) {
    const result = search(start, [start], new Set([start]));
    if (result) return result;
  }

  return null;
}

복잡도

단순 Backtracking의 최악 시간 복잡도는 대략:

Code
1
O(V!)

입니다.

Bitmask Dynamic Programming을 사용하면 약:

Code
1
O(V² × 2^V)

으로 개선할 수 있지만 여전히 지수 시간입니다.

문제의 난이도

Hamiltonian Path와 Hamiltonian Cycle의 결정 문제는 대표적인 NP-Complete 문제입니다.

실제 활용

  • 중복 없는 방문 순서
  • Route Sequencing
  • 그래프 퍼즐
  • TSP의 구조적 기반
  • 작업 순서 설계

언제 사용하나?

모든 정점을 정확히 한 번 사용해야 하고, 그러한 순서의 존재나 실제 순서를 찾는 것이 핵심일 때 적합합니다.

정리

Hamiltonian은 정점을, Eulerian은 간선을 중심으로 합니다. 작은 그래프에서는 Backtracking이 실용적이지만 큰 그래프에서는 DP, Pruning 또는 특수 알고리즘이 필요합니다.

이 페이지에서
Path와 Cycle의 차이Eulerian Path와의 차이TSP와의 관계BacktrackingJavaScript 예제복잡도문제의 난이도실제 활용언제 사용하나?정리

아티클 정보

게시 정보, 읽기 시간 및 조회 데이터입니다.

게시일

2026년 8월 21일

업데이트

2026년 10월 25일

읽기 시간

9 분 읽기

조회수

10

작성자

Arian Soleimanzadeh

이전 아티클

Eulerian Path와 Circuit: 모든 간선을 정확히 한 번 사용하기

다음 아티클

Travelling Salesman Problem(TSP): Brute Force부터 Dynamic Programming까지

Arian Soleimanzadeh

현대적인 웹 엔지니어링, UI 시스템, 실용적인 AI 제품에 집중한 개인 포트폴리오 — 깨끗한 코드, 명확한 디자인.

빠른 링크

  • 소개
  • 블로그
  • 라이브러리
  • 문의

문의

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

가능 시간: 평일

보통 다음 시간 내에 답변합니다 24시간.

뉴스레터

글, 프로젝트, 새 릴리스에 대한 업데이트를 받아보세요.

© 2026 ariansoleimanzadeh.dev — 모든 권리 보유.

LinkedIn