컴퓨터공부/알고리즘 16

[펌] A* 알고리즘을 사용한 길찾기

http://family.sogang.ac.kr/%7Edeepseas/frame.files/memory/astar/astar.htm [1] - 소스코드 [Down] - 자바 Runtime [Down] : 애플릿이 실행이 안될 경우 설치, 설치후 익스플로어 재실행 A* 알고리즘의 개요A*(에이 스타) 알고리즘은 1968년에 만들어진 것으로, 탐색을 수행하는데 있어 매우 효과적인 알고리즘이며 다양한 종류의 문제들을 해결하는데 사용되어 왔다. A* 알고리즘은 출발지점에서 목표지점까지 가장 비용이 낮은(보통 가장 짧은) 경로를 찾는데, 다음과 같이 'f = g + h' 계산값을 사용하여 다음으로 이동할 경로를 결정한다. g는 goal(목표)로서, 시작노드로부터 이 노드까지 오는 데 드는 비용이다. 시작노드에서 ..

[펌] 다익스트라 알고리즘이란

먼저 다익스트라 알고리즘이란 O(N^2)만에 최단경로를 구하는 알고리즘입니다 이 알고리즘을 사용하시려면 몇개의 배열 정의부터 알아야 하는데요(저 블로그에 있는 배열을 그대로 사용하겟습니다) s = 입력받는 출발점입니다e= 입력받는 도착점입니다 data[i][j] = i정점부터 j정점까지의 거리(이건 최단거리가 아닙니다. 하나의 간선을 거쳐서 가야 합니다) 그리고 i정점과 j정점이 직접적으로 연결되어있지 않으면 MAX값을 넣어줍니다 distance[i] = s(출발점)에서 i번째 정점까지의 최단거립니다. v[i] = i번째 정점이 체크되었는지를 나타냅니다 (1 : 체크) via[i] =s정점부터 i번째 정점으로 가는 최단경로에서 i번째 경로의 바로 전 정점의 번호입니다(배열 정의가 약간 애매한듯..) 그럼..

[펌] 플로이드 알고리즘

플로이드(Floyd) 알고리즘플로이드(Floyd) 알고리즘도 다익스트라 알고리즘처럼 최단거리를 구하는 알고리즘입니다. 다른 점은 다익스트라 알고리즘이 한 점에서 출발해서 각 정점에 최단거리를 구하지만, 플로이드 알고리즘은 모든 점점에서 출발해서 출발 한 정점을 제외한 모든 정점을 도착점으로 하는 최단거리를 구하는 알고리즘입니다. 플로이드 알고리즘의 대략적인 코딩은 다음과 같이 합니다.for k:=1 to n do for i:=1 to n do for j:=1 to n do if a[i,j] > a[i,k] + a[k,j] then a[i,j] := a[i,k] + a[k,j];보시다시피 다익스트라 알고리즘보다 코딩이 훨씬 간단합니다. 다익스트라 알고리즘의 시간복잡도가 O(2n^2)인 반면,(알고리즘책에는..