๐Ÿ’พ data structure basics

Lana Chungยท2021๋…„ 5์›” 16์ผ
0

algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
1/4

2021/05/13-14
S5-Week 2 : Data Structure and Algorithm Core

keyword : ์ž๋ฃŒ ๊ตฌ์กฐ, ์ถ”์ƒ์ž๋ฃŒํ˜•(ADT), ํ• ๋‹น๊ณผ ์ฐธ์กฐ

  • ํšจ์œจ์„ฑ
  • ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ, ์†๋„, ํ˜‘์—… ๋ชจ๋‘ ํฌํ•จ

intro

  • OOP์˜ ๋ชฉ์ ์€ ์žฌ์‚ฌ์šฉ๊ณผ ์œ ์ง€๋ณด์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํšจ์œจ์„ฑ
  • ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ปดํ“จํ„ฐ ๊ณผํ•™์— ์žˆ์–ด์„œ ์ „์ฒด์ ์ธ ๊ด€์ ์˜ ๊ธฐ์ดˆ๊ณต์‚ฌ ๊ฐœ๋…์ด๋‹ค.
  • ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์‹œ์ž‘ : ์‹ค์ƒํ™œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰์˜ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ, ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๋Š” ๊ฐœ๋…์ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.
  • ํšจ์œจ์  ์ฒ˜๋ฆฌ๋ž€?
    - ์ž๋™ํ™”, ๋น ๋ฅธ ๊ณ„์‚ฐ, ๋ฐ˜๋ณต ๋‚ด์šฉ ์ฒ˜๋ฆฌ, ๊ฐ’์ด ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ..

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

  • ๋ฐฐ์—ด

    • ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์™€ ํŠœํ”Œ์„ ํ†ตํ•ด ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ธฐ๋ณธ์ธ ๋ฐฐ์—ด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ๋ฐฐ์—ด์˜ ๊ธฐ๋Šฅ) ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ๋ฑ์Šค๋กœ ๋ฌถ๋Š” ๊ฒƒ
    • ํŠน) ์ธ๋ฑ์Šค ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ํŒŒ์ด์ฌ์€ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์ด ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ธฐ๋Šฅ ์ง€์› (์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง• ๋ชจ๋‘ ๊ฐ–๊ณ  ์žˆ์Œ)

    • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ >> ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ >> ๊ณ ์ •์œผ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ์ •์  ์ฒ˜๋ฆฌ๋ผ๊ณ  ํ•จ (์ธ๋ฑ์Šค๋กœ ๊ฐ’ ํ• ๋‹นํ•˜๋Š” ๋“ฑ)
    • ์ธ๋ฑ์Šค ํฌ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅ, ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์„ ๋…ธ๋“œ๋กœ ๊ฐ–์„ ์ˆ˜ ์žˆ์Œ

์™ธ์žฅ ํ•จ์ˆ˜๋ณด๋‹ค ๋‚ด์žฅ ํ•จ์ˆ˜๊ฐ€ ๋” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์“ด๋‹ค

์ปดํ“จํ„ฐ ๊ณผํ•™์˜ ์ž๋ฃŒ ๊ตฌ์กฐ

  • ์Šคํƒ
  • ํ
  • ๋ฆฌ์ŠคํŠธ (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜)
  • ํŠธ๋ฆฌ
  • ๊ทธ๋ž˜ํ”„ ..

ํŒŒ์ด์ฌ์˜ ์‹œํ€€์Šค(์—ฐ์†) ์ž๋ฃŒํ˜•

  • ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)
  • ํŠœํ”Œ(๋ฐฐ์—ด)
  • range(๋ฐ˜๋ณต)
  • string(๋ฌธ์ž์—ด)...

