μžλ£Œκ΅¬μ‘°πŸ’‘


  • μžλ£Œκ΅¬μ‘°λž€β“

    • 데이터 κ°’μ˜ λͺ¨μž„, 데이터 κ°„μ˜ 관계, 그리고 데이터에 μ μš©ν•  수 μžˆλŠ” ν•¨μˆ˜λ‚˜ λͺ…령을 의미
    • 효과적으둜 μ„€κ³„λœ μžλ£Œκ΅¬μ‘°λŠ” μ‹€ν–‰μ‹œκ°„ ν˜Ήμ€ λ©”λͺ¨λ¦¬ μš©λŸ‰κ³Ό 같은 μžμ›μ„ μ΅œμ†Œν•œμœΌλ‘œ μ‚¬μš©ν•˜λ©΄μ„œ 연산을 μˆ˜ν–‰ν•˜λ„λ‘ ν•΄μ€€λ‹€

  • 자료ꡬ쑰의 λͺ©μ β—
    • 자료λ₯Ό 더 효율적으둜 μ €μž₯ν•˜κ³ , κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©.
      잘 μ„ νƒλœ μžλ£Œκ΅¬μ‘°λŠ” μ‹€ν–‰μ‹œκ°„μ„ λ‹¨μΆ•μ‹œμΌœμ£Όκ±°λ‚˜ λ©”λͺ¨λ¦¬ μš©λŸ‰μ˜ μ ˆμ•½μ„ μ΄λŒμ–΄ 냄

  • μ˜ˆμ‹œπŸ’‘

    • 예λ₯Ό λ“€μ–΄ 빈 μ±…μž₯κ³Ό 책듀이 μžˆμ„ λ•Œ μ±…μž₯에 μ΅œλŒ€ν•œ λ§Žμ€ 책을 넣을 수 μžˆμœΌλ©΄μ„œ,
      책을 μ°Ύμ•„μ„œ κΊΌλ‚Όλ•Œλ„ 효율적인 방법을 생각해본닀.

      • μ±…μž₯에 책을 γ„± -> γ…Ž μ˜€λ¦„μ°¨μˆœμœΌλ‘œ 정리λ₯Ό ν•œλ‹€
      • μ±…μ˜ μΉ΄ν…Œκ³ λ¦¬ λ³„λ‘œ μ±…μž₯의 측을 λ‚˜λˆ„μ–΄ μ‚¬μš©ν•œλ‹€
    • μ±…μž₯ = λ©”λͺ¨λ¦¬ , μ±… = 데이터 라고 μƒκ°ν–ˆμ„ λ•Œ
      μœ„μ™€ 같이 κ°€μž₯ 효율적인 λ°©λ²•μœΌλ‘œ 데이터(=μ±…)λ₯Ό λ©”λͺ¨λ¦¬(=μ±…μž₯)에 μ €μž₯ν•˜λŠ” 방법(=μ •λ ¬κ·œμΉ™)을 자료ꡬ쑰라 ν•  수 μžˆλ‹€

    • ν•΄λ‹Ή λΈ”λ‘œκ·Έ μ°Έκ³ 


🧑자료ꡬ쑰의 선택기쀀

πŸ’›μ‹œκ°„λ³΅μž‘λ„

  • μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„
  • μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰μ‹œκ°„μ΄ 짧을 수둝 쒋은 μ‹œκ°„λ³΅μž‘λ„

βœ…λΉ…μ˜€(BIG-O ν‘œκΈ°λ²•)

- μ•Œκ³ λ¦¬μ¦˜ μ΅œμ•…μ˜ μ‹€ν–‰μ‹œκ°„μ„ ν‘œκΈ°
- μ‹€ν–‰ 속도 : O(1) < O(log N) < O(N) < O(N log N) < O(N^2) < O(N^3) < O(2^N)

BIG-O

πŸ’›κ³΅κ°„λ³΅μž‘λ„

  • μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ λ©”λͺ¨λ¦¬μ˜ 크기
  • λ°μ΄ν„°μ˜ 크기와 비ꡐ해 μ €μž₯κ³΅κ°„μ˜ 크기가 λ„ˆλ¬΄ λ‚¨κ±°λ‚˜ λΆ€μ‘±ν•˜μ§€ μ•Šμ•„μ•Ό 함

μ΅œκ·Όμ—λŠ” κ³΅κ°„λ³΅μž‘λ„ 보단 μ‹œκ°„λ³΅μž‘λ„μ˜ μ€‘μš”μ„±μ΄ 더 뢀각 됨


🧑자료ꡬ쑰의 μ’…λ₯˜

πŸ’›λ°°μ—΄

  • λ™μΌν•œ νƒ€μž…μ˜ 데이터듀을 μ €μž₯ν•˜λ©°, κ³ μ •λœ 크기λ₯Ό κ°€μ§€κ³  μžˆλ‹€.
  • μΈλ±μŠ€κ°’μ„ μ§€λ‹ˆκ³  μžˆμ–΄ 인덱슀 κ°’μœΌλ‘œ 각 데이터에 접근이 κ°€λŠ₯
  • 읽기/μ“°κΈ°(μ°Έμ‘°)에 μ’‹μŒ
  • μΆ”κ°€/제거(μˆ˜μ •)에 μ•ˆμ’‹μŒ

