Subject

1. 풀이

42 school의 push swap 과제의 3분할 퀵정렬 풀이입니다. 풀이 과정을 바탕으로 점화식을 유도하고, 3분할 퀵정렬에 대한 커맨드 개수를 수식으로 표현합니다. 또한 해당 풀이의 최악의 경우를 보이는 것으로 문제에서 주어진 조건을 항상 만족함을 보입니다.

1) 점화식 유도.

push swap과제의 커맨드 개수를 계산하기 위해서 점화식 A(n)과 B(n)을 다음과 같이 정의합니다.

$$ A(n) : 스택\,a의\,최상단\,n개\,원소를\,정렬하는데\,필요한\,커맨드\,수. $$

$$ B(n) : 스택\,b의\,최상단\,n개\,원소를\,정렬하여\,a에\,옮기는데\,필요한\,커맨드\,수. $$

2) 점화식 풀이.

3분할 퀵정렬에 대한 점화식은 다음과 같습니다.

$$ A(n) = {5n\over 3} + A({n\over 3}) + 2 B({n\over 3}) $$

$$ B(n) = {5n\over 3} + 2A({n\over 3}) + B({n\over 3}) $$

두 점화식 사이에 대칭성이 존재하므로, 이 점을 이용하여 임의로 A(n)과 B(n)을 같다고 두고 풀 수 있습니다. 그 결과는 다음과 같습니다.

$$ A(n) = {5n\over 3} + 3A({n\over 3}) $$

우변의 A(n/3)을 계속 전개합니다. 전개 가능한 횟수는 n이 더 이상 나눠질 수 없을 때 까지 이므로, 그 횟수는 log3(n)회 전개할 수 있습니다. 그 결과는 다음과 같습니다.

$$ A(n) = {5n\over 3} + 3({5n\over 9} + 3A({n\over 9})) $$

$$ A(n) = {5n\over 3} log_3{n} + 3^{log_3{n}} \times A(1) $$