알고리즘 2

병합정렬 알고리즘

병합 정렬(merge sort)은 합병정렬으로도 불리며 시간 복잡도 $O(nlogn)$ 를 가지는 굉장히 빠른 정렬 알고리즘이다. 과정은 다음과 같다. 1. 분할 2. 정복 3. 결합 4. 복사 각 과정에 대해 하나씩 설명해 보겠다. 가장 먼저 분할은 정렬되지 않은 배열을 두 부분으로 잘라서 두 개의 부분 배열로 분할하는 과정이다. 만약 배열의 원소 개수가 홀수인 경우에는 크기가 비슷하도록 분할한다. 9개면 4개, 5개로 분할할 수 있다. 두 번째 과정은 정복이다. 정복은 분할한 각 부분 배열을 재귀적으로 병합 정렬하는 과정이다. 즉, 분할한 두 개의 배열에 대하여 또다시 분할, 정복, 결합, 복사를 거치도록 하는 것이다. 분할, 정복 두 과정을 c언어 코드로 설명하자면 다음과 같다. void merge..

정보/알고리즘 2021.10.17

A* 알고리즘(A star)

A*알고리즘은 출발 노드에서부터 목표 노드까지 가는 최단 경로를 찾아내는 그래프 탐색 알고리즘 중 하나이다. 휴리스틱 방법을 이용하여 최단 경로를 도출해낸다. -개별 노드에 대한 평가함수(각 노드의 가중치를 평가) f(n)=g(n)+h(n) f(x) : 차후 경로 도출을 위한 함수 g(x) : 출발 노드로부터 현재 노드 n까지의 경로 가중치 h(n) : 현재 노드 n으로부터 목표 노드까지의 추정 경로 가중치 -알고리즘의 과정 출발노드를 OPEN List에 삽입->OPEN List에서 pop()하여 f(n)으로비용평가->CLOSED List 삽입 (이 과정을 종료노드까지 반복) -A*알고리즘 슈도코드 pq.enqueue(start.node, g(start_node)+h(start_node))// 우선순위 ..

정보/알고리즘 2021.10.13