Home > Data Structure > 🧩 [Data Structure] 둜그 μ‹œκ°„(logarithmic time)μ΄λž€?

🧩 [Data Structure] 둜그 μ‹œκ°„(logarithmic time)μ΄λž€?
Data Structure

🧩 [Data Structure] 둜그 μ‹œκ°„(logarithmic time)μ΄λž€?

🍎 Intro.

  • 둜그 μ‹œκ°„(logarithmic time)은 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 뢄석할 λ•Œ μ‚¬μš©ν•˜λŠ” μš©μ–΄λ‘œ, μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ΄λ‚˜ 연산이 μˆ˜ν–‰λ  λ•Œ μž…λ ₯ 크기(N)에 따라 μž‘μ—… μ‹œκ°„μ΄ μž…λ ₯ 크기의 둜그 값에 λΉ„λ‘€ν•˜λŠ” 경우λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

βœ…1️⃣ 둜그 μ‹œκ°„μ˜ μ •μ˜.

  • 둜그 μ‹œκ°„μ€ μž…λ ₯ 크기 N이 μ¦κ°€ν•˜λ”λΌλ„ μ—°μ‚° μ‹œκ°„ 증가가 맀우 느린 경우λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ‹œκ°„ λ³΅μž‘λ„λ₯Ό ν‘œν˜„ν•  λ•Œ O(log N)으둜 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

βœ…2️⃣ 둜그 μ‹œκ°„μ˜ 의미.

  • λ§Œμ•½ μž…λ ₯ 크기 N이 2배둜 λŠ˜μ–΄λ‚˜λ„, μ—°μ‚° μ‹œκ°„μ€ 1회 μ •λ„λ§Œ μΆ”κ°€λ˜λŠ” λ°©μ‹μœΌλ‘œ μ¦κ°€ν•©λ‹ˆλ‹€.
    • μ΄λŠ” 둜그(logarithm)의 μ„±μ§ˆμ— κΈ°μΈν•˜λ©°, 효율적인 μ•Œκ³ λ¦¬μ¦˜μ˜ νŠΉμ§•μž…λ‹ˆλ‹€.

βœ…3️⃣ 둜그 μ‹œκ°„μ˜ μ˜ˆμ‹œ.

1️⃣ 이진 탐색(Binary Search) - O(log N)

  • 이진 탐색은 μ •λ ¬λœ λ°°μ—΄μ—μ„œ νŠΉμ • 값을 찾을 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • 배열을 절반으둜 λ‚˜λˆ„λŠ” λ°©μ‹μœΌλ‘œ νƒμƒ‰ν•˜λ―€λ‘œ, μž…λ ₯ 크기 N에 λŒ€ν•΄ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(log N)μž…λ‹ˆλ‹€.

πŸ“Œ2️⃣ μ˜ˆμ‹œ.

  • λ°°μ—΄ 크기: N = 16
  • 비ꡐ 횟수:
    • 첫 번째 비ꡐ ➞ 크기 16 ➞ 8둜 쀄어듦.
    • 두 번째 비ꡐ ➞ 크기 8 ➞ 4.
    • μ„Έ 번째 비ꡐ ➞ 크기 4 ➞ 2.
    • λ„€ 번째 비ꡐ ➞ 크기 2 ➞ 1μ—μ„œ μ’…λ£Œ.
  • 총 비ꡐ 횟수: logβ‚‚(16) = 4

3️⃣ B-Tree와 B+ Tree 검색 - O(log N)

  • B-Tree와 B+ TreeλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ™€ 파일 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ˜λŠ” 효율적인 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.
  • 트리의 높이가 log에 λΉ„λ‘€ν•˜λ―€λ‘œ, 검색과 μ‚½μž…/μ‚­μ œ μ—°μ‚° λͺ¨λ‘ O(log N)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

πŸ“Œ4️⃣ μ˜ˆμ‹œ.

  • 데이터 개수: N = 1,000
  • B+ Treeμ—μ„œ μ΅œλŒ€ 100개의 μžμ‹μ„ 가진닀면, 트리의 λ†’μ΄λŠ” log₁₀(1,000) = 3
  • 검색 μ‹œκ°„μ€ 3λ‹¨κ³„λ§Œμ— μ›ν•˜λŠ” 데이터λ₯Ό 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ 이벀트 μ²˜λ¦¬μ™€ λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜.

  • Merge Sort와 같은 λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜μ—μ„œλ„ 둜그 μ‹œκ°„μ΄ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
    • 문제λ₯Ό 절반으둜 λ‚˜λˆ„μ–΄ μž¬κ·€μ μœΌλ‘œ μ²˜λ¦¬ν•˜λ―€λ‘œ, κΉŠμ΄λŠ” log N에 λΉ„λ‘€ν•©λ‹ˆλ‹€.
    • 병합 κ³Όμ •μ˜ μ‹œκ°„μ€ O(N), λ”°λΌμ„œ 전체 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N log N)μž…λ‹ˆλ‹€.

βœ…4️⃣ 둜그 μ‹œκ°„μ˜ νŠΉμ§•.

1️⃣ νš¨μœ¨μ„±:

  • 둜그 μ‹œκ°„ λ³΅μž‘λ„λŠ” λŒ€κ·œλͺ¨ 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ 맀우 νš¨μœ¨μ μž…λ‹ˆλ‹€.
    • 데이터 크기 N이 κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•˜λ”λΌλ„, μž‘μ—… μ‹œκ°„μ€ 느리게 μ¦κ°€ν•©λ‹ˆλ‹€.

2️⃣ 적용 사둀:

  • 검색 μ•Œκ³ λ¦¬μ¦˜ : 이진 탐색(Binary Search), B-Tree, AVL Tree, Hash Table λ“±.
  • μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ : Merge Sort, Heap Sort λ“±.
  • 파일 μ‹œμŠ€ν…œ 및 λ°μ΄ν„°λ² μ΄μŠ€ : 인덱슀 검색(B+ Tree).

3️⃣ κΈ°λ³Έ μˆ˜ν•™:

  • 둜그 μ‹œκ°„μ€ logβ‚‚(N) λ˜λŠ” log₁₀(N) 같은 μˆ˜ν•™μ  둜그 ν•¨μˆ˜μ˜ μ„±μ§ˆμ— κΈ°μ΄ˆν•©λ‹ˆλ‹€.

πŸš€5️⃣ 정리

  • 둜그 μ‹œκ°„(logarithmic time)은 O(log N)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ˜λ―Έν•˜λ©°, 데이터 크기가 증가해도 μ—°μ‚° μ‹œκ°„μ΄ 느리게 μ¦κ°€ν•©λ‹ˆλ‹€.
    • μ΄λŠ” 이진 탐색, 트리 기반 ꡬ쑰, λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜ λ“±μ—μ„œ λ‚˜νƒ€λ‚˜λŠ” 효율적인 μ‹œκ°„ λ³΅μž‘λ„μž…λ‹ˆλ‹€.