[CLRS] [16] Amortized Analysis (분할 상환 분석)

2024. 11. 29. 15:41· CS Study/CLRS (자료구조 | 알고리즘)
목차
  1. 1. Amortized Analysis?
  2. 2. Amortized Analysis가 필요한 이유
  3. 3. Amortized Analysis의 주요 기법
  4. 3.1. Aggegate Analysis(총합 분석)
  5. 3.2. Accounting Method
  6. 3.3. Potential Method

1. Amortized Analysis?

- 분할 상환 분석(Amortized Analysis)에 대해서 알아보자.

- Amortized Analysis는 알고리즘의 시간 복잡도를 분석하는 방법 중 하나로, 특정 연산의 평균 실행 시간을 계산하는 데 초점을 둠

- 이는 최악의 경우 시간 복잡도를 항상 고려하는 Worst-case Analysis와 달리, 일련의 연산이 여러번 반복되는 경우 전체 작업에 대한 총 수행 시간을 분석하여 ''연산당 평균 비용''을 구하는 데 초점을 맞춘다.

 

2. Amortized Analysis가 필요한 이유

- 어떤 데이터 구조나 알고리즘에서는 일부 연산이 매우 비싸지만, 다른 연산들은 거의 비용이 들지 않는 경우가 있다.

ex) 동적 배열, Hash table...

- 이때 단순히 최악의 경우를 분석하면 평균적인 동작 성능을 제대로 설명하지 못한다.

- 예를 들어 동적 배열(Array List)을 생각해보자.

 

1. 동적 배열에 항목을 추가할 때, 배열이 가득 차 있지 않다면 삽입은 O(1)에 수행된다.

2. 하지만 배열이 가득 찼을 경우, 새 배열을 할당하고 모든 기존 항목을 복사해야 하므로 삽입연산은 O(N)이 된다.

 

- 단지 최악의 경우만 본다면 '삽입은 O(N)'이라는 결론을 짓게되지만, 현실에서는 배열 크기를 확장하는 것은 드물다.

- 대부분의 삽입은 O(1)으로 이루어지기 때문에, Amortized Analysis를 통해 O(1)이라고 분석할 수 있는 것이다.

 

3. Amortized Analysis의 주요 기법

3.1. Aggegate Analysis(총합 분석)

- 핵심 아이디어는 다음과 같다.

- 전체 연산의 총 실행시간을 계산한 후, 개별 연산의 평균비용을 구하는 방식이다.

 

절차 :

- 1. n번의 연산이 수행되는 동안 발생하는 총 시간 비용을 계산

- 2. 이를 n으로 나누어 연산당 평균 비용(Amortized Cost)을 계산

 

예제를 통해 자세히 알아보자.

 

예제 : 동적 배열에서의 삽입

- 동적 배열의 초기 크기는 1이고, 배열이 가득 차면 두 배로 확장.

- 삽입 연산의 비용 :

-- 대부분의 삽입 : O(1)

-- 배열 확장이 필요할 때 : O(N) cf) 모든 요소를 새 배열로 복사

 

분석 : 

- n개의 삽입 연산중 배열확장은 1, 2, 4,... 2**n 형태로 발생

-  총 복사 비용은 1 + 2 + 4 + ... + n <= 2n

- n개의 삽입연산에 대한 총 비용 : O(2n) = O(n)

- 평균 비용 : O(n) / n = O(1)

 

3.2. Accounting Method

- 핵심아이디어는 다음과 같다.

- 각 연산에 'credit'을 부과하여 비싼 연산의 비용을 미리 분산시키는 방법.

- 마치 '적금'처럼 평소 저렴한 연산에서 남은 잉여 자원을 비싼 연산에 사용한다고 볼 수 있다.

 

절차 : 

- 1. 각 연산에 가상의 비용(credit)을 할당.

- 2. 저렴한 연산에서는 남는 비용을 저장(credit 축적).

- 3. 비싼 연산에서 저장된 credit을 사용하여 실제 비용 충당.

 

