๐ก Dynamic Array๋ ์ด๋ค ์๋ฃ๊ตฌ์กฐ ์ธ๊ฐ
Array์ ๊ฒฝ์ฐ size๊ฐ ๊ณ ์ ๋์๊ธฐ ๋๋ฌธ์ ์ ์ธ์์ ์ค์ ํ size๋ณด๋ค
๋ง์ ๊ฐฏ์์ data๊ฐ ์ถ๊ฐ๋๋ฉด ์ ์ฅ ํ ์ ์๋ค
์ด์ ๋ฐํดDynamic Array
๋ ์ ์ฅ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด
resize๋ฅผ ํตํ์ฌ ์ ๋์ ์ผ๋ก size๋ฅผ ์กฐ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ค
Dynamic Array์ ํต์ฌ ์์๋ ๋๊ฐ์ง์ด๋ค
ํด๋น A๋ฐฐ์ด์ 6์ด๋ผ๋ ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด
B๋ฐฐ์ด์ ์ ์ธํด์ค๋ค A๋ฐฐ์ด์ ๋ณต์ฌํด์ฃผ๊ณ 6์ ์ถ๊ฐํ๋ฉด๋๋ค
๊ทธ ํ์ A๋ฐฐ์ด์ ์ญ์ ์์ผ์ฃผ๋ฉด ์ด๊ฒ์ ์ฐ๋ฆฌ๋ resize๋ผ๊ณ ํ๋ค
๐ก Doubling
resize์ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ด๋ค
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ(append O(1))ํ๋ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด
๊ธฐ์กด ๋ฐฐ์ด์ size๋ณด๋ค ๋๋ฐฐ ํฐ ๋ฐฐ์ด์ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ด๋ค
(N๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ฎ๊ฒจ์ผ ํ๋ฏ๋ก O(n) ๋ฐฉ๋ฒ์ด๋ค)
์ ๋ฒ ํฌ์คํ
์ ๊ธฐ์ฌํ๊ฒ์ฒ๋ผ array append
์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค
ํ์ง๋ง doubling์ด ์ํ๋๋ฉฐ ๊ธฐ์กด ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ฉฐ O(n)์
์๊ฐ์ด ์์๋๊ฒ ๋๋ค
์ด๋ฌํ ๊ณผ์ ์์ Array append์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ผ๊น O(n)์ผ๊น ?
๐ก ๋ถํ ์ํ ์๊ฐ๋ณต์ก๋(Amotized time complexity)
์ ์ง๋ฌธ์ ๋ํ ํด๋ต์ ์ฌ๊ธฐ์ ์ฐพ์๋ณผ ์ ์๋ค
append์ ์ด๊ณผ์ ์ ์ดํด๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ถ๊ฐํ๋(O(1))์์ ์ด ๋๋ค์์ด๊ณ ,
size๋ฅผ ๋์ด์ค ๋ 2๋ฐฐ์ size๋ก ๋๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ๋ณต์ฌํ๋ ๊ณผ์ (resize O(n))์ด ์์ฃผ ๊ฐ๋ ๋ฐ์ํจ
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด append์ ์ ์ฒด์ ์ธ ์๊ฐ๋ณต์ก๋๋ O(1)์ด๋ค.
์ ํํ ๋งํ์๋ฉด amortized O(1) ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ
์ฝ๊ฒ ์ค๋ช ํ์๋ฉด ๊ฐ๋ ๋ฐ์ํ๋ O(n)์ resizeํ๋ ์๊ฐ์,
์์ฃผ ๋ฐ์ํ๋ O(1)์ ์์ ๋ค์ด ๋ถ๋ดํด์ ๋๋ ๊ฐ์ง์ผ๋ก์จ
์ ์ฒด์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค