SlideShare una empresa de Scribd logo
1 de 36
2010/11/13
Devrookie 엠에스박( 박민수 )
 그래프 순회 복습
 A*의 개요
 A*의 특징
 A*의 적용
 A*의 약점
 Q & A
 참고자료
 Depth-First Search( 깊이 우선 탐색 )
1 4 2 3
5
1 5목표
시작
도착
거리 숫자
 Breadth-First Search( 너비 우선 탐색 )
1 4
5
1 5목표
시작
도착
거리 숫자
 Dijkstra Algorithm
 각 노드사이의 거리를 저장하여 최단거리를 구
한다.
 특정 노드까지 거리의 합을 저장하고 다른 경로
와 비교하여 노드 이동때 마다 최단거리의 노드
를 구한다.
 구해진 경로로 가면 최단거리가 된다.
 Dijkstra Algorithm
1 5
1 5목표
시작
도착
거리 숫자
 Best-First Search
 휴리스틱에 따라 가장 좋은 경로에 있다고
판단되는 노드로 이동한다.
 방문한 곳은 가지 않는다.
 도착점에 도달하면 알고리즘을 종료한다.
 Best-First Search
2 3 4
2 5목표
시작
도착
거리 숫자
휴리스틱 (숫자)
1 5
 Best-First Search
 휴리스틱을 기반으로 찾아낸다고 최적의 값이
나오는 것은 아니다.
2 3 4 1 5
거리 : 5 + 4 + 3 + 3 = 15
2 4 1 5
거리 : 3 + 3 + 3 = 9
 Peter Hart, Nils Nilsson, Bertram Raphael
가 1968년에 만든 그래프 순회 알고리즘이
다.
 Edsger Dijkstra가 1959년에 만든 알고리
즘의 확장판이다.
 A* 알고리즘은 Best-First 검색을 이용해 시
작점에서 도착점까지의 가장 적은 비용을
사용하는 경로를 찾아낸다.
 조사하지 않은 노드중에서 가장 효율적이
라고 판단되는 노드로 찾는다.
 찾아진 노드가 도착점이면 종료하고
아니면 인접한 다른 노드들에서 찾는다.
 조사한 노드들은 Close List에 담고
조사하지 않은 노드들은 Open List에 담는
다.
 알고리즘의 시작
 Close List는 비어있다.
 Open List는 시작점만 들어있다.
 알고리즘의 흐름
 Open List에 있는 노드들 중 가장 효율적인 노드를
찾고 도착점인지 비교한다.
 아니라면 그 노드와 인접한 노드가 Close List에 있
으면 무시하고 Open List에 있으면 그 노드까지의
경로 효율을 다시 계산해 더 효율적이면 갱신한다.
 효율적인 노드를 찾는 방법
 시작점에서 해당 노드까지 가는 가장 적은 비용
▪ CostFromStart
 해당 노드에서 도착점까지 가는 가장 적은 비용
▪ CostToGoal
 이 두 비용의 합이 제일 적은 노드가 효율적이
다.
 의사코드
 Open List : Priority Queue
 Close List : List
StartNode.Location = StartLocation;
StartNode.CostFromStart = 0;
StartNode.CostToGoal = PathCostEstimate();
StartNode.Parent = NULL;
OpenList.push( StartNode );
 의사코드
while( !OpenList.empty() ) {
Node = OpenList.pop(); // 최저의 Cost
if( Node == Goal )
return true;
else
인접한 노드들 추가
CloseList.push( Node );
}
return false;
 의사코드( 인접한 노드 추가 )
for ( 인접한 노드들 ) {
if(새로운 노드가 CloseList나 OpenList에 있는데
비용이 최저비용 보다 크면 ){
무시한다.
}
}
else {
새로운 노드를 초기화 해준다.
새로운 노드가 CloseList에 있으면 OpenList로 옮긴다.
새로운 노드가 OpenList에 있으면 갱신해준다.
if( 새로운 노드가 CloseList와 OpenList에 없으면 )
OpenList에 새로운 노드를 넣어준다.
}
}
 경로가 존재한다면 하나의 경로를 찾는다.
 경로가 존재하지 않는다면 모든 경로를 찾는
