[ํ์ด์ฌ] ๋ฐฐ์ด
๐ค ๋ฐฐ์ด
C ๋ฐฐ์ด
ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์๋ค. (int numArray[4] ๋ 4์นธ์ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ์์ฝ, ์ด 16byte)
๊ฐ์ ํ์ ์ ๋ฐ์ดํฐ๋ง ๋ด์ ์ ์๋ค.
Python ๋ฐฐ์ด
์ฃผ์๋ฅผ ์๊ณ ์์ผ๋ฉด ๋ฐฐ์ด์ ์ ๊ทผํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(1)์ด๋ผ๋ ์ ์ด ๊ต์ฅํ ํจ์จ์ ์ด๋ค.
๐ค ๋ฐฐ์ดํ์
๋ฐฐ์ด์์์ ์ด๋ค ๊ฐ์ ์ฐพ์ ๋ 0๋ฒ์งธ ๋ถํฐ ์์๋๋ก ์ฐพ๋ ๊ฒ์ ์ ํ ํ์์ด๋ผ๊ณ ํ๋ค.
๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ์ ์ฐพ๋ ๊ฐ์ด ์์๊ฒฝ์ฐ ๋น ๋ฅด์ง๋ง ์๋ ๊ฒฝ์ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๋ฐฐ์ด์ ์ ๊ทผํ๋ ๊ฒ์ O(n)์ผ๋ก ๋น ๋ฅผ์ง์ธ์ ํ์์ ํ๊ฒ ๋๋ฉด O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค๋ ๊ฒ์ด๋ค.
๐ค ์ ์ ๋ฐฐ์ด๊ณผ ๋์ ๋ฐฐ์ด
1. ์ ์ ๋ฐฐ์ด : ํฌ๊ธฐ ๊ณ ์ (์์ ์ ํ)
5๊ฐ๋ฅผ ๋ด์ ์ ์๋ ๋ฐฐ์ด์ ์๋ก์ ์๋ฅผ ์ง์ด๋ฃ์๋ผ๊ณ ํ๋ค๋ฉด ์ ์ ์ธ ๋ฐฐ์ด ํน์ฑ ๋๋ฌธ์ ๋ฐฐ์ด์ ์ฒ์์ 6๊ฐ๋ฅผ ๋ด์ ์ ์๋๋ก ์ด๊ธฐํ ํด์ผ ํ๋ค. ์ด๋ฌํ ํ์์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋๋ฌด ํฐ ๊ณต๊ฐ์ ํ ๋นํ๋ฉด ๋ญ๋น๋๋ ๊ณต๊ฐ์ด ๋ง์์ง๊ฒ ๋๋ค.
2. ๋์ ๋ฐฐ์ด : ํฌ๊ธฐ ์ ๋์ (์์ ๊ณ์ ์ถ๊ฐ ๊ฐ๋ฅ)
์ํฉ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ์ ๋์ ์ผ๋ก ๋ฐ๋๋ค. ๊ธฐ์กด์ ์๋ ๋ฐฐ์ด์์ ์๋ก์ด ์ซ์๊ฐ ์ถ๊ฐ๋๋ฉด ์๋ก์ด ์๋์ ์ผ๋ก ํฐ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์๋ก ๋ง๋ค๊ฒ ๋๊ณ ๊ธฐ์กด์ ๊ฐ๋ค์ ๋จผ์ ์ถ๊ฐํ๊ณ ์๋ก์ด ๊ฐ์ ๋ค์ ์ถ๊ฐํ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ์ ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์ด๊ณ ์ํฉ์ ๋ง๊ฒ ๋ฐ๋๋ค๋ ๊ฒ์ด๋ค.
๐ค ์ถ๊ฐ ์ฐ์ฐ (append operation)
๊ฒฝ์ฐ 1) ์ ์ ๋ฐฐ์ด ๋จ๋ ๊ณต๊ฐ ์์ ๋ : O(1) ๊ทธ๋ฅ ์ถ๊ฐ๋ง ํ๋ฉด ๋๋ฏ๋ก..
๊ฒฝ์ฐ 2) ์ ์ ๋ฐฐ์ด์ด ๊ฝ ์ฐผ์ ๋
๊ธฐ์กด ๋ฐฐ์ด 0๋ฒ ์ธ๋ฑ์ค์ ์ ๊ทผํด์ ๋ณต์ฌ ํ ์๋ก์ด ๋ฐฐ์ด 0๋ฒ ์ธ๋ฑ์ค์ ์ ๊ทผํด ๋ถ์ฌ๋ฃ๋ ์์ผ๋ก ํ๋ํ๋
๋ณต์ฌํ๋ฉด n๋ฒ ๋ฐ๋ณต๋๋ค. ๋ฐ๋ผ์ O(n)์ด๊ณ ์๋ก์ด ๊ฐ์ ์ถ๊ฐํ๋ ์ผ์ O(1)๋งํผ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋
๋ํด O(n)๋งํผ ๊ฑธ๋ฆฐ๋ค.
๐ค ๋ถํ ์ํ ๋ถ์ (Amortized Analysis)
๊ฐ์ ๋์์ n๋ฒ ํ์ ๋ ๋๋ ์๊ฐ์ด x์ผ ๋ ๋์์ ํ ๋ฒ ํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ x/n๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
x ๋ฒ์งธ ์ถ๊ฐ | ๋ฐฐ์ด ํฌ๊ธฐ | ์๋ก์ด ๋ฐฐ์ด์ ์์ ์ฎ๊ฒจ ์ ์ฅํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ |
1 | 1 | 0 |
2 | 2 | 1 |
3 | 4 | 2 |
4 | 4 | 0 |
5 | 8 | 4 |
6 | 8 | 0 |
7 | 8 | 0 |
8 | 8 | 0 |
9 | 16 | 8 |
... |
ํฌ๊ธฐ๊ฐ 1์ด์๋ ๋ฐฐ์ด์ 2, 3, 5, 9๋ฒ์งธ ์๊ฐ ์ถ๊ฐ ๋ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ด ๋๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ผ ํ๋๋ฐ ์ด ๋๋ง๋ค 1, 2, 4, 8 ๊ฐ์ฉ ๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ๋๋ค.
๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ๋ ์ด ์๊ฐ ๋น์ฉ์ 8 + 4 + 2 + 1 ์ด๋ค.
์ผ๋ฐํ๋ฅผ ํด์ ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ n๋ฒํ๋ค๊ณ ํ๊ณ , ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฐ์ดํธ๋ฅผ m๊ฐ ์ฎ๊ฒจ์ ์ ์ฅํ๋ค๊ณ ํ์.
์ด ๊ฑธ๋ฆฐ ์๊ฐ์ ์์ ๊ฐ์ด [m + m/2 + m/4 + ... + 1] ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๋์ด๋๋ ๊ฒ์ 1 + 2 + 4 + ... + m/2 + m ์์ผ๋ก ๋์ด๋์ง๋ง ์ญ์์ผ๋ก ํ ๊ฒ์ด๋ค.
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ณต์ฌํ ์ซ์์ ๊ฐ์๊ฐ m์ด๋ฉด ์๋ก์ด ์๊ธฐ๋ ๋ฐฐ์ด๋ค์ ์ด๋ฐ์์ผ๋ก ๋ณด์ฌ์ง๋ค.
์๋ก ์๊ธฐ๋ ๋ฐฐ์ด๋ค์ ํฌ๊ธฐ์ ํฉ์ ์ ๋ 2m์ ๋์ ์ ์๋ค๋ ์ ์ด๋ค.
์๋ฅผ ๋ค์ด ๊ฐ์ฅ ์ต๊ทผ์ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ ์ ์ฅํ ๋ 8์ด ๊ฑธ๋ ธ๋ค๋ ๋ป์ ํ์ฌ ๋ฐฐ์ด ์์ ์๋ ๋ฐ์ดํฐ๋ 9~16๊ฐ ์ฌ์ด๋ผ๋ ๊ฒ์ ์ ๋ฐฉ์์ผ๋ก ์ ์ ์๋ค.
์ ๋ฆฌํ๋ฉด ์ฐ์์ผ๋ก ์ถ๊ฐ ์ฐ์ฐ์ n ๋ฒ์ ํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ ์ ์ฅํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์ด ์๊ฐ์ 2n๋ณด๋ค ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ n์ ์๊ฐ์ด ๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ ์ ์ฅํ๋๋ฐ ์๋ 2n๋ณด๋ค ์ฝ๊ฐ ์ ์ ์๊ฐ์ด ํ์ํ๋ค. ๋ ์๊ฐ์ ํฉ์น๋ฉด O(3n)์ ์๊ฐ ๊ฒฐ๊ตญ O(n)์ด๋ผ๊ณ ํ ์ ์๋ค.
ํ์ง๋ง ์ด๊ฑด ์ฐ์์ผ๋ก n ๋ฒํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋ณต์ก๋์ด๋ค.
1๋ฒํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ O(n)/n ์ฆ O(1)์ด ๊ฑธ๋ฆฐ๋ค.
๋ฌด์กฐ๊ฑด ๋ถํ ์ํ ๋ถ์์ ํ๋ค๊ณ ๊ผญ ์๊ฐ ๋ณต์ก๋๊ฐ ์ค์ด๋๋ ๊ฒ์ ์๋๋ค. ๋ณดํต ์ค์ด๋ค์ง ์๋๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ํด์ ์ค์ด๋ ๋ค๋ฉด ์ด ๋ถํ ์ํ ๋ถ์์ ํ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ฌ์ฉํ๋ค.
์ ํํ๊ฒ๋ ๋์ ๋ฐฐ์ด์ ์ถ๊ฐ(append) ์ฐ์ฐ์ ์ต์ ์ ๊ฒฝ์ฐ O(n)์ด ๊ฑธ๋ฆฌ์ง๋ง, ๋ถํ ์ํ ๋ถ์์ ํ๋ฉด O(1)์ด ๊ฑธ๋ฆฐ๋ค๊ณ ํํํ๋๊ฒ ๋ง๋ค.
๐ค ์ฝ์ ์ฐ์ฐ (insert operation)
๊ฒฝ์ฐ1 ) ์ ์ ๋ฐฐ์ด ๋จ๋ ๊ณต๊ฐ ์์ ๋
์ฐ์๋์ด ์๋ ๋ฐฐ์ด ์ค๊ฐ์ ์๋ก์ด ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์๋ ์ค๊ฐ ์ดํ์ ์๋ ์ธ๋ฑ์ค๋ค์ ํ์นธ์ฉ ๋ค๋ก ๋ฏธ๋ฃจ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๊ณต๊ฐ์ ์๋ก์ด ์๋ฅผ ๋ฃ๊ฒ ๋๋๋ฐ ์ด ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋, ๊ทธ ์ค์์๋ ์ต์ ์ ๊ฒฝ์ฐ๋ ๋งจ ์์ ๋ฃ๋ ๊ฒฝ์ฐ์ธ๋ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ์ ํํ๋ ๋ฃ๋ ์๊ฐ๊น์ง O(n + 1)์ด๋ค. (1์ ์ ์ธ)
๊ฒฝ์ฐ2 ) ์ ์ ๋ฐฐ์ด์ด ์ฐผ์ ๋
์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค๊ฒ ๋๊ณ ๊ธฐ์กด์ ์๋ ์๋ค์ ๋ณต์ฌํ๊ณ ์์ ๋ฐฉ์๊ณผ ๊ฐ์ด ์๋ก์ด ์์๋ฅผ ์ ์ฅํ๋ค.
๋ณต์ฌํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ O(n), ์์ ๋ฐฉ์์ด ๊ฑธ๋ฆฌ๋ ์๊ฐ O(n + 1) ๋ํด์ O(2n + 1)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
๊ฒฐ๊ตญ O(n)์ด ๊ฑธ๋ฆฐ๋ค.
๋๋ค O(n)์ด ๊ฑธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ์ฝ์ ์ฐ์ฐ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ ๋ณต์ก๋๋ O(n)์ด ๊ฑธ๋ฆฐ๋ค.
๐ค ์ญ์ ์ฐ์ฐ (delete operation)
๋ฏธ๋ฆฌ ์ง์ ํ ๋ฐฐ์ด์ ํฌ๊ธฐ์์ ์ถ๊ฐ๋ก ๊ณต๊ฐ์ ํ์๋ก ํ์ง ์์ผ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ ๋งจ ์์ ์์๋ฅผ ๋บ๋ค๊ณ ํ์ ๋ ๋ค์ ์์๋ค์ ํ ์นธ์ฉ ์์ผ๋ก ๋น๊ธฐ๋ฉด ๋๋ฏ๋ก
์ญ์ ์ฐ์ฐ์ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ๋งจ ๋ค์ ์์๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค๋ฉด O(1)์ด ๊ฑธ๋ฆฐ๋ค.
๐ค ๋ด๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ ์ค์ด๊ธฐ
๋ฐ์ดํฐ๊ฐ 10000๊ฐ ์๋ ๋์ ๋ฐฐ์ด์์ 9900๊ฐ์ ์์๋ฅผ ์ง์ ๋ค๋ฉด 100๊ฐ ๋ฐ์ ๋จ์ง ์๊ฒ ๋๊ณ ๊ฒฐ๊ตญ 9900๊ฐ์ ๊ณต๊ฐ์ด ๋ญ๋น๋๊ฒ ๋๋ค. ๊ณต๊ฐ์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋ด๋ถ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์ ์ ํ ์ค์ฌ์ ๊ณต๊ฐ์ ์ด๋ค.
์ด๋ ๊ฒ ํ๊ธฐ ์ํด์ ๋ง์ฝ 9๊ฐ์ ์์๋ฅผ ๊ฐ๊ณ ์๋ ๋ฐฐ์ด์์ 6๊ฐ์ ์์๋ฅผ ์ ๊ฑฐํ๋ค๊ณ ์น๋ฉด ๊ณต๊ฐ์ ํจ์จ์ฑ ๋๋ฌธ์ ์๋ก์ด 3์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๊ทธ๊ณณ์๋ค ์ฎ๊ธฐ๋ฉด ๋๋ค. ์ค์ผ ๋ ํฌ๊ธฐ๋ฅผ ๊ผญ 1/3์ผ๋ก ์ค์ฌ์ผ ํ๋ ๊ฒ์ ์๋๋ค. 1/2 1/4 ๋ฑ ๊ฐ๋ฐ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
๋งจ ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋๋ O(1)์ ์๊ฐ์ด n๋ฒ ๋ฐ๋ณต๋๋ค. ์์ ๋ฐฐ์ด๋ก ์ฎ๊ธฐ๊ธฐ ์ํด์๋ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์์ ๋ฐฐ์ด๋ก ์์ฎ๊ฒจ๋ ๋์ง๋ง ๋๋ฌผ๊ฒ ์ฎ๊ธด๋ค.
๋ฐ๋ผ์ ๋ถํ ์ํ ๋ถ์์ ์ ์ฉํ๋ฉด ๋งจ ๋ ๋ฐ์ดํฐ ์ญ์ ์ฐ์ฐ๋ O(1)์ด ๊ฑธ๋ฆฐ๋ค๊ณ ํ ์ ์๋ค.
๐ค ๋์ ๋ฐฐ์ด์์์ ์ญ์
์ ์ ์ธ ๋ฐฐ์ด์์๋ numArray์ [2, 3, 5, 7]์์ 2๋ฒ์งธ ์์์ธ 3์ ์ญ์ ๋ฅผ ํ ์ ์๋ค. None, NuLL๊ฐ์ ์ ์ํ์ด ์๋๋ฏ๋ก ์๋ ๊ฐ์ ๋ฃ์ ์๋ ์๋ค. ์ ์ ๋ฐฐ์ด์ 3์ด ์๋ ์๋ฆฌ์ 5๋ฅผ ๋๊ฒจ์ค๋ ์์ผ๋ก ํด์ ๊ฒฐ๊ตญ
[2, 5, 7, 7] ์ด๋ ๊ฒ ๋๊ณ ๋ง์ง๋ง์ ์๋ 7์ ์ง์ฐ๋๊ฒ ์๋๋ผ ํ์ด์ฌ ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ ๊ทผํ ์ ์๋ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ 0 ~ 2๋ก ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค. ์ค์ง์ ์ผ๋ก ์ ๊ทผํ ์ ์๊ธฐ์ ์ญ์ ๋์๋ค๊ณ ๋ณด๋ ๊ฒ์ด๋ค.