πŸ’›μ—°κ²°λ¦¬μŠ€νŠΈ

  • 각 λ…Έλ“œκ°€ ν•œ μ€„λ‘œ(순차적으둜) μ—°κ²°λ˜μ–΄μžˆλŠ” 방식
  • 비연속적인 μ£Όμ†Œκ°’κ³Ό 크기가 λ™μ μœΌλ‘œ λ³€ν•  수 μžˆλ‹€λŠ” νŠΉμ§•
  • μΆ”κ°€/제거(μˆ˜μ •)에 μ’‹μŒ
  • 읽기/μ“°κΈ°(μ°Έμ‘°)에 μ•ˆμ’‹μŒ

βœ… λ°°μ—΄κ³Ό μ—°κ²°λ¦¬μŠ€νŠΈμ˜ 비ꡐ

/νŠΉμ§•ν¬κΈ°μ½κΈ°/μ“°κΈ°(μ°Έμ‘°)μΆ”κ°€/제거(μˆ˜μ •)μ‹œκ°„λ³΅μž‘λ„κ³΅κ°„λ³΅μž‘λ„
λ°°μ—΄λ™μΌν•œ 데이터 νƒ€μž… μ €μž₯
indexλ₯Ό ν†΅ν•œ 데이터 접근이 μš©μ΄ν•˜λ‹€
κ³ μ •μ μ’‹μŒμ•ˆμ’‹μŒμ ‘κ·Όν•˜κ³ μž ν•˜λŠ” λ°μ΄ν„°μ˜ 인덱슀 값을 μ•Œκ³ μžˆμ„ λ•Œ : O(1) ,
순차적으둜 데이터에 μ ‘κ·Ό ν•  λ•Œ : O(n)
μ’‹μŒ
μ—°κ²°λ¦¬μŠ€νŠΈκ° 데이터가 ν•œ μ€„λ‘œ 연결됨
각각의 λ°μ΄ν„°λŠ” μžμ‹ μ˜ λ°”λ‘œ λ‹€μŒ μ°Έμ‘°λ°μ΄ν„°μ˜ κ°’λ§Œ κ°€μ§€κ³  있음
λ™μ μ•ˆμ’‹μŒμ’‹μŒO(n)μ•ˆμ’‹μŒ

πŸ’›μŠ€νƒ

  • LIFO(Last In First Out, ν›„μž…μ„ μΆœ) 의 자료ꡬ쑰

βœ… μŠ€νƒμ˜ μ—°μ‚°

  • pop(): μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” ν•­λͺ©μ„ μ œκ±°ν•œλ‹€.
  • push(item): item ν•˜λ‚˜λ₯Ό μŠ€νƒμ˜ κ°€μž₯ μœ— 뢀뢄에 μΆ”κ°€ν•œλ‹€.
  • peek(): μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” ν•­λͺ©μ„ λ°˜ν™˜ν•œλ‹€.
  • isEmpty(): μŠ€νƒμ΄ λΉ„μ–΄ μžˆμ„ λ•Œμ— trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

βœ…μŠ€νƒμ˜€λ²„ν”Œλ‘œμš°

  • μ½œμŠ€νƒμ— λ„ˆλ¬΄ λ§Žμ€ 데이터가 μŒ“μ΄λ©΄ μŠ€νƒμ˜€λ²„ν”Œλ‘œμš°κ°€ λ°œμƒ (Error)
  • μž¬κ·€ν•¨μˆ˜λ₯Ό 호좜 ν•  λ•Œ 주둜 λ°œμƒ

πŸ’›ν

  • FIFO(First In First Out, μ„ μž…μ„ μΆœ)의 자료ꡬ쑰
  • λ©€ν‹°μŠ€λ ˆλ”©μ—μ„œ μŠ€λ ˆλ“œλ₯Ό 관리
  • λŒ€κΈ°μ—΄ μ‹œμŠ€ν…œ

.
.
.

🧑자료ꡬ쑰의 μ‚¬μš© μš©λ„

  • λ°°μ—΄

    • λΉ λ₯Έ 접근이 μš”κ΅¬λ˜κ³ , λ°μ΄ν„°μ˜ μ‚½μž…κ³Ό μ‚­μ œκ°€ 적을 λ•Œ
    • κ°œμΈμ •λ³΄ λ“±μ˜ μˆ˜μ •μ΄ μž¦μ§€ μ•Šμ€ 정보(데이터)λ₯Ό λ³΄κ΄€ν•˜κ³ , μ°Έμ‘° ν•  λ•Œ μ‚¬μš©
  • μ—°κ²°λ¦¬μŠ€νŠΈ

    • μ‚½μž…κ³Ό μ‚­μ œ 연산이 잦고, 검색 λΉˆλ„κ°€ 적을 λ•Œ
    • μŒμ•…ν”Œλ ˆμ΄μ–΄ , μž‘μ—…λ‚΄μ—­ (history)
  • μŠ€νƒ

    • μž¬κ·€ν•¨μˆ˜ 호좜
    • λ’€λ‘œκ°€κΈ°, μ‹€ν–‰μ·¨μ†Œ
profile
ν”„λ‘ νŠΈμ—”λ“œ 개발자 μ„±μž₯일기 πŸ’­

0개의 λŒ“κΈ€