ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithm] μ‹œκ°„ λ³΅μž‘λ„ & 곡간 λ³΅μž‘λ„
    Algorithm 2022. 1. 12. 02:35

    μ•Œκ³ λ¦¬μ¦˜μ„ ν‰κ°€ν•˜λŠ” 두 κ°€μ§€ μš”μ†ŒλŠ” μ‹œκ°„ λ³΅μž‘λ„ (Time Comlexity)와 곡간 λ³΅μž‘λ„ (Complexity)둜 λ‚˜λ‰œλ‹€. 이 두 κ°€μ§€λŠ” 속도와 λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ ν‰κ°€ν•˜λŠ” 것인데, μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„ 뢄석 κ²°κ³Όλ₯Ό μ‹œκ°„ λ³΅μž‘λ„λΌ ν•˜κ³  λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— λŒ€ν•œ 뢄석 κ²°κ³Όλ₯Ό 곡간 λ³΅μž‘λ„λΌκ³  ν•œλ‹€. ν”„λ‘œκ·Έλž¨μ„ μ§€ λ•Œμ—λŠ” 항상 worst caseλ₯Ό κ³ λ €ν•΄μ•Όν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„λŠ” 보톡 Big-Oh ν‘œκΈ°λ²•μ„ μ΄μš©ν•΄μ„œ λ‚˜νƒ€λ‚Έλ‹€.
    γ…€

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

    μ‹œκ°„ λ³΅μž‘λ„λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„ 뢄석 결과이닀. μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 평가할 λ•Œμ—λŠ” λ¨Όμ € μ—°μ‚°μ˜ 횟수λ₯Ό μ„Έκ³ , μ²˜λ¦¬ν•΄μ•Ό ν•  λ°μ΄ν„°μ˜ 수 n에 λŒ€ν•œ μ—°μ‚°νšŸμˆ˜μ˜ ν•¨μˆ˜ T(n)을 λ§Œλ“ λ‹€.

    μ‹œκ°„ λ³΅μž‘λ„λŠ” λ‹€μŒκ³Ό 같이 3κ°€μ§€λ‘œ λ‚˜λ‰˜λŠ”λ°, 일반적으둜 Big-Oh ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
    γ…€

    Best Case (μ΅œμƒμ˜ 경우)

    • Big-Omega ν‘œκΈ°λ²• μ‚¬μš©
    • μ΅œμƒμ˜ 경우둜, μ΅œμ†Œλ‘œ κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μ˜λ―Έν•œλ‹€.

    Worst Case (μ΅œμ•…μ˜ 경우)

    • Big-Oh ν‘œκΈ°λ²• μ‚¬μš©
    • μ΅œμ•…μ˜ 경우둜, μ΅œλŒ€ 였래 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μ˜λ―Έν•œλ‹€.

    Average Case (평균적인 경우)

    • Big-Theta ν‘œκΈ°λ²• μ‚¬μš©
    • 평균적인 경우둜, 평균적인 μ‹œκ°„μ„ μ˜λ―Έν•œλ‹€.
      γ…€

    스크란샷_2022-01-12_α„‹α…©α„Œα…₯ᆫ_2 03 59

    μœ„ 사진은 μ‹œκ°„ λ³΅μž‘λ„ κ·Έλž˜ν”„μΈλ°, 일반적으둜 μ‹œκ°„ λ³΅μž‘λ„κ°€ O(nlogn) μ •λ„λŠ” λ˜μ–΄μ•Ό μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯이 μ˜λ―Έμžˆλ‹€κ³  말할 수 μžˆλ‹€.

    μ‹œκ°„ λ³΅μž‘λ„ μˆœμ„œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

    스크란샷 2022-01-12 α„‹α…©α„Œα…₯ᆫ 2 34 01

    Know Thy Complexities!
    γ…€

    Big-Oh ν‘œκΈ°λ²• (Notation)

    ν•¨μˆ˜ f(n)κ³Ό g(n)이 μ£Όμ–΄μ‘Œμ„ λ•Œ, λͺ¨λ“  n β‰₯ K에 λŒ€ν•˜μ—¬ f(n) ≀ Cg(n)을 λ§Œμ‘±ν•˜λŠ” 두 개의 μƒμˆ˜ C, Kκ°€ μ‘΄μž¬ν•˜λ©΄ f(n)의 Big-OhλŠ” O(g(n))이닀.
    μˆ˜μ‹μ„ 보고 Big-Ohλ₯Ό κ΅¬ν•˜λŠ” 방법은 μ–΄λ ΅μ§€ μ•Šλ‹€. T(n)이 λ‹€ν•­μ‹μœΌλ‘œ λ˜μ–΄μžˆμ„ 경우, μ΅œκ³ μ°¨ν•­μ˜ μ°¨μˆ˜κ°€ Big-Ohκ°€ λœλ‹€. 예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.
    γ…€
    스크란샷 2022-01-12 α„‹α…©α„Œα…₯ᆫ 2 34 21
    γ…€

    μ‹œκ°„ λ³΅μž‘λ„ 계산 예제

    μ‹œκ°„ λ³΅μž‘λ„ = Sum (Frequency * step count (or step execution))

    • 예제 1

        func ex1(n: Int) {
            for i in 0..<n { // n + 1
                let a = i // n
            }
        }
        // μ‹œκ°„ λ³΅μž‘λ„ = 2n + 1 == n
    • 예제 2

        func ex2(n: Int) {
            for i in stride(from: 0, to: n, by: 2) { // (n / 1) + 1
                let a = i // (n / 2)
            }
        }
        // μ‹œκ°„ λ³΅μž‘λ„ = n + 1 == n
    • 예제 3

        func ex3(n: Int) {
            for i in stride(from: 0, to: n * n, by: 1) { // (n^2 + 1)
                let a = i // n^2
            }
        }
        // μ‹œκ°„ λ³΅μž‘λ„ = n^2 + 1 + n^2 = 2n^2 + 1 == n^2
    • 예제 4

        func ex4(n: Int) {
            for i in 0..<n { // n + 1
                for j in 0..<i { // {n(n+1)} / 2
                    let a = i // {n(n+1)} / 2
                }
            }
        }
        // μ‹œκ°„ λ³΅μž‘λ„ = n^2 + 2n + 1 == n^2

      tc

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

    [Algorithm] μ•Œκ³ λ¦¬μ¦˜ κ³΅κ°„λ³΅μž‘λ„μ— λŒ€ν•˜μ—¬

    λŒ“κΈ€

Designed by Tistory.