1. Array
๐ฅช Array(๋ฐฐ์ด)๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์์๋ฅผ ์ฐ์ํ๊ฒ ๋ฐฐ์นํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ปํ๋ค. O(1)์ k๋ฒ์งธ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค. ๋ํ ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ์ ๋ค๋ฅด๊ฒ ์ถ๊ฐ์ ์ผ๋ก ์๋ชจ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ์(overhead)๊ฐ ๊ฑฐ์ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํฐ๋ค์ด ๋ถ์ด ์์ด์ cache hit rate๊ฐ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์ํ ๊ตฌ๊ฐ์ ์ก์์ผ ํด์ ํ ๋น์ ์ ์ฝ์ด ๊ฑธ๋ฆฐ๋ค.
โป array์์์ cache hit rate๊ฐ ๋์ ์ด์ ?
: ๋ฐ์ดํฐ๊ฐ ์ฐ์ํด์ ๋ฐฐ์น๋์ด ์์ผ๋ฏ๋ก cache ์ ์ฅ์์ array ๋ด์ ์ธ๊ทผ ๋ฐ์ดํฐ๊น์ง cache block์ load ํ๋ฏ๋ก ์์์ array ๋ด์ ์์ ์ ๊ทผ ์ ์ธ๊ทผ ์์ ์ญ์ cache์ ์์ ํ๋ฅ ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ณต์ ์ผ๋ก ๋์ผํ array ๋ด์ ์์๋ฅผ ์ ๊ทผํ๋ค๋ฉด cache ๋ด์ ํด๋น ์์๊ฐ ์์ ํ๋ฅ ์ด ๋๋ค. ๋ฐ๋ผ์ spatial locality์ temporal locality ๋ ๊ฐ์ง ์ฑ์ง์ ๋ชจ๋ ํ์ฉํ ์ด์ ์ผ๋ก cache hit rate๊ฐ ์ปค์ง ํ๋ฅ ์ด ๋์ผ๋ฉฐ ์ข์ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ ํฅ์์ผ๋ก ์ด์ด์ง
๐ฅช ์์์ ์์น์ ์๋ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝ์๋ O(1)์ ์๊ฐ ๋ณต์ก๋, ์์๋ฅผ ๋์ ์ถ๊ฐํ๋ ์ฐ์ฐ๋ O(1), ๋ง์ง๋ง ์์๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ๋ O(1), ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐํ๋ ์ฐ์ฐ์ O(N) (์ค๊ฐ์ ์์๋ฅผ ๋ฃ๊ธฐ ์ํด ์ดํ์ ์์๋ค์ ๋ชจ๋ ๋ฐ์ด์ผ ํ๊ธฐ ๋๋ฌธ), ์์์ ์์น์ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ๋ O(N) (์ค๊ฐ ์์ ์ ๊ฑฐํ๋ค๋ฉด array์ ์ ์์ ์ํด ๋น ๊ณต๊ฐ์ด ๋จ์ง ์๊ฒ๋ ๋ฐ์ด์ผ ํ๊ธฐ ๋๋ฌธ)
๐ฅช python) ์์ ํ์ธ/๋ณ๊ฒฝ์ arr[x], arr[x] = y / ์์ ๋์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ append() ํจ์ ํ์ฉ / ๋ง์ง๋ง ์์ ์ ๊ฑฐ๋ del arr[-1] / ์์์ ์์น์ ์์ ์ถ๊ฐ๋ insert() ํจ์ ํ์ฉ/ ์์์ ์์น์ ์์ ์ ๊ฑฐ๋ del arr[x] ํ์ฉ
2. Linked List
๐ฅช linked list(์ฐ๊ฒฐ ๋ฆฌ์คํธ)๋ ์์๋ค์ ์ ์ฅํ ๋ ๊ทธ ๋ค์ ์์๊ฐ ์๋ ์์น๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ฆ ์์๋ ์๋์ ๊ฐ์ด ์ฐ์์ ์ผ๋ก ์ ์ฅ๋์ด ์์ง ์๊ณ ์ด๊ณณ์ ๊ณณ ํฉ์ด์ ธ ์๋ค. ์ด ๋ ๋งจ ์์ ๋ฐ์ดํฐ๋ฅผ ์๋ค๋ฉด ์ฐ์์ ์ผ๋ก ์ด์ด์ง ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๐ฅช k๋ฒ์งธ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝํ๊ธฐ ์ํด O(k) ํ์(์๋ฅผ ๋ค์ด ์ธ ๋ฒ์งธ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ์ฒซ ๋ฒ์งธ ์์๋ถํฐ ์ธ ๋ฒ์งธ ์์๊น์ง ์ด๋ํด์ผ ํจ) / ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐ/ ์์์ ์์น์ ์์ ์ ๊ฑฐ๋ O(1)์ด๋ค. ๋ํ ์์๋ค์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฐ์ํด ์์ง ์์ cache hit rate๊ฐ ๋ฎ์ง๋ง ํ ๋น์ด ๋ค์ ์ฝ๋ค.
๐ฅช ์ฐ๊ฒฐ๋ฆฌ์คํธ์๋ ๊ฐ ์์๊ฐ ์์ ์ ๋ค์ ์์์ ์ฃผ์๋ฅผ ๋ค๊ณ ์๋ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(singly linked list). ๊ฐ ์์๊ฐ ์ด์ ์์์ ๋ค์ ์์์ ์ฃผ์๋ฅผ ๋ ๋ค ๋ค๊ณ ์๋ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ(doubly linked list) - ๋ฐ๋ผ์ ์ด์ ์์์ ์ ๋ณด๋ฅผ ์ ์ ์๋ ์ฅ์ ์ด ์์ง๋ง ์์๊ฐ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ ์ ๋ณด๊ฐ 1๊ฐ ๋ ์ถ๊ฐ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ด๋ค๋ ๋จ์ ์กด์ฌ. ๋์ด ์ฒ์๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ์ํ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(circular linked list) (๊ฐ ์์๊ฐ ์ด์ ๊ณผ ๋ค์ ์์์ ์ฃผ์๋ฅผ ๋ชจ๋ ๋ค๊ณ ์์ด๋ ์๊ด x)
๐ฅช ๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ชจ๋ ์์๋ค ๊ฐ์ ์ ํ ๊ด๊ณ ์ผ๋์ผ๋ก ์ ์. ๋ฐ๋ผ์ ๋ ์๋ฃ๊ตฌ์กฐ ๋ชจ๋ ์ ํ ์๋ฃ ๊ตฌ์กฐ
array | linked list | |
k๋ฒ์งธ ์์์ ์ ๊ทผ | O(1) | O(k) |
์์ ์์น์ ์์ ์ถ๊ฐ/์ ๊ฑฐ | O(N) | (์์น์ ์ฃผ์๋ฅผ ์๋ค๋ฉด) O(1) |
๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐฐ์น | ์ฐ์ | ๋ถ์ฐ์ |
์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๊ณต๊ฐ(overhead) | - | O(N) |
๐ฅช ์์์ ์์น์ ์๋ ์์๋ฅผ ํ์ธ/๋ณ๊ฒฝํ๋ ๋ฐ๋ O(N)์ ์๊ฐ ๋ณต์ก๋: ์์์ ์์น๊น์ง ๊ฐ๋๋ฐ ์์ฐจ์ ์ผ๋ก ์์ ์์๋๋ก ์ด๋ํด์ผ ํจ. ์ฒซ๋ฒ์งธ ์์์ ์ฃผ์๋ง ์๊ณ ์์ผ๋ฏ๋ก k๋ฒ์งธ ์์๊น์ง ์ด๋ํ๋๋ฐ k๋ฒ ์ด๋ / ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐํ๋ ๋ฐ๋ O(1)์ ์๊ฐ ๋ณต์ก๋. ์๋ฅผ ๋ค์ด 21๊ณผ 17 ์ฌ์ด์ 84๋ฅผ ๋ฃ๊ณ ์ถ์ ๋ 17๋ถํฐ ๋ค์ ์์๋ฅผ ๋ชจ๋ ์ด๋์ํฌ ํ์ ์์ด ๊ทธ์ 21๊ณผ 84์์ ๋ค์ ์์์ ์ฃผ์๋ง ๋ณ๊ฒฝ์ ํด์ฃผ๋ฉด ๊ฐ๋จํ๊ฒ ๋๋๊ธฐ ๋๋ฌธ. (๋ค๋ง, ์ถ๊ฐํ๊ณ ์ ํ๋ ์์์ ์ฃผ์๋ฅผ ์ ๊ฒฝ์ฐ๋ง O(1). ์ถ๊ฐํ๊ณ ์ ํ๋ ์์์ ๋ด์ฉ๋ง ์๋ค๋ฉด ์ฝ์ ํ๊ณ ์ ํ๋ ์์น๊น์ง ์ด๋ํด์ผ ํ๋ฏ๋ก O(N)) / ์์ ์์น์ ์์ ์ ๊ฑฐ๋ O(1). ์๋ฅผ ๋ค์ด 65 - 21 - 17์ด ์ฐ๊ฒฐ๋์ด ์์ ๋, 21 ์์๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด 65 ๋ค์์ ์ฃผ์๊ฐ 17๋ก ๋์ด์๊ฒ๋ ์ฐ๊ฒฐ๋ง ํด์ฃผ๋ฉด ๋จ (์ดํ 21์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง๋ฅผ ์ํด ์ถ๊ฐ ์์ ์ด ํ์ํ์ง๋ง)
๐ฅช ์๋ฅผ ๋ค์ด ์ปค์๊ฐ ๊ฐ๋ฆฌํค๋ ์์น์ ๊ธ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ง์ฐ๋ ๋ช ๋ น์ ์ํํ๋(O(1) ๊ฐ๋ฅ) ํ ์คํธ ์๋ํฐ์ ํจ์จ์ . ์ฆ ์์์ ์์น์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ณ ๋ คํ๋ฉด ์ข๋ค.
'Computer Science > Data Structures' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ Monotonic Stack (0) | 2024.09.23 |
---|---|
๐Binary Heap (0) | 2024.07.17 |
๐ณ Binary Tree ๐ณ (1) | 2023.12.19 |
๐ Map (0) | 2023.08.03 |
Types of Binary Tree๐ฒ (0) | 2023.01.10 |
๋๊ธ