์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ธฐ๋ณธ์€ ๋ฐฐ์—ด(๊ณ ์ •๋œ ๊ธธ์ด)์ด๋‹ค.

  • ๋ฆฌ์ŠคํŠธ๋‚˜ ํŠœํ”Œ์˜ ํ•ต์‹ฌ์€ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
  • [0:4] ๋“ฑ์œผ๋กœ ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅ
  • ๋‹ค์–‘ํ•œ ๋ฌธ์ž์—ด ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ
    • ๋ฌธ์ž์—ด ๋’ค์ง‘๊ธฐ์˜ 3๊ฐ€์ง€ ์˜ˆ์‹œ
      • reverse() : ๋ฆฌ์ŠคํŠธ ์ œ๊ณต ๋ฉ”์†Œ๋“œ
      • reversed: ๋‚ด์žฅ ํ•จ์ˆ˜
      • ๋ฐ˜๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ, ๋Œ€์ž…๊ฐœ๋… ํ™œ์šฉ

์ž๋ฃŒ๊ตฌ์กฐ์™€ ํšจ์œจ์„ฑ

  • ์‹œ๊ฐ„ ๋ณต์žก์„ฑ, Big O ํ‘œ๊ธฐ๋ฒ•
  • ๋ณต์žก๋„๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์ด ์žˆ์ง€๋งŒ 100% ํšจ์œจ์„ฑ์„ ๋งž์ถœ ์ˆœ ์—†๋‹ค
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ์–ผ๋งˆ๋‚˜ ์‹คํ–‰์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋Š”์ง€ (์•Œ๊ณ ๋ฆฌ์ฆ˜) (์†Œํ”„ํŠธ์›จ์–ด) (๋” ์ค‘์š”ํ•ด์ง)
  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : ์–ผ๋งˆ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๊ณต๊ฐ„์ด ํ•„์š”ํ•œ์ง€ (ํ•˜๋“œ์›จ์–ด)

