2020-1ํ•™๊ธฐ, ๋Œ€ํ•™์—์„œ โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜โ€™ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•œ ๋ฐ”๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ง€์ ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค :)

5 minute read

2020-1ํ•™๊ธฐ, ๋Œ€ํ•™์—์„œ โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜โ€™ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•œ ๋ฐ”๋ฅผ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ง€์ ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค :)

<Amortized Analysis>์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ธฐ ์ „์— ๊ฐ„๋‹จํ•œ Introduction์ธ <Array Doubling>์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ณ  ์˜ค๊ธธ ๋ฐ”๋ž€๋‹ค. โ€˜Zedd0202โ€™๋‹˜์˜ ํฌ์ŠคํŠธ๋ฅผ ์ถ”์ฒœํ•œ๋‹ค!

๐Ÿ‘‰ Array Doubling


Definition.

์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ํ•˜๋‚˜์˜ Operation์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„์„ โ€œ์ „์ฒด Operation์„ ์ˆ˜ํ–‰ํ•  ๋•Œ์˜ ํ‰๊ท  ์‹œ๊ฐ„โ€์œผ๋กœ ๋ฐ”๊พธ์–ด ํ‘œํ˜„ํ•˜๋Š” ๋ถ„์„ ๋ฐฉ์‹์„ ๋งํ•จ. a sequence of operations ๊ด€์ ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๋ถ„์„ํ•œ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด, ์—ฐ์†๋œ ์—ฐ์‚ฐ์—์„œ ๊ฐ€-๋” ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ๋น„์‹ผ ๋น„์šฉ์˜ ์—ฐ์‚ฐ์„ ๋ถ„์‚ฐ์‹œ์ผœ์„œ ์—ฐ์‚ฐ์˜ โ€˜ํ‰๊ท  ๋น„์šฉโ€™์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

<Amortized Analysis>๋Š” ํ”ํžˆ โ€œ๋ถ„ํ• -์ƒํ™˜ ๋ฐฉ์‹โ€œ์œผ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.


์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•ด๋ณด์ž. ๊ทธ ์—ฐ์‚ฐ์ด โ€˜ํ‰์†Œโ€™์—๋Š” ๋น„์šฉ์ด $1$๋งŒ ๋“ ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์•„์ฃผ์•„์ฃผ ๋“œ๋ฌธ ๊ฒฝ์šฐ์— ์ด ์—ฐ์‚ฐ์ด $N$๋ฒˆ ์ˆ˜ํ–‰๋˜๊ณ , ๊ทธ๋•Œ ๋น„์šฉ์ด $N$๋งŒํผ ๋“ ๋‹ค๊ณ  ํ•˜์ž.

๋งŒ์•ฝ <Asymptotic Analysis>๋กœ ์ ‘๊ทผํ•œ๋‹ค๋ฉด, ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์˜ ์—ฐ์‚ฐ์€ $O(N)$์˜ ๋น„์šฉ์ด ๋“ ๋‹ค๊ณ  ๋ถ„์„ํ•˜๊ฒŒ ๋œ๋‹ค.

<Asymptotic Analysis>์—์„œ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋•Œ๋ฌธ์— โ€˜ํ‰์†Œโ€™์˜ ๋น„์šฉ๊ณผ ๊ดด๋ฆฌ๊ฐ€ ์ƒ๊ฒผ๋‹ค. <Amortized Analysis>๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค! ๐Ÿ˜

์œ„์˜ ๊ฒฝ์šฐ์—์„œ <Amortized Analysis>๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋Š” โ€œAmortized $O(1)$โ€์ด๋‹ค! (์ด๋•Œ, ๊ทธ๋ƒฅ $O(1)$๋ผ๊ณ  ํ•˜๋ฉด ์•ˆ ๋˜๊ณ , ๊ผญ โ€œAmoritzedโ€œ๋ฅผ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค.)


