[λ°μ΄ν°μ»΄ν¨ν ] 2νμ°¨ μμ , νμ΄μ¬ κΈ°μ΄(2)μ μκ°λ³΅μ‘λ
π μκ³ λ¦¬μ¦μ μ±λ₯ λΆμ: μκ° λ³΅μ‘λ(Time Complexity) κ°λ μ 리
π λ°°κ²½ (Background)
μκ³ λ¦¬μ¦κ³Ό λ°μ΄ν° ꡬ쑰μ κΈ°μ΄λ₯Ό λ€λ£¨λ©΄μ,
νΉν μκ³ λ¦¬μ¦μ ν¨μ¨μ± λΆμμ μν ν΅μ¬ λꡬμΈ
μκ° λ³΅μ‘λ(Time Complexity) κ°λ
μ μ€μ μ μΌλ‘ λ°°μ λ€.
νμμλ λ§μ°νκ² 'λ°λ³΅λ¬Έμ΄ λ§μΌλ©΄ λ리λ€' μ λλ‘λ§ μ΄ν΄νμλλ°,
μμ μ ν΅ν΄ λ³΄λ€ μμΈνκ² κ°λ μ μ΄ν΄ν μ μκ² λμλ€.
1οΈβ£ μκ³ λ¦¬μ¦κ³Ό 볡μ‘λμ μ μ
β μκ³ λ¦¬μ¦(Algorithm)μ΄λ?
- μ£Όμ΄μ§ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λͺ ννκ³ μμ°¨μ μΈ μ μ°¨λ₯Ό μλ―Ένλ€.
- μ리λ²(λ μνΌ)μ λΉμ ν μ μμΌλ©°, μκ³ λ¦¬μ¦μ μ½λ© μΈμ΄λ‘ ꡬννλ κ²μ΄ νλ‘κ·Έλλ°μ΄λ€.
β 볡μ‘λ(Complexity)λ?
- μκ³ λ¦¬μ¦μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν λ μ¬μ©νλ μμμ μμ λνλΈλ€.
- λ³΄ν΅ μκ° λ³΅μ‘λ(Time Complexity)μ κ³΅κ° λ³΅μ‘λ(Space Complexity)λ‘ λλλ€.
2οΈβ£ μκ° λ³΅μ‘λ(Time Complexity) κ°λ
β μ μ
- μκ³ λ¦¬μ¦μ΄ μ
λ ₯(input)μ ν¬κΈ°(μΌλ°μ μΌλ‘ NμΌλ‘ ννλ¨)μ λ°λΌ
λ¬Έμ λ₯Ό ν΄κ²°νλ λ° κ±Έλ¦¬λ μκ°(νΉμ μ€ν νμ)μ μ¦κ°μ¨μ λνλ΄λ κ°λ μ΄λ€. - μ νν μ€ν μκ°μ΄ μλλΌ, μ λ ₯μ ν¬κΈ°(N)κ° μ¦κ°ν λ μ€ν νμμ μ¦κ° μμμ 보λ κ²μ΄ ν΅μ¬μ΄λ€.
β νκΈ° λ°©λ² (Big-O Notation)
- μΌλ°μ μΌλ‘ O( )λ‘ νννλ€.
- μμνκ³Ό κ³μλ 무μνκ³ κ°μ₯ λΉ λ₯΄κ² μ¦κ°νλ νλ§μ νννλ€.
- μμ: 3N² + 5N + 100 → O(N²)
3οΈβ£ μ€ν νμ(Number of Executions)μμ μ°¨μ΄μ
κ΅¬λΆ μ€ν νμ(Number of Executions) μκ° λ³΅μ‘λ(Time Complexity)
κ°λ | μ€μ μ½λκ° μ€νλ μ νν νμ | μ λ ₯μ ν¬κΈ°(N)κ° μ¦κ°ν λ μ€ν νμμ μ¦κ° ν¨ν΄ |
νν λ°©λ² | μ νν μ μ (μ: 10, 100, 1000λ²) | Big-O νκΈ°λ² (μ: O(N), O(N²), O(logN)) |
μ¬μ© λͺ©μ | μ€μ μν νμ νμ λ° λλ²κΉ | μκ³ λ¦¬μ¦ μ±λ₯ λΆμ λ° ν¨μ¨μ± λΉκ΅ |
4οΈβ£ μμ£Ό λ±μ₯νλ μκ° λ³΅μ‘λμ μ
νκΈ° μ€λͺ μμ μ½λ
O(1) | μμ μκ°(Constant Time) | λ°°μ΄μ μμ μ κ·Ό (arr[0]) |
O(log N) | λ‘κ·Έ μκ°(Logarithmic Time) | μ΄μ§ νμ(Binary Search) |
O(N) | μ ν μκ°(Linear Time) | λ¨μΌ λ°λ³΅λ¬Έ(for i in range(N)) |
O(N²) | μ κ³± μκ°(Quadratic Time) | μ΄μ€ λ°λ³΅λ¬Έ(for i in range(N): for j in range(N)) |
O(2βΏ) | μ§μ μκ°(Exponential Time) | νΌλ³΄λμΉ μμ΄ μ¬κ· ꡬν |
5οΈβ£ μκ° λ³΅μ‘λλ³ μμμ λΆμ
β (1) O(1) - μμ μκ° (Constant Time)
- μ λ ₯ ν¬κΈ°(N)μ 무κ΄νκ² νμ λμΌν μκ°μ΄ κ±Έλ¦°λ€.
- λ°°μ΄μμ νΉμ μμλ₯Ό μ§μ μ κ·Όνλ κ²½μ°κ° λνμ μ΄λ€.
β (2) O(log N) - λ‘κ·Έ μκ° (Logarithmic Time)
- μ λ ₯ ν¬κΈ°(N)κ° λμ΄λλ μ€ν νμκ° λλ¦¬κ² μ¦κ° (λ‘κ·Έ λΉμ¨)
- μ λ ₯ ν¬κΈ°(N)κ° 2λ°°, 4λ°°, 8λ°°λ‘ λμ΄λλ μ€ν νμλ 1, 2, 3μ© μμ£Ό μ‘°κΈμ© μ¦κ°νλ λ°©μμΌλ‘ λ§€μ° ν¨μ¨μ μ΄λ€.
β (3) O(N) - μ ν μκ° (Linear Time)
- μ λ ₯ ν¬κΈ°(N)μ μ νν λΉλ‘νμ¬ μ€ν νμκ° μ¦κ°νλ€.
- μ λ ₯μ΄ 10λ°° 컀μ§λ©΄ μ€ν μκ°λ μ νν 10λ°°κ° λλ€.
β (4) O(N log N) - μ ν λ‘κ·Έ μκ° (Linearithmic Time)
- μ λ ₯ ν¬κΈ°(N)κ° λμ΄λ¨μ λ°λΌ N × log Nμ μλλ‘ μ¦κ°νλ€.
- λνμ μΌλ‘ λ³ν©μ λ ¬(Merge Sort), ν μ λ ¬(Heap Sort)μ΄ μ΄μ ν΄λΉλλ€.
β (5) O(N²) - μ κ³± μκ° (Quadratic Time)
- μ λ ₯ ν¬κΈ°(N)μ μ κ³± λΉμ¨λ‘ μ€ν νμκ° μ¦κ°νλ€.
- μ λ ₯ ν¬κΈ°κ° 10λ°° λμ΄λλ©΄ μ€ν μκ°μ μ½ 100λ°° λμ΄λλ€. μ£Όλ‘ μ€μ²© λ°λ³΅λ¬Έμμ νν λνλλ€.
β (6) O(N³) - μΈμ κ³± μκ° (Cubic Time)
- μ λ ₯ ν¬κΈ°(N)μ 3μ κ³± λΉμ¨λ‘ μ¦κ°νλ€.
- μ λ ₯ ν¬κΈ°κ° 10λ°° λμ΄λλ©΄ μ€ν μκ°μ μ½ 1000λ°° λμ΄λλ€.
β (7) O(2βΏ) - μ§μ μκ° (Exponential Time)
- μ λ ₯ ν¬κΈ°(N)κ° μ‘°κΈλ§ μ»€μ Έλ μ€ν νμκ° κΈ°νκΈμμ μΌλ‘ μ¦κ°νλ€.
- μκ³ λ¦¬μ¦ μ΅μ νκ° λ°λμ νμν μΌμ΄μ€λ€. μμ μ λ ₯ ν¬κΈ°μμλ λ§€μ° λ리λ€.
π― 볡μ‘λλ³ μκ° μ¦κ°μ¨ μμ½ν
- 볡μ‘λμ
λ ₯ ν¬κΈ° Nμ΄ 10λ°° μ¦κ°ν λμ£Όμ μμ
O(1) λ³ν μμ λ°°μ΄ μ κ·Ό O(log N) λ§€μ° λλ¦° μ¦κ° μ΄μ§ νμ O(N) μ νν 10λ°° μ¦κ° λ¨μΌ λ°λ³΅λ¬Έ O(N log N) μ½ 10λ°°λ³΄λ€ μ‘°κΈ λ ν¬κ² μ¦κ° λ³ν© μ λ ¬, ν΅ μ λ ¬ O(N²) μ½ 100λ°° μ¦κ° μ΄μ€ λ°λ³΅λ¬Έ O(N³) μ½ 1000λ°° μ¦κ° μΌμ€ λ°λ³΅λ¬Έ O(2βΏ) κΈ°νκΈμμ μ¦κ° μ¬κ· νΌλ³΄λμΉ - μκ° λ³΅μ‘λλ 'μ±λ₯ νκ°λ₯Ό μν μ΄λ‘ μ μ§ν'μ΄λ©°, μ€μ μ±λ₯ ν
μ€νΈμ λ³ννμ¬
μκ³ λ¦¬μ¦ ν¨μ¨μ±μ νλ¨νλ μ€μν κΈ°μ€μ΄ λλ€.