Loading [MathJax]/jax/output/CommonHTML/jax.js

읽기 전

  • 해당 게시물은 작성자가 학습한 내용을 정리 및 요약 목적으로 작성되었으므로 오역 및 오개념이 있을 수 있습니다. 바로잡기 위한 의견을 제시해주시면 매우 감사하겠습니다.

분할상환 분석(Amortized Analysis)

점근적 분석(Asympotic Analysis) 방법에서는 알고리즘의 수행시간의 범위를 포함할 수 있는 합수로 표현하기 때문에 대부분 O(1)이고 간혹 O(n)이라도 O(n)으로 취급하기에 비효율적인 경우가 발생한다. 이 문제를 해결하기 위해 간혹 발생하는 최악의 경우를 구분해서 고려하는 분할상환 분석(Amortized Analysis)를 사용한다.

예를 들어 어떤 해시 테이블이 존재하고 차례로 item을 넣는다고 하자. 테이블의 상태가 full이 될 때마다 해당 테이블을 복사하고 길이가 2배인 새로운 테이블에 넣고서 원래의 테이블은 비운다. 그 과정을 그림으로 표현하면 아래와 같다.

Analysis_of_Algoritms_06-01

그림에 따르면 테이블이 full 상태가 아닐 경우 단순히 item 1개만 입력하는 과정을 수행하므로 수행시간은 1이다. 그러나 full 상태라면 전체 테이블을 복사한 후 새로운 item 1개를 입력하므로 수행시간은 2log2(n1)+1이 된다.

시간복잡도 T(n) 계산

총계 모델(Aggregate Model)

크기가 n인 해당 테이블을 채우는 작업을 수행하는 중 최악의 케이스는 테이블이 full 상태가 되어 모든 item을 복사하는 단계이고 해당 단계의 시간복잡도는 O(n)이 된다. 그러므로 n번 삽입하는 수행과정 중 최악의 비용을 고려하면 nO(n)으로 전체 시간복잡도는 O(n2)이 된다. 이는 우리가 흔히 말하는 점근적 분석에 따라 도출된 상계에 대한 해답이다. 그러나 n번의 입력과정 전반을 고려하여 엄밀하게 따져보면 모든 입력 과정이 O(n)만큼 소요되지 않는다. 그렇기 때문에 점근적 분석방법으로 도출된 상계는 그렇게 타이트하진 않다.

각 단계별 테이블 크기와 비용을 나열하면 아래 표와 같다.

Analysis_of_Algoritms_06-02

그러므로 단계별로 분할하여 수행시간을 고려하면 Amortized Cost=(1+2+3+1+)n이 된다. 문제에서 제시된 과정을 표현하면 단순 입력과정은 n회 발생하고 테이블을 복사하는 과정은 [log2(n1)]+1 단계마다 발생함을 확인할 수 있다. 수행시간을 단순 입력과정과 테이블을 복사하는 과정으로 구분하면 1+1++1n+1+2+4++2|log2(n1)|+1n이 된다. 공차가 1보다 큰 등비급수의 합인 a1++an1an보다 작기 때문에 이 식은 [n+2n]n3이 성립하며 결국 O(1)이 됨을 확인할 수 있다.

회계 모델(Accounting Model)

이 방법에 따르면 item을 입력하는 과정 대부분 테이블의 크기가 일정하지만 간혹 full 상태가 발생함에 따라 item을 새로운 테이블에 옮기는 비용을 산출하여 그 비용(Accounting cost)을 모든 단계에 배분한다. 이렇게 함으로써 간혹 발생하는 불균형을 모든 단계로 분산하여 평준화하는 것이다. 즉, Amortized Cost = Actual cost + Accounting cost이다. 테이블이 full 상태일 때, 크기가 Doubling 된 테이블로 item을 옮기는 비용을 Transferring 비용이라고 하자. item 한 개를 새로운 테이블로 옮길 때 t만큼의 시간이 소요된다고 하면 n개의 원소를 새로운 테이블로 옮기는 시간은 tn이지만 이 값은 현재 n개의 원소를 새로운 테이블로 옮기는 비용이다. 그러므로 이전까지 테이블의 크기가 Doubled된 경우들을 산출해보면 tn2+tn22++tn2[log2(n1)]+1tn이 된다. 그러므로 모든 단계에 걸쳐 full 상태가 됨에 따라 발생하는 Transferring 비용은 항상 2tn보다 작다. 즉, 모든 단계에 배분해야 하는 Accounting cost는 2tnn=2t이다.

  1. 테이블이 full 상태가 아닐 때

    원래 item의 입력시간 1과 Accounting cost를 더하여 Amortized cost는 Actual cost(1)+Accounting cost(2t) = 1+tn이다.

  2. 테이블이 full 상태가 되었을 때

    원래 item의 입력시간 1과 Transferring cost를 더하여 Actual cost는 1+tn이 되고 Accounting cost는 기존의 2t와 이전까지 full 상태가 발생했을 때를 대비하여 다른 단계에서 더했던 2t들을 다시 감산하여 2t-tn이 된다. 즉, Amortized cost는 Actual cost(1+tn)+Accounting cost(2t-tn)이 되어 1+2t가 된다.

따라서, 간혹 발생하는 비용을 평준화한 결과 항상 1+2t의 비용이 발생하므로 O(1+2t)=O(1)이 된다.

참고자료

  1. Analysis of Algorithm | Set 5 (Amortized Analysis Introduction)

+ Recent posts