재귀식을 풀기 위해 초기 조건을 T(1)=1로 가정하고, n ~ 2까지의 재귀식을 구하면 T(n)=T(n−1)+1 T(n−1)=T(n−2)+1 ... T(2)=T(1)+1
이므로 각 식을 모두 더하면 T(n)+T(n−1)+...+T(2)=T(n−1)+T(n−2)+...+T(1)+1×(n−1)
이고 다시한번 정리하면 T(n)=T(1)+(n−1)이다. 이때, 초기조건에 의해 T(1)=1이기 때문에 T(n)=1+n−1=n이다.
이를 O−notation으로 나타내면 T(n)=O(n)이다.
문제 2
재귀식을 풀기 위해 초기 조건을 T(1)=1로 가정하고, n ~ 2까지의 재귀식을 구하면 T(n)=T(n−1)+n T(n−1)=T(n−2)+(n−1) T(n−2)=T(n−3)+(n−2) ... T(2)=T(1)+2
이므로 각 식을 모두 더하면 T(n)+T(n−1)+T(n−2)+...+T(2)=T(n−1)+T(n−2)+T(n−3)+...+T(1)+n+(n−1)+(n−2)+...+2
양변을 다시한번 정리하고 T(1)을 대입하면 T(n)=T(1)+2n(n+1)−1=2n(n+1)이다.
이를 O−notation으로 나타내면 T(n)=O(n2)이다.
문제 3
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면 T(n)=T(n−1)+logn T(n−1)=T(n−2)+log(n−1) T(n−2)=T(n−3)+log(n−2) ... T(2)=T(1)+log2
이므로 각 식을 모두 더하면 T(n)+T(n−1)+T(n−2)+...+T(2)=T(n−1)+T(n−2)+T(n−3)+...+T(1)+logn+log(n−1)+log(n−2)+...+log2
양변을 다시한번 정리하고 T(1)=C을 대입하면 T(n)=C+logn+log(n−1)+...+log2=C+log(1⋅2⋅3⋅...⋅n)=C+log(1n!)=C+log(n!)
스털링의 근사에 의해 log(n!)≈nlogn−n이므로
이를 O−notation으로 나타내면 T(n)=O(nlogn)이다.
문제 4
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면 T(n)=T(2n)+1
이고 T(2n)=T(4n)+1 T(n)=T(2n)+1
이므로 두식을 더하여 양변을 한번 정리하면 T(n)=T(4n)+1+1
이므로 이를 일반화 하면, k번째에서 T(n)=T(2kn)+k
이므로 초기 조건을 사용하기 위해 2kn=1이 되는 조건을 찾으면 n=2k이고 이는 k=log2n과 같다. 그렇기에 이를 사용하면 T(n)=C+log2n이므로 O−notation으로 나타내면 O(logn)이다.
문제 5
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면
첫 번째 과정에서 T(n)=T(2n)+n
두 번째 과정에서 T(2n)=T(4n)+2n T(n)=T(2n)+n
에 의해 T(n)=T(4n)+2n+n
세 번째 과정에서 T(4n)=T(8n)+4n T(2n)=T(4n)+2n T(n)=T(2n)+n
에 의해 T(n)=T(8n)+4n+2n+n
이 과정을 일반화하면 T(n)=T(2kn)+2k−1n+2k−2n+...+2n+n
이고 초기 조건을 사용하기 위해 2kn=1이라고 한다면 2k=n이고 k=log2n이다. 또한 여기서 우변의 2k−1n+2k−2n+...+2n+n을 정리하면 S=2k−1n+2k−2n+...+2n+n 21×S=2kn+2k−1n+...+4n+2n
이므로 차를 계산하면 21×S=n−2kn=n−1 S=2n−2
이기 때문에 T(n)=T(1)+2n−2=C+2n이므로 T(n)=O(n)이므로 시간 복잡도는 O(n)이다.
문제 6
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면
첫 번째 과정에서 T(n)=2T(2n)+n
두 번째 과정에서 T(n)=2T(2n)+n T(2n)=2T(4n)+2n
위에 식에 아래 식을 대입하면 T(n)=2T{2T(4n)+2n}+n=4T(4n)+2n
세 번째 과정에서 T(4n)=2T(8n)+4n
위에 식의 두 번째 과정에서 얻은 식에 대입하면 T(n)=4{2T(8n)+4n}+2n T(n)=8T(8n)+3n
이므로 이를 일반화 시키면 k번째 과정에서 T(n)=2kT(2kn)+kn
이므로 초기조건을 사용하기 위해 2kn=1이 되기 위해서는 n=2k이고 k=log2n이다. 대입해보면 T(n)=2log2nT(1)+nlog2n=nC+nlog2n이므로 O−notation으로 나타내면 O(nlogn)이다.
문제 7
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면
첫 번째 과정에서 T(n)=3T(2n)+n
두 번째 과정에서 T(2n)=3T(4n)+2n
첫 번째 식에 대입하면 T(n)=3{3T(4n)+2n}+n=9T(4n)+n+23n
세 번째 과정에서 T(n)=9T(4n)+n+23n T(4n)=3T(8n)+4n
두번째 식을 대입하면 T(n)=9{3T(8n)+4n}+n+23n=27T(8n)+n+23n+49n
이를 일반화 시키면 k번째 식에 대해서 T(n)=3kT(2kn)+n∑i=0k−12i3i
이므로 초기조건을 사용하기 위해 T(1)인 상황을 찾으면 2kn=1이기 때문에 k=log2n이다. 이를 대입하면 T(n)=3log2nT(1)+n∑i=0log2n−12i3i
기하급수 수열의 합의 계산에 의해 S=∑i=0m−1ri=r−1rm−1이므로 ∑i=0k−1(23)i=23−1(23)k−1=2((23)k−1)이므로 k=log2n를 대입하면 (23)k=(23)log2n=(2log223)log2n=nlog223이기 때문에 ∑i=0k−1(23)i=2(nlog223−1)이고 최종적으로 초기조건을 사용하면 T(n)=nlog23C+n⋅2(nlog223−1)=nlog23C+2n1+log223−2n이므로 주요항만 추출해서 O−notation으로 표현하면 O(nlog23)이다.
문제 8
재귀식을 풀기 위해 초기 조건을 T(1)=C(상수)로 가정하고 재귀식을 풀면
첫 번째 과정에서 T(n)=T(n−1)+n1
두 번째 과정에서 T(n−1)=T(n−2)+n−11
첫 번째 식과 더해서 정리하면 T(n)=T(n−2)+n−11+n1
세 번재 과정에서 T(n−2)=T(n−3)+n−21
이를 첫 번째와 두 번째 식과 더해서 정리하면 T(n)=T(n−3)+n−21+n−11+n1
이므로 이를 일반화하여 정리하고 초기 조건을 대입하면 T(n)=T(1)+∑2nk1=C+∑2nk1 ∑1nk1은 조화급수의 합에 의해 ∑1nk1≈lnn이므로 logn과 비례한다고 할 수 있다.
그렇기에 O−notation으로 표현하면 O(logn)이다.
문제 9
각 재귀식의 각 단계를 계산하면, T(2n)=T(4n)+T(8n)+T(16n)+T(32n)+1 T(4n)=T(8n)+T(16n)+T(32n)+T(64n)+1 T(8n)=T(16n)+T(32n)+T(64n)+T(128n)+1 T(16n)=T(32n)+T(64n)+T(128n)+T(256n)+1
이므로 이를 모두 합치면 T(n)=T(2n)+T(4n)+T(8n)+T(16n)+1=[T(4n)+T(8n)+T(16n)+T(32n)+1]+[T(8n)+T(16n)+T(32n)+T(64n)+1]+[T(16n)+T(32n)+T(64n)+T(128n)+1]+[T(32n)+T(64n)+T(128n)+T(256n)+1]
여기서 각 항이 지수적으로 증가하므로 전체 항의 개수는 logn개로 추정할 수 있다. 그러므로 재귀호출의 수는 대략 O(logn)이 된다.
문제 10
n=2k이라고 하면 T(n)=n⋅T(n)+n에서 T(2k)=22k⋅T(22k)+2k이므로 각 변을 2k로 나누면 2kT(2k)=22kT(22k)+1 2kT(2k)=T′(k)이라고 한다면 T′(k)=T′(2k)+1이기 때문에 문제4에 따라 O(logn)이다.
이를 이용하면 2kT(2k)=logk 이므로 T(2k)=2k⋅logk이라고 한다면 T(n)=nlog(logn)이라고 할 수 있다. 이때, log(logn)의 증가폭이 n이 증가함에 비해 매우 느리게 증가하므로 n과 거의 같다고 할 수 있다. 그러므로 시간복잡도는 O(n)이다.