예제 : 동적 배열 삽입

- 배열 확장 시 발생하는 복사 비용을 감안하여, 각 삽입 연산에 credit을 부과.

 

분석 : 

- 1. 평범한 삽입 : 삽입에 1의 실제 비욜이 발생, credit으로 1을 추가 부과

-- 총 2의 비용이 발생하지만, 그중 1은 credit으로 저장

 

- 2. 배열 확장 : 크기 k인 배열 확장에서 k개의 복사 비용 발생

-- 이전 삽입에서 저장한 k만큼의 credit으로 충당

 

결론 :

- 각 삽입 연산의 Amortized Cost는 O(1)이다.

 

3.3. Potential Method

- 데이터 구조의 현재 상태를 나타내는 potential function을 정의하여, 상태 변화와 함께 발생하는 비용을 평가하는방법.

- potential은 데이터 구조의 '저장된 자원'을 나타내며, 이를 통해 연산 비용을 계산한다.

 

- 수식은 다음과 같다.

Amortized Cost = Actual Cost + (Potential Difference)

'CS Study > CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글

[CLRS] [19] disjoint set(Union-Find)  (0) 2024.11.30
[CLRS] [17][18] B-tree  (2) 2024.11.30
[CLRS] [15] Greedy Algorithm  (0) 2024.11.27
[CLRS] [14-3] Dynamic Programming - Longest Common Subsequence(LCS)  (0) 2024.11.27
[CLRS] [14-2] Matrix Chain Multiplication  (0) 2024.11.27
  1. 1. Amortized Analysis?
  2. 2. Amortized Analysis가 필요한 이유
  3. 3. Amortized Analysis의 주요 기법
  4. 3.1. Aggegate Analysis(총합 분석)
  5. 3.2. Accounting Method
  6. 3.3. Potential Method
'CS Study/CLRS (자료구조 | 알고리즘)' 카테고리의 다른 글
  • [CLRS] [19] disjoint set(Union-Find)
  • [CLRS] [17][18] B-tree
  • [CLRS] [15] Greedy Algorithm
  • [CLRS] [14-3] Dynamic Programming - Longest Common Subsequence(LCS)
23학번이수현
23학번이수현
23학번이수현
밑바닥부터 시작하는 AI보안전문가
23학번이수현
전체
오늘
어제
  • 분류 전체보기 (243)
    • Statistic Study (47)
      • Mathematical Statistics(수리통.. (47)
    • Mathematics Study (15)
      • Linear Algebra (선형대수학) (15)
    • CS Study (74)
      • CLRS (자료구조 | 알고리즘) (49)
      • Database(DB) (11)
      • C++ (11)
      • 컴퓨터 구조 (2)
      • MongoDB (1)
    • DS Study (56)
      • CS 229(Machine Learning) (19)
      • CS 224n(NLP) (5)
      • Web Scraping (7)
      • R4DS(R언어) (20)
      • 밑바닥부터 시작하는 딥러닝 1 (5)
    • Hacking Study (0)
      • Web Hacking (0)
    • 코딩테스트 (5)
      • 백준-Python (5)
    • Paper Review(논문 리뷰) (43)
      • Deep Learning (16)
      • TCGA 관련 논문 (4)
      • Computer Vision (18)
      • NLP (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • LSTM
  • 딥러닝
  • 정렬
  • 선형대수학
  • 자료구조
  • 데이터분석
  • 알고리즘
  • 백준
  • clrs
  • Algorithms
  • R4DS
  • deep learning
  • Machine Learning
  • AI
  • cs 224n
  • db
  • cs229
  • Data Structure
  • 논문 리뷰
  • graph
  • NLP
  • 시간복잡도
  • Linear Algebra
  • Introduction to Algorithms
  • web scraping
  • R언어
  • 수리통계학
  • 파이썬
  • C++
  • introduction to algoritmhs

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
23학번이수현
[CLRS] [16] Amortized Analysis (분할 상환 분석)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.