1. ๋™์  ๋ฐฐ์—ด

  • ๋ชจ๋“  ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๊ณณ์— ์ €์žฅํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ ค

Memory Structure

png

  • os๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ œ๊ณต ์ค‘

  • Stack
    • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ €์žฅ๋˜๋Š” ์˜์—ญ
    • ์Šคํƒ ์˜์—ญ์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธ
    • ๋งค์šฐ ๋น ๋ฅธ ์•ก์„ธ์Šค์™€ ๋ณ€์ˆ˜์˜ ๋ช…์‹œ์  ํ• ๋‹นํ•ด์ œ ๋ถˆํ•„์š”
    • ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ ์กฐ์ • ๋ถˆ๊ฐ€
  • Heap
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ
    • ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ํ•ด์ œ
    • ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์ œํ•œ ์—†์Œ
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•จ (๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ•จ)
  • ํž™ ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ๋ฐฐ์—ด -> Dynamic array
    • Python: List
    • C++: vector
    • Java: ArrayList

Abstract Data Type

1) is_empty()

  • ํŒŒ์ด์ฌ์—์„œ ๋นˆ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฑฐ์ง“์„ ์˜๋ฏธ
test = []
print(bool(test))
False

2) append(element)

  • append() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ ์ˆ˜ํ–‰
test = [1,2,3,4,5,6]
test.append(7)
print(test)
[1, 2, 3, 4, 5, 6, 7]

3) insert(index, element)

  • insert() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ
test = [1,2,3,5]
test.insert(1,4)
print(test)
[1, 4, 2, 3, 5]

4) remove_last()

  • pop() ๋ฉ”์„œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ ์‚ญ์ œ
test = [1,4,2,3,5]
test.pop()
print(test)
[1, 4, 2, 3]

5) remove(index)

  • pop ๋ฉ”์„œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ธ๋ฑ์Šค ์ „๋‹ฌ ์‹œ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค ์œ„์น˜์— ์žˆ๋Š” ์›์†Œ ์‚ญ์ œ
test = [1,4,2,3]
test.pop(2)
print(test)
[1, 4, 3]

2. ์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ์™€ ์บ์‹œ

์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ (principle of locality)

  • ํ”„๋กœ์„ธ์Šค ๋‚ด ๋ช…๋ น์–ด ๋ฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ๊ตฐ์ง‘ํ™” ๊ฒฝํ–ฅ์ด ์žˆ์Œ์„ ๋œปํ•จ
  • ๊ณต๊ฐ„ ์ง€์—ญ์„ฑ (spatial locality)
    • ์ด๋ฒˆ์— ์ ‘๊ทผํ•œ ๋ณ€์ˆ˜๋Š” ์ด์ „์— ์ ‘๊ทผํ•œ ๋ณ€์ˆ˜ ๊ทผ์ฒ˜์— ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ

โญ๏ธ ๋ฐฐ์—ด์€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋ฌผ๋ฆฌ์ , ์„ ํ˜•์ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ๋‹ค. โญ๏ธ

png

์บ์‹œ (cache)

  • ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์žฅ์†Œ
  • ๋ฐฐ์—ด ์ค‘์˜ ํ•œ element๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—๊ฒŒ ์š”์ฒญํ•  ๊ฒฝ์šฐ ๋ฐฐ์—ด์ด ํ†ต์œผ๋กœ ์บ์‹œ์— ์˜ฌ๋ผ๊ฐ„๋‹ค.
  • ์ง€์—ญ์„ฑ์˜ ์›๋ฆฌ๋กœ ๋ฐฐ์—ด์˜ ํ•œ element๊ฐ€ ์š”์ฒญ ๋  ๊ฒฝ์šฐ ๋‹ค๋ฅธ element๋“ค๋„ ์š”์ฒญ๋  ํ™•๋ฅ ์ด ๋†’๋‹ค.
    • ์ด ๋•Œ ๋‹ค๋ฅธ element๊ฐ€ ์š”์ฒญ๋  ๊ฒฝ์šฐ ์บ์‹œ์—์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋จ
    • ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ ์˜ฌ ๋•Œ 20 ~100 ํด๋Ÿญ ์†Œ์š”
    • ์บ์‹œ์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ฌ ๋•Œ 3ํด๋Ÿญ ์†Œ์š”
    • ์„ฑ๋Šฅ์€ ์›”๋“ฑํ•˜๊ฒŒ ํ–ฅ์ƒ