다.
 최적의 경로를 찾는다. ( 비용 계산이 올바르
면 )
 휴리스틱을 효율적으로 사용한다.
 평균적으로 빠른 성능을 보인다.
 노드의 표현
 A*를 게임에 적용하려면 게임의 길을 그래프로
표현해야 한다.
 길을 찾는 유닛에 대해 방향, 속도등을 고려하
고
지형의 속성에 대해서도 고려하면 좀 더 지능적
인
길찾기가 가능하다.
 노드의 표현
 공간 분할 정사각형 격자 쿼드 트리
볼록 다각형 가시점 일반화된 원통
 노드의 표현
 공간 분할
▪ 정사각형 격자
▪ 가장 간단한 방법이다.
▪ 공간을 동일한 크기의 정사각형 격자로 분할한다.
▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다.
▪ 하나의 정사각형 격자 하나가 한 속성을 나타내게 하는게 좋
다.
 노드의 표현
 공간 분할
▪ 쿼드 트리
▪ 공간을 서로 다른 크기의 정사각형으로 분할한다.
▪ 하나의 사각형을 점점 더 작은 사각형으로 분할한다.
▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다.
▪ 사각형의 크기가 클 수록( 상위 노드 일수록 ) 검색이 빠르다.
 노드의 표현
 공간 분할
▪ 볼록 다각형
▪ 공간을 볼록 다각형으로 분할한다.
▪ C-Cell : 각 정점과 가시점을 연결한 선으로 볼록 다각형을 만
든다.
▪ 최대 영역 해체 : 정점들을 연결하고 그 선중 짧은 것을 선택한
다.
▪ 네비게이션 메쉬 : 메쉬에 정보를 기록해 둔다.
 노드의 표현
 공간 분할
▪ 가시점
▪ 공간을 분할하지 않고 직접 위치를 결정한다.
▪ 각 장애물의 볼록 정점과 약간 떨어진 위치를 검색 위치로 한
다.
▪ 각 검색 위치 사이의 평균을 이용해 검색 위치를 더 생성하는
등
검색 위치가 많이 잘 배치 될 수록 부드러운 길찾기를 하게 된
다.
 노드의 표현
 공간 분할
▪ 일반화된 원통
▪ 이웃하는 장애물 사이에 원통을 둔다.
▪ 이 원통들을 이은 선들의 교점을 검색 위치로 한다.
 노드의 표현
 공간 분할
▪ 모든 곳들의 길을 잘 찾는지 지속적인 테스트가 필요
하다.
▪ 되도록 적은 검색 위치를 두고 모든 곳에 길찾기를 할
수 있게 하는 것이 좋다.
▪ 이동이 부드럽게 보일 정도는 검색 위치를 두어야 한
다.
 노드의 표현
 이웃한 노드
▪ 사각형 격자면 주위의 네칸의 노드들.
▪ 인덱스의 이동으로 쉽게 접근이 가능하다.
▪ 아니면 선으로 연결된 노드들.
▪ 접근이 쉽게 이웃 정보들을 자료구조에 저장해 놓는게 좋다.
 노드의 표현
 비용
▪ 이동 거리
▪ 걸리는 시간
▪ 소비한 이동력
▪ 소비한 연료
 노드의 표현
 비용 계산
▪ 출발 지점과 도착 지점
▪ 유닛의 타입
 비용 저장
▪ 이웃 정보와 같이 저장해 두는 것이 이상적이다.
 노드의 표현
 추정
▪ 최적의 경로를 찾기 위해서는 비용을 과대평가하지
말 것.
▪ 맵 상의 최단 거리에 단위 거리당 최소 지형 비용을
적용.
▪ 검색 속도를 높이기 위해서는 적절한 휴리스틱 가중
치를
두어야 한다.
 노드의 표현
 추정
 노드의 표현
 추정
 A*도 막 만들고 적용하면 게임에서 사용하
기 힘들 수 있다.
 맵의 크기가 크면 Open List, Close List가
커져서 메모리를 많이 사용하게 된다.
 맵의 크기가 크면 A*를 위해 CPU가 많이
사용될 것이다.
 도달할 수 없는 길을 다 돌아봐야 알 수 있
다.
 미리 갈 수 있나 없나를 간단하게 판단하고 있
