πŸ”¨[개발] μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„

manduΒ·2025λ…„ 9μ›” 15일

[개발]

λͺ©λ‘ 보기
4/9

1. μ•Œκ³ λ¦¬μ¦˜μ΄λž€?

  • μ•Œκ³ λ¦¬μ¦˜(Algorithm): μ–΄λ– ν•œ λͺ©μ μ„ 이루기 μœ„ν•΄ ν•„μš”ν•œ 일련의 μ—°μ‚° 절차.

  • μ•Œκ³ λ¦¬μ¦˜μ„ 평가할 λ•Œ μ€‘μš”ν•œ μ²™λ„λŠ” 두 κ°€μ§€μž„.

    • μ‹œκ°„ λ³΅μž‘λ„(Time Complexity): μ–Όλ§ˆλ‚˜ 였래 κ±Έλ¦¬λŠ”κ°€?
    • 곡간 λ³΅μž‘λ„(Space Complexity): μ–Όλ§ˆλ‚˜ λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜λŠ”κ°€?

2. μ‹œκ°„ λ³΅μž‘λ„ (Time Complexity)

2.1 μ •μ˜

  • μž…λ ₯의 크기와 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œκ°„μ˜ 관계
  • μ‹€μ œ μ‹œκ°„μ„ 직접 μΈ‘μ •ν•˜λŠ” 게 μ•„λ‹ˆλΌ, μ—°μ‚° 횟수 증가 μΆ”μ„Έλ₯Ό κΈ°μ€€μœΌλ‘œ 뢄석

2.2 κ°€μž₯ 큰 영ν–₯을 μ£ΌλŠ” μš”μ†Œ

  • 반볡문 (for, while λ“±)이 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ²°μ •ν•˜λŠ” 핡심 μš”μ†Œ
  • 쀑첩 루프가 λŠ˜μ–΄λ‚˜λ©΄ λ³΅μž‘λ„λ„ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ 증가

2.3 점근적 ν‘œκΈ°λ²•

  • μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 λ‚˜νƒ€λ‚Ό λ•ŒλŠ” 보톡 점근적 ν‘œκΈ°λ²•(Asymptotic Notation)을 μ‚¬μš©

점근적 ν‘œκΈ°λ²•(Asymptotic Notation)

  • 점근적 ν‘œκΈ°λ²•μ€ μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 "μž…λ ₯ 크기 n이 μΆ©λΆ„νžˆ 컀질 λ•Œ"의 μ‹€ν–‰ μ‹œκ°„ 증가 μΆ”μ„Έλ‘œ ν‘œν˜„ν•˜λŠ” 방법
  • 즉, μž‘μ€ nμ—μ„œλŠ” ν•˜λ“œμ›¨μ–΄λ‚˜ μƒμˆ˜ 차이가 영ν–₯을 쀄 수 μžˆμ§€λ§Œ, 큰 nμ—μ„œμ˜ μ„±μž₯λ₯ μ΄ μ•Œκ³ λ¦¬μ¦˜μ˜ μ§„μ§œ μ„±λŠ₯을 보여쀀닀고 λ³΄λŠ” 것
  • κ°€μž₯ 큰 ν•­(NΒ²)만 λ‚¨κ²¨μ„œ λ‹¨μˆœν™” O(NΒ² + 3N + 5) β†’ O(NΒ²)
    β†’ μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ μˆ˜ν•™μ μœΌλ‘œ λ‹¨μˆœν™”ν•΄μ„œ ν‘œν˜„ν•˜λŠ” 도ꡬ
  1. Big-O (O)

    • μ΅œμ•…μ˜ 경우(Worst Case)λ₯Ό λ‚˜νƒ€λƒ„
    • μ•Œκ³ λ¦¬μ¦˜ μ‹€ν–‰ μ‹œκ°„μ˜ μƒν•œμ„ 
  2. Big-Theta (Θ)

    • 평균적인 경우(Average Case)λ₯Ό λ‚˜νƒ€λƒ„
    • μ•Œκ³ λ¦¬μ¦˜ μ‹€ν–‰ μ‹œκ°„μ˜ μ •ν™•ν•œ μ¦κ°€μœ¨
  3. Big-Omega (Ξ©)

    • μ΅œμ„ μ˜ 경우(Best Case)λ₯Ό λ‚˜νƒ€λƒ„
    • μ•Œκ³ λ¦¬μ¦˜ μ‹€ν–‰ μ‹œκ°„μ˜ ν•˜ν•œμ„ 