3. ์ธ๋ฑ์‹ฑ (Indexing)

  • ์ธ๋ฑ์Šค: ๋ฆฌ์ŠคํŠธ์—์„œ element์˜ ์œ„์น˜
  • ์ธ๋ฑ์‹ฑ: ํŠน์ • ์œ„์น˜์˜ element๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ
  • ๋ฐ์ดํ„ฐ ์ฃผ์†Œ ๊ฐ’ = ๋ฐฐ์—ด์˜ ์ฒซ ์ฃผ์†Œ ๊ฐ’ + (๋ฐ์ดํ„ฐ ํฌ๊ธฐ * ์ธ๋ฑ์Šค)
    • ํ•œ ๋ฒˆ์˜ ์—ฐ์‚ฐ์œผ๋กœ๋„ ๊ฐ’์— ์ ‘๊ทผ ๊ฐ€๋Šฅ -> O(1)
    • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜ ์ƒ๊ด€ ์—†์Œ

png

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•

n = 10
result = 0
for i in range(1, n+1):
  for j in range(i):
    result += 1
print(result)

-> n(n+1)/2 ๋ฒˆ ๊ณ„์‚ฐ : O(n^2)

n = 10
result = 0
for i in range(1, n+1):
  result += i
print(result)

-> n๋ฒˆ ๊ณ„์‚ฐ : O(n)

n = 10
result = n*(n+1)/2
print(result)

-> 1๋ฒˆ ๊ณ„์‚ฐ : O(1)

  • ์œ„ ์ฝ”๋“œ ๋“ค์€ n์˜ ๊ฐ’์ด ์ž‘๋‹ค๋ฉด ํฐ ์ฐจ์ด ์—†๊ฒŒ ๋Š๊ปด์ง€์ง€๋งŒ n์˜ ๊ฐ’์ด ์ปค์ง„๋‹ค๋ฉด ํšจ์œจ์„ฑ์˜ ์ฐจ์ด๊ฐ€ ์ปค์ง„๋‹ค

png

4. ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ์‚ญ์ œ

  • capacity : ๋ฐฐ์—ด์ด ํ™•๋ณดํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
  • size: ์ฑ„์›Œ์ง„ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ

1) ๋ฐฐ์—ด ๋งจ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€

  • Capacity๊ฐ€ size๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
    • ๋‹จ์ˆœํžˆ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์— ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€ํ•˜๋ฉด ๋จ : O(1)
  • ๋ฐฐ์—ด์ด ๊ฐ€๋“ ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ
    • ์ถฉ๋ถ„ํ•œ ๊ณต๊ฐ„ ๋‹ค์‹œ ํ™•๋ณด ํ›„ ๊ธฐ์กด ๋ฐฐ์—ด์š”์†Œ๋ฅผ ๋ชจ๋‘ ๋ณต์‚ฌํ•œ ํ›„ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ.
    • ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋งŒํผ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n)
    • capacity๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ปค์„œ ์ถ”๊ฐ€ํ•˜๋Š” ๋™์•ˆ์€ O(1)์ด์ง€๋งŒ ๋ฐฐ์—ด์ด ๊ฝ‰ ์ฐผ์„ ๋•Œ ํ•œ๋ฒˆ O(n)
    • ๋™์  ๋ฐฐ์—ด์—์„œ ๋ฐฐ์—ด์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ๋ฐฐ์—ด ํฌ๊ธฐ์˜ 2๋ฐฐ๋งŒํผ capacity ์žก์Œ

2) ๋ฐฐ์—ด ๋งจ ๋งˆ์ง€๋ง‰ ์‚ญ์ œ

  • ๋ฐฐ์—ด์˜ ๋งจ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋งŒ ์‚ญ์ œ
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•  ํ•„์š” ์—†๊ณ  ์š”์†Œ๋งŒ ์‚ญ์ œํ•ด๋„ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
  • O(1)

3) ๋ฐฐ์—ด ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

  • ์ด๋ฏธ ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ชจ๋‘ ํ•œ ๋ฒˆ ์”ฉ ๋’ค๋กœ ์˜ฎ๊น€
  • ๊ทธ ํ›„ ๋นˆ ์ž๋ฆฌ์— ์ƒˆ๋กœ์šด ์š”์†Œ ์‚ฝ์ž…
  • ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ n์ด๋ผ๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ ๋งจ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(n)

png

png

## 4) ๋ฐฐ์—ด ์ค‘๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • ๋งจ ์•ž์˜ ๋ฐ์ดํ„ฐ (4)๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ•œ ์นธ์”ฉ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•จ
  • O(n)