โ€œStackโ€ ์ž๋ฃŒ๊ตฌ์กฐ์˜ push๋ฅผ ์˜ˆ์‹œ๋กœ <Amortized Analysis>๋ฅผ ์ˆ˜ํ–‰ํ•ด๋ณด์ž. ์šฐ๋ฆฌ๋Š” <amortized cost>๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜ํ•œ๋‹ค.

amortized cost = actual cost + accounting cost

์ด๋•Œ, <amoritzed cost>๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ•  ๋Œ€์ƒ์ธ โ€œํ‰๊ท  ๋น„์šฉโ€์„ ์˜๋ฏธํ•œ๋‹ค.

<actual cost>๋Š” ์šฐ๋ฆฌ๊ฐ€ Stack์—์„œ push ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ์˜ ์‹ค์ œ๋กœ ๋“œ๋Š” ๋น„์šฉ์„ ์˜๋ฏธํ•œ๋‹ค. <accounting cost>๋Š” โ€œ์ ๋ฆฝ ๋น„์šฉโ€์ด๋ผ๊ณ  ํ•œ๋‹ค. ์–ด๋–ค ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ, ๊ฐ€-๋” ์ผ์–ด๋‚˜๋Š” ๋น„์‹ผ ์—ฐ์‚ฐ์„ ๋ฌด๋ฆฌ์—†์ด ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, ๋น„์šฉ์„ ๊ณ„์ขŒ์— ์ €๊ธˆํ•ด๋‘๋Š” ์šฉ๋„์˜ ๋น„์šฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. (์ด๋ ‡๊ฒŒ ๋น„์šฉ์„ ๋ฏธ๋ฆฌ ์ €๊ธˆํ•˜๋ฉด, ๋‚˜์ค‘์— ๊ฐ€-๋” ์ผ์–ด๋‚˜๋Š” ๋น„์‹ผ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ณ„์ขŒ(account)์— ์ €์ถ•๋œ ๋น„์šฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค!๐Ÿคฉ)


๋‹ค์‹œ Stack์˜ ์˜ˆ์‹œ๋กœ ๋Œ์•„์™€๋ณด์ž. Stack์€ ํ‰์†Œ์—๋Š” push, pop ์ˆ˜ํ–‰ํ•  ๋•Œ, $1$์˜ ๋น„์šฉ์ด ๋“ ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ Stack์˜ ์šฉ๋Ÿ‰(capacity)๊ฐ€ ๊ฝ‰ ์ฐจ๊ฒŒ ๋˜๋ฉด, <Array Doubling>์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค!! ๐Ÿ˜ฒ

์ด Array Doubling์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด โ€œtransferring costโ€๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋งŒ์•ฝ ์›์†Œ ํ•˜๋‚˜๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐ ๋“œ๋Š” ๋น„์šฉ์ด $t$๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, $n$๊ฐœ ์›์†Œ๋ฅผ ์˜ฎ๊ธธ ๋•Œ์—๋Š” $n \times t$์˜ ๋น„์šฉ์ด ๋“ ๋‹ค. ๋งŒ์•ฝ ์ด์ „์˜ โ€œtransferring costโ€๊นŒ์ง€ ๋ชจ๋‘ ๊ณ ๋ คํ•œ๋‹ค๋ฉด, ์ „์ฒด transferring cost๋Š” $\le 2 \cdot n t$์ด๋‹ค.