2.4 자주 λ³΄μ΄λŠ” μ‹œκ°„ λ³΅μž‘λ„

  • O(1): μƒμˆ˜ μ‹œκ°„ (예: λ°°μ—΄ 인덱슀 μ ‘κ·Ό β†’ RAM을 μƒκ°ν•˜λΌ!)
  • O(log n): 둜그 μ‹œκ°„ (예: 이진 탐색, 밑이 2μ§„μˆ˜λ‹€!)
  • O(n): μ„ ν˜• μ‹œκ°„ (예: λ°°μ—΄ 전체 탐색)
  • O(n log n): 둜그 μ„ ν˜• μ‹œκ°„ (예: 효율적인 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜)
  • O(nΒ²): 이차 μ‹œκ°„ (예: 버블 μ •λ ¬)
  • O(2ⁿ): μ§€μˆ˜ μ‹œκ°„ (예: λΆ€λΆ„μ§‘ν•© 생성)
  • O(n!): νŒ©ν† λ¦¬μ–Ό μ‹œκ°„ (예: μ™ΈνŒμ› 순회 문제 Brute-Force)

2.5 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μ‹œκ°„ λ³΅μž‘λ„

μ•Œκ³ λ¦¬μ¦˜ν‰κ· μ΅œμ•…μ΅œμ„ 
버블 μ •λ ¬O(nΒ²)O(nΒ²)O(n)
선택 μ •λ ¬O(nΒ²)O(nΒ²)O(nΒ²)
μ‚½μž… μ •λ ¬O(nΒ²)O(nΒ²)O(n)
병합 μ •λ ¬O(n log n)O(n log n)O(n log n)
퀡 μ •λ ¬O(n log n)O(nΒ²)O(n log n)
νž™ μ •λ ¬O(n log n)O(n log n)O(n log n)

3. 곡간 λ³΅μž‘λ„ (Space Complexity)

3.1 μ •μ˜

  • μž…λ ₯ 크기와 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 관계.
  • λ‹¨μˆœνžˆ μ½”λ“œ 크기뿐만 μ•„λ‹ˆλΌ, λ³€μˆ˜, ν•¨μˆ˜ 호좜 μŠ€νƒ, 동적 λ©”λͺ¨λ¦¬ ν• λ‹Ή 등을 λͺ¨λ‘ 포함
  • μ˜€λŠ˜λ‚  μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯ νŒλ‹¨μ— μ‚¬μš©λ˜λŠ” μ²™λ„λŠ” 주둜 곡간 λ³΅μž‘λ„λ³΄λ‹€λŠ” μ‹œκ°„ λ³΅μž‘λ„μΈ κ²½μš°κ°€ 많음

3.2 ꡬ성 μš”μ†Œ

  1. κ³ μ • 곡간: ν”„λ‘œκ·Έλž¨ μ½”λ“œ, μƒμˆ˜, 컴파일 μ‹œ ν• λ‹Ήλ˜λŠ” 곡간 (μž…λ ₯ 크기와 무관)
  2. κ°€λ³€ 곡간: μž…λ ₯ 크기에 따라 λ‹¬λΌμ§€λŠ” 곡간 (λ°°μ—΄, 동적 ꡬ쑰, μž¬κ·€ μŠ€νƒ λ“±)

3.3 μ˜ˆμ‹œ

  • 배열에 n개의 데이터λ₯Ό μ €μž₯ β†’ O(n)
  • μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜ 호좜 κΉŠμ΄κ°€ n β†’ O(n) μŠ€νƒ 곡간 ν•„μš”
profile
λ§Œλ‘λŠ” λͺ©λ§λΌ

0개의 λŒ“κΈ€