본문 바로가기

알고리즘2

[알고리즘] 분할 정복 알고리즘(Divide-and-Conquer) - 퀵 정렬(quick sort) 분할 정복에 대한 설명은 https://cuckoobird.tistory.com/153 을 참고해주세요. 퀵 정렬 퀵 정렬은 피봇(pivot)이라 일컫는 배열의 원소(숫자)를 기준으로 피봇보다 작은 숫자들은 왼편으로, 피봇보다 큰 숫자들은 오른편에 위치하도록 분할하고, 피봇을 그 사이에 놓습니다. 퀵 정렬은 분할된 부분문제들에 대해서도 위와 동일한 과정을 순환으로 수행하여 정렬합니다. 피봇은 분할된 왼편이나 오른편 부분에 포함되지 않습니다. 피봇이 60이라면, 60은 [20, 40, 10, 30, 50] 과 [70, 90, 80] 사이에 위치하게 됩니다. 초기 배열이 { 6, 3, 11, 9, 12, 2, 8, 15, 18, 10, 7, 14 } 인 배열을 예시로 설명하겠습니다. 피봇을 중간에 있는 값으.. 2023. 10. 6.
[알고리즘] 분할 정복 알고리즘(Divide-and-Conquer) - 합병 정렬(merge sort) 분할 정복 알고리즘이란? 주어진 문제의 입력을 분할하여 문제를 해결(정복)하는 방식의 알고리즘입니다. 분할한 입력에 대하여 동일한 알고리즘을 적용하여 해를 계산합니다. 이들의 해를 취합하여 원래 문제의 해를 얻습니다. 분할 알고리즘의 분할은 부분 문제와 부분 해로 나누어 집니다. 분할된 입력에 대한 문제를 부분 문제(subproblem)라고 합니다. -> 해 계산 부분 문제의 해를 부분 해라고 합니다. 부분 문제는 더 이상 분할 할 수 없을 때까지 분할합니다. 크기가 n인 입력을 3개로 분할하고, 각각 분할된 부분 문제의 크기가 n/2일 경우의 분할의 예입니다. 총 분할한 횟수가 k라고 한다면, 처음 입력의 크기가 n이고, 분할된 그 다음의 크기는 n/2, 그 다음은 n/(2^2), ... , n/(2^.. 2023. 9. 24.