다면 A*를 계산하는게 효율적이다.
 GPG1 – 3.3 A* 길찾기 알고리즘의 기초
 http://en.wikipedia.org/wiki/A*_search_algorithm – A* Wikipedia
 http://www.policyalmanac.org/games/aStarTutorial.htm
 http://theory.stanford.edu/~amitp/GameProgramming/
 http://redcarrot.tistory.com/45
 http://sonia-searchalgorithms.blogspot.com/2008_04_01_archive.html
 http://blog.naver.com/nsunlee?Redirect=Log&logNo=130048748400
The End

Más contenido relacionado

La actualidad más candente

Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
devCAT Studio, NEXON
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
KyeongWon Koo
 

La actualidad más candente (20)

[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Memory & object pooling
Memory & object poolingMemory & object pooling
Memory & object pooling
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편Python 게임서버 안녕하십니까 : RPC framework 편
Python 게임서버 안녕하십니까 : RPC framework 편
 
예외처리가이드
예외처리가이드예외처리가이드
예외처리가이드
 
게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv게임서버프로그래밍 #2 - IOCP Adv
게임서버프로그래밍 #2 - IOCP Adv
 
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
잘 알려지지 않은 숨은 진주, Winsock API - WSAPoll, Fast Loopback
 
Pytorch Implementation : 파일을 어떻게 나눠야할까?
Pytorch Implementation : 파일을 어떻게 나눠야할까?Pytorch Implementation : 파일을 어떻게 나눠야할까?
Pytorch Implementation : 파일을 어떻게 나눠야할까?
 
게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP게임서버프로그래밍 #1 - IOCP
게임서버프로그래밍 #1 - IOCP
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Fiberの使いどころ
Fiberの使いどころFiberの使いどころ
Fiberの使いどころ
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
An Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL databaseAn Introduction to REDIS NoSQL database
An Introduction to REDIS NoSQL database
 
TBB 소개
TBB 소개TBB 소개
TBB 소개
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
MySQL: Indexing for Better Performance
MySQL: Indexing for Better PerformanceMySQL: Indexing for Better Performance
MySQL: Indexing for Better Performance
 
Percona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimizationPercona Live 2012PPT: MySQL Query optimization
Percona Live 2012PPT: MySQL Query optimization
 
Why Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebWhy Task Queues - ComoRichWeb
Why Task Queues - ComoRichWeb
 

Similar a [1113 박민수]a star_알고리즘 (6)

5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)5장 그래프의 비밀 (Programming Game AI by Example)
5장 그래프의 비밀 (Programming Game AI by Example)
 
다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘다익스트라 최단 거리 알고리즘
다익스트라 최단 거리 알고리즘
 
자료구조 트리 보고서
자료구조 트리 보고서자료구조 트리 보고서
자료구조 트리 보고서
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
2012 Ds 04
2012 Ds 042012 Ds 04
2012 Ds 04
 
자료구조 04 최종 보고서
자료구조 04 최종 보고서자료구조 04 최종 보고서
자료구조 04 최종 보고서
 

Más de MoonLightMS (8)

네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)네트워크 스터디(Tcp 소켓 프로그래밍)
네트워크 스터디(Tcp 소켓 프로그래밍)
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑
 
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
[Gpg1권 박민수] 4.4 빠른 원통 절두체 교차 판정
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
Assert에 대해서
Assert에 대해서Assert에 대해서
Assert에 대해서
 