๊ฝ‰ ์ฐฌ ์Šคํƒ์„ ๋” ๋„“์€ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ๋ณด์ž. ๋งŒ์•ฝ ํ˜„์žฌ ์Šคํƒ์— $n$๊ฐœ ์›์†Œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ด๊ฒƒ์œผ๋กœ ์ƒˆ๋กœ์šด ์Šคํƒ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฐ์— $n \times t$์˜ ๋น„์šฉ์ด ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด Array Doubling์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ์›์†Œ ์—ญ์‹œ ๋„ฃ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋˜ $1$์ด๋ผ๋Š” ๋น„์šฉ์ด ๋“ ๋‹ค. ๋”ฐ๋ผ์„œ, Doubling ์ƒํ™ฉ์—์„œ์˜ actuacl cost๋Š” $1 + nt$๊ฐ€ ๋œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์œ—์œ— ๋ฌธ๋‹จ์—์„œ transferring cost์˜ ์ด ๋น„์šฉ์ด $2tn$ ์ฏค ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ด ๋น„์šฉ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ๋น„์šฉ์— ๋งž์ถฐ ๊ณ„์ขŒ(account)์— ๊พธ์ค€ํžˆ ๋น„์šฉ์„ ์ €๊ธˆํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๊ณ„์ขŒ์˜ ์ž”๊ณ ๊ฐ€ 0์ด๋ผ๋ฉด, ์šฐ๋ฆฌ๋Š” push, pop ์–ด๋–ค ์—ฐ์‚ฐ๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ์ด $n$๋ฒˆ์˜ push๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, $\frac{2tn}{n} = 2t$ ๋งŒํผ์˜ ๋น„์šฉ์„ ๋ฏธ๋ฆฌ ์ €๊ธˆํ•ด๋‘ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ํ‰์†Œ์— ์ผ์–ด๋‚˜๋Š” ๋น„์šฉ $1$์˜ ์—ฐ์‚ฐ๊ณผ ๊ฐ€-๋” ์ผ์–ด๋‚˜๋Š” ๋น„์šฉ $1+nt$์˜ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋‹ค.

$2t$๋ผ๋Š” ๋น„์šฉ์€ Doubling ๋ฐœ์ƒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๊ณ„์† ์ง€๋ถˆํ•˜์—ฌ ๊ณ„์ขŒ์— ์Œ“์ด๊ฒŒ ๋œ๋‹ค. ๋งŒ์•ฝ Doudling์ด ์‹ค์ œ๋กœ ์ผ์–ด๋‚œ๋‹ค๋ฉด, accounting cost๋Š” $- nt + 2t$๊ฐ€ ๋œ๋‹ค.

์ƒํ™ฉ์„ ์ข…ํ•ฉํ•ด์„œ โ€œamortized costโ€๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.

โ€œamortized cost = actual cost + accounting costโ€

  • Doubling X (ํ‰์†Œ): $1 + 2t$
  • Doubling O : $(1+nt) + (-nt + 2t) = 1 + 2t$

๊ทธ๋ž˜์„œ! Array Doubling์„ ์ˆ˜ํ–‰ํ•˜๋Š” Stack์—์„œ์˜ push ์—ฐ์‚ฐ์€ โ€œamortized $O(1+2t)$โ€์˜ ๋น„์šฉ, ์ฆ‰! โ€œamortized $O(1)$โ€์„ ๊ฐ–๋Š”๋‹ค!! Asymptotic Analysis์—์„œ ์ตœ์•…์˜ ์‹œ๊ฐ„์„ ๋ถ„์„ํ•œ $O(n)$ ๋น„์šฉ๋ณด๋‹ค๋Š” ์ข€๋” ์œ ์šฉํ•  ๊ฒƒ ๊ฐ™์ง€ ์•Š์€๊ฐ€?? ๐Ÿ˜


์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ <Accounting Method>๋ผ๊ณ  ํ•œ๋‹ค. <Amortized Analysis>๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • Accounting Method
  • Aggregate Method
  • Potential Method


<Amortized Analysis>๋Š” Advanced Data Structure๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ๊ผญ ๋“ฑ์žฅํ•˜๋Š” ํ…Œํฌ๋‹‰์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ˆ™์ง€ํ•ด์•ผ ํ•˜๋Š” ํ…Œํฌ๋‹‰์ด๋‹ค!! ๐Ÿ˜Ž



์ฐธ๊ณ ์ž๋ฃŒ