컴퓨터 알고리즘 - A* 알고리즘

최수환·2023년 6월 5일
0

컴퓨터 알고리즘

목록 보기
14/14
post-thumbnail

A* 알고리즘

  • 목적지까지 최단 경로를 찾기 위한 알고리즘이다.
  • 가중치가 있는 유향 그래프까지 가능

  • Heuristic 함수를 이용하는 것이 특징이다.
    -> 출발 지점에서 인접한 부분까지의 거리와 인접한 부분으로부터 목적지까지 거리(추정치)를 구한다.
    -> 정확하지 않더라도 대충의 추정치를 구해내는 것이다.
    -> 과대평가되지 않은 Heuristic 추정 값을 사용시, 시작 노드에서 목표 노드까지의 최단경로를 구할 수 있다.
    ( 과대평가되지 않은 Heuristic 추정 값 예시 : 유클리드 거리)
  • 다익스트라보다 효율적인 알고리즘

  • 인접 부분까지의 거리와 목적지까지의 거리 추정치의 합이 최소값인 지점에 대하여 앞에 과정을 반복한다
  • 검은색 셀은 이동하지 못한다고 가정

  • 위의 과정을 반복하다가 인접 부분과 목표지점이 같으면 종료

  • 목표 지점에서 출발하여 값이 작아지는 방향으로 출발 지점까지 연결
  • 값이 작아지는 방향이 여러개라면 여러 방향 모두 최단 경로가 된다.

  • 이를 거꾸로 가는 방향으로 이동하면 최단 경로 생성

<A* 알고리즘 구현>

  • 구현은 Heuristic 함수를 제외하고는 다익스트라와 매우 유사하다.

  • Heuristic 추정값은 하한 추정치를 사용한다. 만약 상한 추정치를 사용하면 과대평가 되어 정확한 값을 도출해내지 못한다.
    -> 정확하게 추정하지 못한다면 약하게 추정하자!!
  • 그렇다고 너무 낮게 추정해버리면 H[u]=0인 경우와 같이 다익스트라와 거의 같아진다.
    -> 이 경우는 A* 알고리즘의 효율성을 살리지 못한다
  • 도착지점에 도달하지 못하는 경우도 있음으로 while문의 종료조건에 나타내준다.
  • 현재노드에 대해서 더 짧은 거리가 있다면 해당 거리로 갱신하고 Path를 기록하는 집합에 저장한다.

  • 실제 노드에 위의 코드를 적용시켜보면 다음과 같은 주황색 경로가 구해진다.
  • 시작 지점에서 목표 지점까지의 최적 거리만 찾는다.

📒 사실 다익스트라와 매우 유사하며, 다익스트라의 성능을 개량하기 위한 알고리즘이다. Heuristic 추정치를 제데로 설정해야 다익스트라보다 효율적인 알고리즘이 된다.

profile
성실하게 열심히!

1개의 댓글

comment-user-thumbnail
2023년 6월 5일

❤️💜💚💛🧡🤎💙존나 멋있어요 오빠❤️💜💚💛🧡🤎💙

답글 달기