[1113 박민수]a star_알고리즘

  • 2.  그래프 순회 복습  A*의 개요  A*의 특징  A*의 적용  A*의 약점  Q & A  참고자료
  • 3.  Depth-First Search( 깊이 우선 탐색 ) 1 4 2 3 5 1 5목표 시작 도착 거리 숫자
  • 4.  Breadth-First Search( 너비 우선 탐색 ) 1 4 5 1 5목표 시작 도착 거리 숫자
  • 5.  Dijkstra Algorithm  각 노드사이의 거리를 저장하여 최단거리를 구 한다.  특정 노드까지 거리의 합을 저장하고 다른 경로 와 비교하여 노드 이동때 마다 최단거리의 노드 를 구한다.  구해진 경로로 가면 최단거리가 된다.
  • 6.  Dijkstra Algorithm 1 5 1 5목표 시작 도착 거리 숫자
  • 7.  Best-First Search  휴리스틱에 따라 가장 좋은 경로에 있다고 판단되는 노드로 이동한다.  방문한 곳은 가지 않는다.  도착점에 도달하면 알고리즘을 종료한다.
  • 8.  Best-First Search 2 3 4 2 5목표 시작 도착 거리 숫자 휴리스틱 (숫자) 1 5
  • 9.  Best-First Search  휴리스틱을 기반으로 찾아낸다고 최적의 값이 나오는 것은 아니다. 2 3 4 1 5 거리 : 5 + 4 + 3 + 3 = 15 2 4 1 5 거리 : 3 + 3 + 3 = 9
  • 10.  Peter Hart, Nils Nilsson, Bertram Raphael 가 1968년에 만든 그래프 순회 알고리즘이 다.  Edsger Dijkstra가 1959년에 만든 알고리 즘의 확장판이다.  A* 알고리즘은 Best-First 검색을 이용해 시 작점에서 도착점까지의 가장 적은 비용을 사용하는 경로를 찾아낸다.
  • 11.  조사하지 않은 노드중에서 가장 효율적이 라고 판단되는 노드로 찾는다.  찾아진 노드가 도착점이면 종료하고 아니면 인접한 다른 노드들에서 찾는다.  조사한 노드들은 Close List에 담고 조사하지 않은 노드들은 Open List에 담는 다.
  • 12.  알고리즘의 시작  Close List는 비어있다.  Open List는 시작점만 들어있다.  알고리즘의 흐름  Open List에 있는 노드들 중 가장 효율적인 노드를 찾고 도착점인지 비교한다.  아니라면 그 노드와 인접한 노드가 Close List에 있 으면 무시하고 Open List에 있으면 그 노드까지의 경로 효율을 다시 계산해 더 효율적이면 갱신한다.
  • 13.  효율적인 노드를 찾는 방법  시작점에서 해당 노드까지 가는 가장 적은 비용 ▪ CostFromStart  해당 노드에서 도착점까지 가는 가장 적은 비용 ▪ CostToGoal  이 두 비용의 합이 제일 적은 노드가 효율적이 다.
  • 14.  의사코드  Open List : Priority Queue  Close List : List StartNode.Location = StartLocation; StartNode.CostFromStart = 0; StartNode.CostToGoal = PathCostEstimate(); StartNode.Parent = NULL; OpenList.push( StartNode );
  • 15.  의사코드 while( !OpenList.empty() ) { Node = OpenList.pop(); // 최저의 Cost if( Node == Goal ) return true; else 인접한 노드들 추가 CloseList.push( Node ); } return false;
  • 16.  의사코드( 인접한 노드 추가 ) for ( 인접한 노드들 ) { if(새로운 노드가 CloseList나 OpenList에 있는데 비용이 최저비용 보다 크면 ){ 무시한다. } } else { 새로운 노드를 초기화 해준다. 새로운 노드가 CloseList에 있으면 OpenList로 옮긴다. 새로운 노드가 OpenList에 있으면 갱신해준다. if( 새로운 노드가 CloseList와 OpenList에 없으면 ) OpenList에 새로운 노드를 넣어준다. } }
  • 17.  경로가 존재한다면 하나의 경로를 찾는다.  경로가 존재하지 않는다면 모든 경로를 찾는 다.  최적의 경로를 찾는다. ( 비용 계산이 올바르 면 )  휴리스틱을 효율적으로 사용한다.  평균적으로 빠른 성능을 보인다.
  • 18.  노드의 표현  A*를 게임에 적용하려면 게임의 길을 그래프로 표현해야 한다.  길을 찾는 유닛에 대해 방향, 속도등을 고려하 고 지형의 속성에 대해서도 고려하면 좀 더 지능적 인 길찾기가 가능하다.
  • 19.  노드의 표현  공간 분할 정사각형 격자 쿼드 트리 볼록 다각형 가시점 일반화된 원통
  • 20.  노드의 표현  공간 분할 ▪ 정사각형 격자 ▪ 가장 간단한 방법이다. ▪ 공간을 동일한 크기의 정사각형 격자로 분할한다. ▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다. ▪ 하나의 정사각형 격자 하나가 한 속성을 나타내게 하는게 좋 다.
  • 21.  노드의 표현  공간 분할 ▪ 쿼드 트리 ▪ 공간을 서로 다른 크기의 정사각형으로 분할한다. ▪ 하나의 사각형을 점점 더 작은 사각형으로 분할한다. ▪ 검색 위치는 정사각형 중심 혹은 모서리등 적절히 정한다. ▪ 사각형의 크기가 클 수록( 상위 노드 일수록 ) 검색이 빠르다.
  • 22.  노드의 표현  공간 분할 ▪ 볼록 다각형 ▪ 공간을 볼록 다각형으로 분할한다. ▪ C-Cell : 각 정점과 가시점을 연결한 선으로 볼록 다각형을 만 든다. ▪ 최대 영역 해체 : 정점들을 연결하고 그 선중 짧은 것을 선택한 다. ▪ 네비게이션 메쉬 : 메쉬에 정보를 기록해 둔다.
  • 23.  노드의 표현  공간 분할 ▪ 가시점 ▪ 공간을 분할하지 않고 직접 위치를 결정한다. ▪ 각 장애물의 볼록 정점과 약간 떨어진 위치를 검색 위치로 한 다. ▪ 각 검색 위치 사이의 평균을 이용해 검색 위치를 더 생성하는 등 검색 위치가 많이 잘 배치 될 수록 부드러운 길찾기를 하게 된 다.
  • 24.  노드의 표현  공간 분할 ▪ 일반화된 원통 ▪ 이웃하는 장애물 사이에 원통을 둔다. ▪ 이 원통들을 이은 선들의 교점을 검색 위치로 한다.
  • 25.  노드의 표현  공간 분할 ▪ 모든 곳들의 길을 잘 찾는지 지속적인 테스트가 필요 하다. ▪ 되도록 적은 검색 위치를 두고 모든 곳에 길찾기를 할 수 있게 하는 것이 좋다. ▪ 이동이 부드럽게 보일 정도는 검색 위치를 두어야 한 다.
  • 26.  노드의 표현  이웃한 노드 ▪ 사각형 격자면 주위의 네칸의 노드들. ▪ 인덱스의 이동으로 쉽게 접근이 가능하다. ▪ 아니면 선으로 연결된 노드들. ▪ 접근이 쉽게 이웃 정보들을 자료구조에 저장해 놓는게 좋다.
  • 27.  노드의 표현  비용 ▪ 이동 거리 ▪ 걸리는 시간 ▪ 소비한 이동력 ▪ 소비한 연료
  • 28.  노드의 표현  비용 계산 ▪ 출발 지점과 도착 지점 ▪ 유닛의 타입  비용 저장 ▪ 이웃 정보와 같이 저장해 두는 것이 이상적이다.
  • 29.  노드의 표현  추정 ▪ 최적의 경로를 찾기 위해서는 비용을 과대평가하지 말 것. ▪ 맵 상의 최단 거리에 단위 거리당 최소 지형 비용을 적용. ▪ 검색 속도를 높이기 위해서는 적절한 휴리스틱 가중 치를 두어야 한다.
  • 32.  A*도 막 만들고 적용하면 게임에서 사용하 기 힘들 수 있다.  맵의 크기가 크면 Open List, Close List가 커져서 메모리를 많이 사용하게 된다.  맵의 크기가 크면 A*를 위해 CPU가 많이 사용될 것이다.
  • 33.  도달할 수 없는 길을 다 돌아봐야 알 수 있 다.  미리 갈 수 있나 없나를 간단하게 판단하고 있 다면 A*를 계산하는게 효율적이다.
  • 34.
  • 35.  GPG1 – 3.3 A* 길찾기 알고리즘의 기초  http://en.wikipedia.org/wiki/A*_search_algorithm – A* Wikipedia  http://www.policyalmanac.org/games/aStarTutorial.htm  http://theory.stanford.edu/~amitp/GameProgramming/  http://redcarrot.tistory.com/45  http://sonia-searchalgorithms.blogspot.com/2008_04_01_archive.html  http://blog.naver.com/nsunlee?Redirect=Log&logNo=130048748400