목록알고리즘 (12)
개발스토리
되추적(Backtracking) ● 완전 탐색을 개선한 기법 ● 후보 해들을 단계적으로 만들어 가는 과정에서 후보 해들을 평가 ● 만약 한 후보 해가 최종 해가 될 수 없다고 판단되면 탐색을 멈추고 다른 후보 해를 탐색 ● 최적화 문제와 결정 문제 해결 가능 하산 길 선택 ● 하산 길에 갈림길에 안내 표지판이 없다면?? 1. 갈림길에서 한 길을 선택한 후 그 길을 따라 계속해서 간다. 2. 길이 끊어지거나 절벽에 도달하면 갈림길로 되돌아온다. 3. 갈림길에서 다른 길을 선택해서 간다. 상태공간 트리란 무엇일까? ● 특정 알고리즘의 진행 과정을 나타낸 트리 - 노드: 한 해의 구성요소들에 대한 특정 선택 - 후보 해: 루트 노드에서 종단 노드까지의 경로 - 후보 해 중에 해가 있음 - 해가 될 가능성이 전..
탐욕 기법 소개 ● 매 번 선택할 때 마다 그 순간에 가장 좋은 선택을 함으로써 최종적인 해에 도달한다. ● 최적인 해들을 모아서 최종 해를 만들었다고 해서, 그 해가 궁극적으로 최적이라는 보장이 없다. ● 따라서 탐욕 기법은 항상 최적의 해를 만들어 내는 지를 반드시 검증해야 한다. 선택 기준 ● 선택이 실현 가능해야 한다. ● 모든 선택들 중에서 최적이라고 여겨지는 선택을 해야 한다. ● 한 번 선택하면 나중에 되돌릴 수 없다. 설계 전략 ● 비어 있는 해 모음으로 시작한다. ● 탐욕적인 기준에 따라 해 모음에 추가할 다음 해를 선택한다. ● 새 해 모음이 실현 가능한지를 확인한다. 실현 가능하다면 새 해 모음을 확정하고 아니면 선택한 해를 버린다. ● 새 해 모음이 최종 해라면 종료한다. 아니면 2..
N(> 0)개의 계단을 한 번에 하나 혹은 둘씩 올라갈 수 있다. N개의 계단을 올라가는 방법의 수를 구하려고 한다. 1. 1개의 계단을 올라가는 방법은 몇 가지인가? - 1가지 2. 2개의 계단을 올라가는 방법은 몇 가지인가? - 2가지 3. 3개의 계단을 올라가는 방법은 몇 가지인가? - 3가지 4. N(> 0)개의 계단을 올라가는 방법의 수에 대한 점화식을 작성하라. - N이 1일 때, F(N) = 1 - N이 2일 때, F(N) = 2 - Otherwise, F(N) = F(N-1) + F(N-2) //피보나치 5. 4번의 점화식을 사용하여 N(> 0)개의 계단을 올라가는 방법의 수를 구하는 재귀 알고리즘을 작성하라. - 알고리즘 countStair(N) // 입력값 : N(0보다 큰 자연수) /..
빠른 정렬(Quicksort) 분할 정복 알고리즘의 일종으로, 평균적으로 매우 빠른 수행 속도를 자랑한다. - 평균 시간복잡도: θ(n logn) - 최악 시간복잡도: θ(n^2) 빠른 정렬의 진행 과정 아래의 배열이 있다. 여기서 pivot이라 불리는 기준 값을 하나 정한다. 보통 맨 앞이나 중앙을 선택한다. 나는 중앙을 pivot으로 두겠다. 그 다음, pivot을 제외한 나머지에서 가장 왼쪽은 left, 가장 오른쪽은 right로 둔다. left와 right는 pivot과 비교한다. left는 pivot보다 큰 수를 만나면, right는 pivot보다 작은 수를 만나면 대기한 뒤 서로 교환한다. 이렇게 left와 right가 움직이다가 left가 right 오른쪽에 위치하면 그만둔다. 단, piv..