Computer Science/Data Structures

๐ŸฅชArray & Linked List

metamong 2024. 1. 8.

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) ๊ฐ€๋Šฅ) ํ…์ŠคํŠธ ์—๋””ํ„ฐ์— ํšจ์œจ์ . ์ฆ‰ ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ์ข‹๋‹ค. 


BaaarkingDog

geeksforgeeks

 

 

'Computer Science > Data Structures' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐ŸŒณ Binary Tree ๐ŸŒณ  (1) 2023.12.19
set() & dict() - ์ง‘ํ•ฉ๊ณผ ๋งต  (0) 2023.08.03
Binary heap  (0) 2023.02.06
Types of Binary Tree๐ŸŒฒ  (0) 2023.01.10
priority queue(binary heap)  (0) 2023.01.09

๋Œ“๊ธ€