์ž๋ฃŒ๊ตฌ์กฐ

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ณต์žก๋„

soowitty 2023. 10. 22. 15:55

๐Ÿ’ก ๋ณธ ๊ธ€์€ ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ ๋„์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

intro - ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž๋ฃŒ๊ตฌ์กฐ

์‚ฌ์ „์  ์˜๋ฏธ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผ · ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๋œปํ•œ๋‹ค.
์‰ฝ๊ฒŒ ๋งํ•ด, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ทธ๋ฆ‡(Data Container) ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํŠน์ • ์ƒํ™ฉ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋งŽ์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์•Œ์•„๋‘๋ฉด ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ’€๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ จ์˜ ์œ ํ•œํ•œ ์ ˆ์ฐจ์ด๋‹ค.

๐Ÿ“Œ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅ๋˜๊ณ , ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅ๋œ ๊ฐ’์—
์—ฐ์‚ฐ์„ ์ ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ถœ๋ ฅ์„ ๊ณ„์‚ฐํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.


5.1 ๋ณต์žก๋„

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•  ๋•Œ ๋ณต์žก๋„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋ณต์žก๋„๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋กœ ๋‚˜๋‰œ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ํšจ์œจ์„ฑ์„,
๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ณต๊ฐ„(๋ฉ”๋ชจ๋ฆฌ) ํšจ์œจ์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.

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

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ ํฌ๊ธฐ์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

๋น…์˜ค Big-O

์ •์˜

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

๊ณ„์‚ฐ ๋ฐฉ๋ฒ•

์ตœ๊ณ ์ฐจํ•ญ๋งŒ์„ ํ‘œ๊ธฐํ•œ๋‹ค. ์ƒ์ˆ˜ํ•ญ, ๊ณ„์ˆ˜, ์˜ํ–ฅ๋ ฅ ์—†๋Š” ํ•ญ์€ ๋ฌด์‹œํ•œ๋‹ค.

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์‹œ๊ฐ„ ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์‚ฌ์šฉ์ž ์ฆ๊ฐ€์œจ์— ๋”ฐ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ
- ์ž…๋ ฅ ๊ฐ’์ด ์ถฉ๋ถ„ํžˆ ํฌ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ์ฆ๊ฐ€ ์†๋„ ์ธก๋ฉด์—์„œ ๋‚˜๋จธ์ง€ ํ•ญ์ด ์ฐจ์ง€ํ•˜๋Š” ๋น„์ค‘์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋ฏธ๋ฏธํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ํฌ๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Œ

์ฆ‰, Big-O๋Š” ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์ œ๊ฑฐํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„์„์„ ์‰ฝ๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.

1) ์ƒ์ˆ˜ํ•ญ ๋ฌด์‹œ
O(N+5) -> O(N)

2) ๊ณ„์ˆ˜ ๋ฌด์‹œ
O(3N) -> O(N)

3) ์˜ํ–ฅ๋ ฅ ์—†๋Š” ํ•ญ ๋ฌด์‹œ
O(2N^2+N+5) -> O(N^2)

์ข…๋ฅ˜

ํ‘œ๊ธฐ๋ฒ• ์„ค๋ช… ์˜ˆ
O(1) ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ์™€ ์ƒ๊ด€ ์—†์ด ์‹คํ–‰์‹œ๊ฐ„์ด ์–ธ์ œ๋‚˜ ์ผ์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํƒ์—์„œ push, pop
O(logn) ์—ฐ์‚ฐ์ด ํ•œ ๋ฒˆ ์‹คํ–‰๋  ๋•Œ ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ ˆ๋ฐ˜ ๊ฐ์†Œํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜, tree ํ˜•ํƒœ ์ž๋ฃŒ๊ตฌ์กฐ ํƒ์ƒ‰
O(n) ์ž…๋ ฅ๊ฐ’์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹คํ–‰์‹œ๊ฐ„๋„ ์„ ํ˜•์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ for๋ฌธ
O(nlogn) ๋Œ€๋ถ€๋ถ„์˜ ํšจ์œจ ์ข‹์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค. ํ€ต ์ •๋ ฌ, ๋ณ‘ํ•ฉ์ •๋ ฌ, ํž™ ์ •๋ ฌ
O(n^2) ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ n๋งŒํผ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ, ๊ทธ ์•ˆ์—์„œ ๋˜ n๋งŒํผ ๋ฐ˜๋ณตํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์ค‘ for๋ฌธ, ์‚ฝ์ž…์ •๋ ฌ, ๊ฑฐํ’ˆ์ •๋ ฌ, ์„ ํƒ์ •๋ ฌ
O(2^n) ์ฃผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜

Faster O(1) < O(log n) < O(n) < O(nlogn) < O(n^2) < O(2^n) < O(n!) Slower

๊ณต๊ฐ„ ๋ณต์žก๋„

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” **๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์–‘**์„ ์˜๋ฏธํ•œ๋‹ค.

์ด ํ•„์š” ๊ณต๊ฐ„ = ๊ณ ์ • ๊ณต๊ฐ„ + ๊ฐ€๋ณ€ ๊ณต๊ฐ„

- ๊ณ ์ • ๊ณต๊ฐ„ : ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฌด๊ด€ํ•œ ๊ณต๊ฐ„ (์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์˜ ํšŸ์ˆ˜๋‚˜ ํฌ๊ธฐ์™€ ๊ด€๊ณ„ ์—†๋Š” ๊ณต๊ฐ„)

  • ์ฝ”๋“œ ์ €์žฅ ๊ณต๊ฐ„, ๋‹จ์ˆœ ๋ณ€์ˆ˜, ๊ณ ์ • ํฌ๊ธฐ์˜ ๊ตฌ์กฐ ๋ณ€์ˆ˜, ์ƒ์ˆ˜
    - ๊ฐ€๋ณ€ ๊ณต๊ฐ„: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰๊ณผ ๊ด€๋ จ ์žˆ๋Š” ๊ณต๊ฐ„
  • ์‹คํ–‰ ์ค‘ ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ณต๊ฐ„
    - ๊ณ ์ • ๊ณต๊ฐ„์€ ์ƒ์ˆ˜์ด๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ€๋ณ€ ๊ณต๊ฐ„์— ๋”ฐ๋ผ ์ขŒ์šฐ๋œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„์˜ ๊ด€๊ณ„

๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„(=๋ฐ˜๋น„๋ก€) ๊ด€๊ณ„์ด๋‹ค.
- ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ -> ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ง€ (ex. ๋ณ‘ํ•ฉ์ •๋ ฌ)
- ๋Š๋ฆฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ -> ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์ง€ (ex. ๋ฒ„๋ธ”์ •๋ ฌ)

Reference

https://velog.io/@ghldjfldj/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%9E%80

https://codermun-log.tistory.com/235

https://velog.io/@nana-moon/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B9%85%EC%98%A4-%ED%91%9C%EA%B8%B0%EB%B2%95big-O-notation%EC%9D%B4%EB%9E%80

https://noahlogs.tistory.com/27

https://ssdragon.tistory.com/100

https://deep-learning-study.tistory.com/434

https://madplay.github.io/post/time-complexity-space-complexity

https://www.youtube.com/watch?v=LBR9K8NPtvQ

'์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ  (0) 2023.11.11