[Data_Structer] Array & Linked List
Array & Linked List
Array
Array๋ ์ฐ๊ด๋ data๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ด๋ฉฐ ์์ฐจ์ ์ผ๋ก ๋ฏธ๋ฆฌ ํ ๋น๋ ํฌ๊ธฐ๋งํผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
๐ก Array์ Linked List์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐฉ์๊ณผ ์ด์ ๋ฐ๋ฅธ operation์ ์ฐ์ฐ ์๋(time complexity)
Array์ ํน์ง
- ๊ณ ์ ๋ ์ ์ฅ ๊ณต๊ฐ(fixed-size)
- ์์ฐจ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ(order)
Array์ ์ฅ์ ์ lookup๊ณผ append๊ฐ ๋น ๋ฅด๋ค. ๋ฐ๋ผ์ ์กฐํ๋ฅผ ์์ฃผ ํด์ผ๋๋ ์์ ์์๋ Array ์๋ฃ๊ตฌ์กฐ ์์ฃผ์ฌ์ฉ
Array์ ๋จ์ ์ fixed-size ํน์ฑ์ ์ ์ธ์์ Array์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ผ ๋๋ค.
์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ ์ถ๊ฐ์ ์ธ overhead๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๊ฐ๋ณต์ก๋
ย | Array |
---|---|
access | O(1) |
append | O(1) |
๋ง์ง๋ง ์์delete | O(1) |
insertion | O(n) |
deletion | O(n) |
search | O(n) |
Q. Dynamic Array
- Array์ ๊ฒฝ์ฐ size๊ฐ ๊ณ ์ ๋์๊ธฐ ๋๋ฌธ์ ์ ์ธ์์ ์ค์ ํ size๋ณด๋ค ๋ง์ ๊ฐฏ์์ data๊ฐ ์ถ๊ฐ๋๋ฉด ์ ์ฅ X.
- Dynamic Array๋ ์ ์ฅ๊ณต๊ฐ์ด ๊ฐ๋ ์ฐจ๊ฒ ๋๋ฉด resize๋ฅผ ํ์ฌ ์ ๋์ ์ผ๋ก size๋ฅผ ์กฐ์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ
- resize๋ฅผ ํ๋ ๋ฐฉ์
- ๋ฐ์ดํฐ ์ถ๊ฐ(append)ํ ๋์ ์๊ฐ๋ณต์ก๋
Dynamic Array
-
Dynamic Array๋ size๋ฅผ ์๋์ ์ผ๋ก resizing์ ํ๋ Array
-
๊ธฐ์กด์ ๊ณ ์ ๋ size๋ฅผ ๊ฐ์ง Static Array์ ํ๊ณ์ ์ ๋ณด์
-
Dynamic Array๋ data๋ฅผ ๊ณ์ ์ถ๊ฐํ๋ค๊ฐ ๊ธฐ์กด์ ํ ๋น๋ memory๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด, size๋ฅผ ๋๋ฆฐ ๋ฐฐ์ด์ ์ ์ธ ํ, ๊ทธ๊ณณ์ผ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊น์ผ๋ก์จ ๋์ด๋ ํฌ๊ธฐ์ size๋ฅผ ๊ฐ์ง ๋ฐฐ์ด
-
resizing ์ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋๋ฐ, ๋ํ์ ์ผ๋ก ๊ธฐ์กด Array size์ 2๋ฐฐ size๋ฅผ ํ ๋นํ๋ doubling ๋ฐฉ๋ฒ์ด ์์.
Doubling
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ(append O(1)) ํ๋ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ณผํ๊ฒ ๋๋ฉด ๊ธฐ์กด ๋ฐฐ์ด์size๋ณด๋ค ๋๋ฐฐ ํฐ ๋ฐฐ์ด์ ์ ์ธํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ฎ๊ธฐ๋(n๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ฎ๊ฒจ์ผ ํ๋ฏ๋ก O(n)) ๋ฐฉ๋ฒ
๋ถํ ์ํ ์๊ฐ๋ณต์ก๋ Amortized time complexity
Dynamic array์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค $O(1)$์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. โ ์ถ๊ฐ๋ฅผ ํ๋ค๊ฐ ๋ฏธ๋ฆฌ ์ ์ธ๋ size๋ฅผ ๋์ด์๋ ์๊ฐ์, resize โ ์ด ๋๋ ์ผ์ผ์ด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฎ๊ฒจ์ผ ๋๊ธฐ ๋๋ฌธ์ ์ด ๋๋งํผ์$O(n)$์ ์๊ฐ๋ณต์ก๋
append์ ์ด ๊ณผ์ ์ ์ดํด๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ถ๊ฐํ๋(O(1))์์ ์ด ๋๋ค์์ด๊ณ , size๋ฅผ ๋์ด์ค ๋๋ size๋ฅผ ๋ ๋ฐฐ ๋๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ์ฎ๊ธฐ๋ ๊ณผ์ (resize O(n))์ด ์์ฃผ ๊ฐ๋ ๋ฐ์
append์ ์ ์ฒด์ ์ธ ์๊ฐ๋ณต์ก๋๋ O(1)
Linked List
Linked List๋ Node๋ผ๋ ๊ตฌ์กฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, Node๋ ๋ฐ์ดํฐ ๊ฐ๊ณผ ๋ค์ Node์ address๋ฅผ ์ ์ฅ. Linked List๋ ๋ฌผ๋ฆฌ์ ์ธ ๋ฉ๋ชจ๋ฆฌ์์์๋ ๋น์ฐ์์ ์ผ๋ก ์ ์ฅ์ด ๋์ง๋ง Linked list๋ฅผ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ Node๊ฐ next Node์ address๋ฅผ ๊ฐ๋ฆฌํด์ผ๋ก์จ ๋ ผ๋ฆฌ์ ์ธ ์ฐ์์ฑ์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ
๐ก Linked List๋ tree, graph๋ฑ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ ๋ ์์ฃผ ์ฐ์ด๋ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ
-
Linked list๋ฅผ ์ค๋ช ํ ๋์๋ ๋ฉ๋ชจ๋ฆฌ์์์ ๋ถ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์ ๊ณผ Node์ next address๋ฅผ ํตํด ๋ถ์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ ผ๋ฆฌ์ ์ฐ์์ฑ์ ๋ณด์ฅ
-
๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ ๋๋ ์์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค๋ ์ฅ์
๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์ ๋ณธ Linked list - ๋น์ฐ์์
๋ ผ๋ฆฌ์ ์ฐ์์ฑ
๊ฐ Node๋ค์ next address์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ์์ฑ์ ์ ์งํ๋ฉด์ ์ฐ๊ฒฐ Array์ ๊ฒฝ์ฐ, ์ฐ์์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์์ฐจ์ ์ผ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๊ณ , Linked list์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ฑ์ ์ ์งํ์ง ์์๋ ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์ข ๋ ์์ ๋ก์ด ๋์ , Next address๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํ๋๋น ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ปค์ง๊ฒ ๋๋ค.
(1) ๊ทธ๋ฆผ์์ ๋งํฌ๋๋ฆฌ์คํธ๊ฐ ์ฐ์์ ์ผ๋ก ์ ์ฅ๋๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ฉ๋ชจ๋ฆฌ์์์๋ (2)์ ๊ฐ๋ค
(1) ๋ ผ๋ฆฌ์ ์ฐ์์ฑ
(2) ๋ฌผ๋ฆฌ์ ๋ถ์ฐ์์ฑ
์๊ฐ๋ณต์ก๋
Array์ ๊ฒฝ์ฐ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ /์ญ์ ํ๊ฒ ๋๋ฉด ํด๋น ์ธ๋ฑ์ค์ ๋ค์ ์๋ ๋ชจ๋ ์์๋ค์ shift -> O(n)์ ์๊ฐ๋ณต์ก๋ Linked list๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฎ๊ธธ ํ์์์ด next address๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1)์ ์๊ฐ๋ณต์ก๋๋ก ์ฝ์ /์ญ์ ๊ฐ ๊ฐ๋ฅ
ย | Linked list |
---|---|
access | O(n) |
search | O(n) |
insertion | O(1) |
deletion | (1) |
Q. โญ Array vs Linked list๋ฅผ ๋น๊ต
Array๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ Linked List๋ ๋ฉ๋ชจ๋ฆฌ์์์๋ ์ฐ์์ ์ด์ง ์์ง๋ง, ๊ฐ๊ฐ์ ์์๊ฐ ๋ค์ ์์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ์ ์ ์ฅํด ๋์์ผ๋ก์จ ๋ ผ๋ฆฌ์ ์ฐ์์ฑ์ ์ ์ง
๊ฐ operation์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ค๋ฆ.
๋ฐ์ดํฐ ์กฐํ๋ Array์ ๊ฒฝ์ฐ O(1), Linked list๋ O(n)์ ์๊ฐ๋ณต์ก๋ ๊ฐ์ง๋ฉฐ, ์ฝ์ /์ญ์ ๋ Array O(n), Linked list O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ก์ถ์ฒ
์ผ๋ง๋งํผ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง ๋ฏธ๋ฆฌ ์๊ณ ์๊ณ , ์กฐํ๋ฅผ ๋ง์ด ํ๋ค๋ฉด Array๋ฅผ ์ฌ์ฉ
๋ฐ๋ฉด์ ๋ช๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง ๋ถํ์คํ๊ณ ์ฝ์ ์ญ์ ๊ฐ ์ฆ๋ค๋ฉด Linked list๋ฅผ ์ฌ์ฉ
๐ก Array์ Linked List์ ์ฃผ๋ ์ฐจ์ด์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ฐจ์ด!
Array๋ ๋ฉ๋ชจ๋ฆฌ์์์ ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , Linked List๋ ๋ถ์ฐ์์ ์ผ๋ก ์ ์ฅ
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ์ฐจ์ด๋ก ์ธํด operation๊ตฌํ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๊ณ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฌ๋ผ์ง๋ค. ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ์ฉ๋์์๋ ์ฐจ์ด๊ฐ ์๋ค.
์ํฉ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฌ๋ผ์ง๋ค.
์กฐํ (lookup)
Array๋ ๋ฉ๋ชจ๋ฆฌ์์์ ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์๊ธฐ ๋๋ฌธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฆ์ ์ ๊ทผ(random access O(1))ํ ์ ์๋ค. ์ด์ ๋ฐ๋ฉด Linked List๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ถ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์์ฐจ ์ ๊ทผ(Sequential Access)๋ง ๊ฐ๋ฅ. ์ฆ, ํน์ index์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด O(n)์ ์๊ฐ๋ณต์ก๋
์ฝ์ /์ญ์ (insert/delete)
Array์ ๊ฒฝ์ฐ ๋งจ ๋ง์ง๋ง ์์๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ O(1)
ํ์ง๋ง ๋งจ ๋ง์ง๋ง ์์๊ฐ ์๋ ์ค๊ฐ์ ์๋ ์์๋ฅผ ์ฝ์ /์ญ์ ํ๋ฉด ํด๋น ์์๋ณด๋ค ํฐ ์ธ๋ฑ์ค์ ์์๋ค์ ํ ์นธ์ฉ shift ํด์ค์ผ ํ๋ ๋น์ฉ(cost)์ด ๋ฐ์ ๋ฐ๋ผ์, ์ด ๊ฒฝ์ฐ์๋ ์๊ฐ๋ณต์ก๋๊ฐ O(n)
Linked List๋ ์ด๋ ์์๋ฅผ ์ถ๊ฐ/์ญ์ ํ๋๋ผ๋ node์์ ๋ค์์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๋ ๋ถ๋ถ๋ง ๋ค๋ฅธ ์ฃผ์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ shiftํ ํ์ ์์ด ์๊ฐ๋ณต์ก๋๊ฐ O(1)
ํ์ง๋ง Linked list์ ๊ฒฝ์ฐ ์ถ๊ฐ/์ญ์ ๋ฅผ ํ๋ ค๋ index๊น์ง ๋๋ฌํ๋๋ฐ O(n)์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ค์ง์ ์ผ๋ก Linked List๋ ์ถ๊ฐ/์ญ์ ์์ O(n)์ ์๊ฐ๋ณต์ก๋ ๊ฐ์ง๋ค.
memory
Array์ ์ฃผ๋ ์ฅ์ ์ ๋ฐ์ดํฐ ์ ๊ทผ๊ณผ append๊ฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ผ๋ ๋จ์ , ๋ฐฐ์ด์ ์ ์ธ์์ fixed size๋ฅผ ์ค์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
์ฆ, ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ง ์๋๋ผ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ๋ฐ์.
์ด์ ๋ฐ๋ฉด Linked List๋ runtime์ค์์๋ size๋ฅผ ๋๋ฆฌ๊ณ ์ค์ผ ์ ์๋ค. ๊ทธ๋์ initial size๋ฅผ ๊ณ ๋ฏผํ ํ์ ์๊ณ , ํ์ํ ๋งํผ memorry allocation์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์๋ค.
์ฐธ์กฐ : ๊ฐ๋ฐ๋จ๋ ธ์จ ์๋ฃ๊ตฌ์กฐ
Leave a comment