Big O ํ‘œ๊ธฐ๋ฒ•(notation)

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰ ํšจ์œจ์„ฑ์— ๋Œ€ํ•ด ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ๊ณผ๊ฑฐ์—๋Š” ์•ˆ๋“œ, ios app ์ค‘์‹ฌ์ด์—ˆ์„๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ฑ๋Šฅ์ด ๋˜๊ฒŒ ์ค‘์š”ํ–ˆ์Œ.

  • ์š”์ฆ˜์—” ๋จธ์‹ ๋Ÿฌ๋‹, ๋”ฅ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ค‘์‹ฌ์ด ๋˜๋ฉด์„œ ํšจ์œจ ๋ณด๋‹ค๋Š” ์ •ํ™•์„ฑ์ด ๋” ์ค‘์š”ํ•ด์ง

  • ๋น…์˜คํ‘œ๊ธฐ๋ฒ•์€ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ฐ’ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰ ์†๋„์˜ ๋ณ€ํ™” ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ๋ฒ•

    • ์ž…๋ ฅ๊ฐ’ ์ฆ๊ฐ€ ๊ธฐ์ค€ ์‹คํ–‰์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ธธ์–ด์ง€๋Š”๊ฐ€?
  • ๋น…์˜คํ‘œ๊ธฐ๋ฒ•์€ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€(๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ์„ ์–ผ๋งˆ๋‚˜ ๋ฐ˜๋ณตํ•˜์˜€๋Š”์ง€)์— ๋”ฐ๋ผ ํšจ์œจ์„ฑ ํ™•์ธ

  • ํŠน์ • ๋ฐฉ๋ฒ•๋ก  ํ•˜๋‚˜๋งŒ์œผ๋กœ๋Š” ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค

    • O(n) (์ฝ์„๋• ๋น…์˜ค์—”)
  • Pop ๋ฉ”์˜๋“œ

    • O(n) : ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ์Œ
  • ์„ ํ˜• ์‹œ๊ฐ„์ด ์ƒ์ˆ˜ ์‹œ๊ฐ„๋ณด๋‹ค ์šฐ์„ ์‹œ ๋˜๋ฏ€๋กœ ์ƒ์ˆ˜์‹œ๊ฐ„์€ ๋ฌด์‹œ๋˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„์€ ์„ ํ˜•์‹œ๊ฐ„ linear time (O(n))์ด ๋œ๋‹ค.

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ

    • ๋กœ์ง์— ๋”ฐ๋ผ Big O ๋ณต์žก๋„๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ
    • ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ์ฒซ ์•„์ดํ…œ์€ O(1), ๋งˆ์ง€๋ง‰ ์•„์ดํ…œ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜๋ฏ€๋กœ O(n)์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ
    • ์ตœ์•…์˜ ๊ฒฝ์šฐ ํŒ๋‹จ ๊ฐ€๋Šฅ >> ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ์ƒํ•œ์„  ๊ธฐ์ค€์œผ๋กœ ํ‘œ๊ธฐ
  • ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฐ๊ณผ ๋ฒ”์œ„ ํ…Œ์ŠคํŠธ

  • n์˜ ๊ฐ’(์ž…๋ ฅ๊ฐ’)์— ๋”ฐ๋ผ while์˜ ๋ฐ˜๋ณต์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋น…์˜ค ํ‘œ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค

    • ์ž…๋ ฅ๊ฐ’๊ณผ ์ถœ๋ ฅ๊ฐ’์ด ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์„ ํ˜•์‹œ๊ฐ„(O(n))์ด ๋  ์ˆ˜ ์—†๋‹ค
  • ๋ฐ˜๋ณต๋ฌธ, ๋‚ด๋ถ€ ๋กœ์ง์„ ๋ณด๊ณ  ํšจ์œจ์„ฑ์„ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค

  • ์ฝ”๋“œ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์˜ˆ์ธก

    • ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํ™•์ธํ•  ๋•Œ ์šฐ์„ ์ ์œผ๋กœ ๊ณ ๋ คํ•  ๊ฒƒ์€ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ์„œ,
    • ๋ฐ˜๋ณต๋ฌธ์ด 2๊ฐœ๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ˆ๊นŒ O(n^2)์ด๊ฒ ๋‹ค >> ๋จผ์ € ์˜ˆ์ธก
    • ๊ทผ๋ฐ ๋‘๋ฒˆ์งธ ๋ฐ˜๋ณต๋ฌธ์„ ๋ณด๋ฉด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ 1๋ฒˆ์ด๊ธฐ ๋•Œ๋ฌธ์— O(n) ์‹œ๊ฐ„์ด ์†Œ์š”๋จ
  • ํŠน์ง• ์ •๋ฆฌ

    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์„ฑ์„ ์ƒํ•œ์„  ๊ธฐ์ค€์œผ๋กœ ํ‘œ๊ธฐํ•จ
      • O(n), O(n^2) ๋‘˜๋‹ค ๋‚˜์˜จ๋‹ค๋ฉด O(n)์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค๋Š” ๊ฒƒ?
      • ๊ทธ๋Ÿฐ๋ฐ ์ตœ์„ ๋ณด๋‹ค ์ตœ์•…์„ ๋” ๋งŽ์ด ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์€?
        • ๋งŒ์•ฝ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด 1. ์ตœ์„  n, ์ตœ์•… n ์ด ์žˆ๊ณ  2. ์ตœ์„  logn, ์ตœ์•… n! ์ด ์žˆ๋‹ค๋ฉด 1์„ ์„ ํƒํ•œ๋‹ค๋Š” ๊ฒƒ
    • ์ƒ์ˆ˜ํ•ญ ๋ฌด์‹œ
      • (O(5n)์ด ์•„๋‹ˆ๋ผ O(n))
    • ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ฐ’(N)์— ๋”ฐ๋ผ ๋ณต์žก๋„ ํŒ๋‹จ
      • O(N^2 + 2N + 10) => O(N^2)
profile
๊ทธ๊ฒŒ ์‰ฌ์šด ์ผ์ด์—ˆ๋‹ค๋ฉด, ์•„๋ฌด๋Ÿฐ ์ฆ๊ฑฐ์›€๋„ ์–ป์„ ์ˆ˜ ์—†์—ˆ์„ ๊ฒƒ์ด๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€