Search

๋ฐฐ์—ด

Created At
2021/05/11 11:34
Updated At
2022/03/14 09:51
๋ถ„๋ฅ˜
์ž๋ฃŒ๊ตฌ์กฐ

C ๋ฐฐ์—ด vs. ํŒŒ์ด์ฌ ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)

C ์˜ ๋ฐฐ์—ด์—์„œ๋Š” ์‹ค์ œ ๊ฐ’๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋“ค์–ด์˜ค์ง€๋งŒ, ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด(๋ฆฌ์ŠคํŠธ)์—์„œ๋Š” ์‹ค์ œ ๊ฐ’์ด ๋“ค์–ด์˜ค๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๊ฐ’์˜ ๋ ˆํผ๋Ÿฐ์Šค(์ฃผ์†Œ) ๊ฐ’์ด ๋“ค์–ด์˜จ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํƒ€์ž…์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์‹ค์ œ ๊ฐ’์˜ ํฌ๊ธฐ๋„ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
C ๋ฐฐ์—ด
ํŒŒ์ด์ฌ ๋ฐฐ์—ด
C๋ฐฐ์—ด๊ณผ ํŒŒ์ด์ฌ๋ฐฐ์—ด์˜ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ : http://www.laurentluce.com/posts/python-list-implementation/

๋ฐฐ์—ด ์ ‘๊ทผ vs. ํƒ์ƒ‰

๋ฐฐ์—ด์˜ ์ ‘๊ทผ

์ธ๋ฑ์Šค๋ฅผ ์ง์ ‘ ์ง€์ •ํ•ด์„œ ์ ‘๊ทผ (O(1))

๋ฐฐ์—ด์˜ ํƒ์ƒ‰

์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” ๊ฐ’ ํƒ์ƒ‰ (O(n))

๋ฐฐ์—ด ์—ฐ์‚ฐ ์‹œ๊ฐ„ ๋ณต์žก๋„

์ถ”๊ฐ€ ์—ฐ์‚ฐ(append operation)

ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด์€ ๋‚ด๋ถ€์ ์œผ๋กœ C์–ธ์–ด์˜ ์ •์ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋” ์ปค์ ธ์•ผํ•œ๋‹ค๋ฉด, ๋‘ ๋ฐฐ๋กœ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์˜ˆ์•ฝํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
๋ฐฐ์—ด์˜ ์ถ”๊ฐ€์—ฐ์‚ฐ์€ ๋‘ ๊ฐ€์ง€ ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค.

case1. ๋ฐฐ์—ด์— ๊ณต๊ฐ„์ด ๋‚จ์•„์žˆ์„ ๋•Œ

๊ทธ๋ƒฅ ๋น„์–ด์žˆ๋Š” ๋ฐฐ์—ด ๊ณต๊ฐ„์— ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ์ ‘๊ทผํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ O(1) ์ด๋‹ค.

case2. ๋ฐฐ์—ด์— ๊ณต๊ฐ„์ด ์—†์„ ๋•Œ(=๊ฝ‰ ์ฐผ์„ ๋•Œ)

๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋ฐฐ์—ด๋ณด๋‹ค ๋‘ ๋ฐฐ ํฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐฐ์—ด๋กœ ์˜ฎ๊ฒจ์•ผ ํ•œ๋‹ค.
๊ธฐ์กด ๋ฐฐ์—ด์—์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด(๋ฉ”๋ชจ๋ฆฌ 2๋ฐฐ)๋กœ ๊ฐ’์„ ์‹น ๋‹ค ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
๋”ฐ๋ผ์„œ n๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ ๋ฐฐ์—ด์— ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—… O(n) + ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ•˜๋‚˜ ์ถ”๊ฐ€ O(1)
๊ฒฐ๊ณผ์ ์œผ๋กœ O(n) ์ด๋‹ค.

๋ถ„ํ•  ์ƒํ™˜ ๋ถ„์„

์‹œ๊ฐ„๋ณต์žก๋„ ๊ณ„์‚ฐ ์‹œ, ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜๊ธด ํ•˜์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ฌ ํ™•๋ฅ ์ด ๋งค์šฐ ์ ์„ ์‹œ์—๋Š” ์ด๋Š” ๋ถˆํ•ฉ๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„ํ•  ์ƒํ™˜ ๋ถ„์„ ์ด๋ผ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„ ๊ณ„์‚ฐ๋ฒ•์ด ์žˆ๋‹ค.
๋ถ„ํ•  ์ƒํ™˜ ๋ถ„์„์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„์˜ ํ‰๊ท ์น˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ถ„์„ ๋ฐฉ๋ฒ•์ด๋‹ค.
n๋ฒˆ ์ˆ˜ํ–‰ํ• ๋•Œ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„ / n

์‚ฝ์ž… ์—ฐ์‚ฐ(insert operation)

์ถ”๊ฐ€ ์—ฐ์‚ฐ(append) ๋Š” ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€๋ฅผ ํ•˜๋Š” ์—ฐ์‚ฐ์ด๊ณ , ์‚ฝ์ž…(insert) ๋Š” ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค.

case1. ๋ฐฐ์—ด์— ๊ณต๊ฐ„์ด ๋‚จ์•„์žˆ์„ ๋•Œ

์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.
n๊ฐœ์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋“ค์„ ํ•œ ์นธ์”ฉ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋’ค๋กœ ๋ฐ€๊ธฐ : O(n)
์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์‚ฝ์ž… : O(1)
๊ฒฐ๋ก  : O(n+1) => O(n)

case2. ๋ฐฐ์—ด์— ๊ณต๊ฐ„์ด ์—†์„ ๋•Œ(=๊ฝ‰ ์ฐผ์„ ๋•Œ)

์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๊ฐ’์„ ๋ณต์‚ฌ : O(n)
ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€๊ธฐ : O(n)
์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ์‚ฝ์ž… : O(1)
๊ฒฐ๋ก  : O(2n+1) => O(n)

์‚ญ์ œ ์—ฐ์‚ฐ(delete operation)

๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด, ์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ์ธ๋ฑ์Šค๋ณด๋‹ค ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์•ž์ชฝ์œผ๋กœ ํ•œ ์นธ์”ฉ ๋‹น๊ธฐ๋ฉด ๋œ๋‹ค.

case1. ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šธ ๋•Œ (์ตœ์•…์˜ ๊ฒฝ์šฐ)

(n-1)๊ฐœ์˜ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋“ค์„ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ๋‹น๊ธฐ๊ธฐ : O(n-1)
๊ฒฐ๋ก  : O(n-1) => O(n)

case2. ๋งจ ๋’ค ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šธ ๋•Œ (์ตœ์ƒ์˜ ๊ฒฝ์šฐ)

๋ฐ์ดํ„ฐ์˜ ์ด๋™์—†์ด ๊ทธ๋ƒฅ ๋ฐฐ์—ด์˜ ์‚ฌ์šฉ ๊ณต๊ฐ„์„ ํ•œ ์ธ๋ฑ์Šค ์ค„์ด๋ฉด ๋œ๋‹ค.
del ํ‚ค์›Œ๋“œ๋ฅผ ์“ฐ๋ฉด ํŒŒ์ด์ฌ ๋‚ด๋ถ€์ ์œผ๋กœ ์•Œ์•„์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๊ณ , ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋„ ์ค„์—ฌ์ค€๋‹ค. (C ์ •์ ๋ฐฐ์—ด๊ณผ์˜ ์ฐจ์ด์ )
๊ฒฐ๋ก  : O(1)