πŸ•Έ Algorithm/πŸ•Έ μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜

[Java/Algorithm]λ³΅μž‘λ„ Complexity

뉴이 NUEY 2024. 10. 19. 18:02
λ°˜μ‘ν˜•

 

λ³΅μž‘λ„
Complexity
: μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 κ°κ΄€νŽΈμœΌλ‘œ ν‰κ°€ν•˜λŠ” κΈ°μ€€.
  1. μ‹œκ°„ λ³΅μž‘λ„ Time Complexity
    : 싀행에 ν•„μš”ν•œ μ‹œκ°„μ„ ν‰κ°€ν•˜λŠ” 것.
  2. 곡간 λ³΅μž‘λ„ Space Complexity
    :  κΈ°μ–΅ μ˜μ—­κ³Ό 파일 곡간이 μ–Όλ§ˆλ‚˜ ν•„μš”ν•œκ°€.

μ„ ν˜• κ²€μƒ‰μ˜ μ‹œκ°„ λ³΅μž‘λ„

β€» λ³΅μž‘λ„λ₯Ό ν‘œκΈ°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” OλŠ” Order의 μ•žκΈ€μž μž…λ‹ˆλ‹€.
  • ν•œλ²ˆλ§Œ μ‹€ν–‰ν•˜λŠ” 경우 λ³΅μž‘λ„λŠ” O(1) 둜 ν‘œκΈ°ν•©λ‹ˆλ‹€.
    int i = 0;
    return문
  • 반볡문의 평균 μ‹€ν–‰ νšŸμˆ˜λŠ” n/2μž…λ‹ˆλ‹€.
    이 경우 O(n)으둜 ν‘œκΈ°ν•©λ‹ˆλ‹€.
β€» μ»΄ν“¨ν„°μ—μ„œλŠ” n/2와 n의 차이가 크지 μ•Šμ•„ μœ„μ™€ 같이 ν‘œκΈ°ν•©λ‹ˆλ‹€.
  • μœ„ 와 같은 μ„ ν˜• μ•Œκ³ λ¦¬μ¦˜μ˜ λ³΅μž‘λ„λ₯Ό 계산해보면 이와 κ°™μŠ΅λ‹ˆλ‹€.
    O(1) + O(1) + O(n) + O(n) + O(n) + O(1) = O(max(1, 1, n, n, n, 1)) = O(n)
  • μžμ„Ένžˆ μ„€λͺ…ν•˜μžλ©΄
    int i = 0;O(1) + a[n] = k;O(1) + while(true)O(n) + if(a[i] == k)O(n) + i++;O(n) + return i == n?O(1) 
    λ₯Ό μˆœμ„œλŒ€λ‘œ 적은 κ²ƒμž…λ‹ˆλ‹€.
    μ—¬κΈ°μ„œ max() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄ κ°€μž₯ 큰 값을 μ°Ύμ•„λƒ…λ‹ˆλ‹€.
  • λ”°λΌμ„œ μ„ ν˜• κ²€μƒ‰μ˜ λ³΅μž‘λ„λŠ” O(n)μž…λ‹ˆλ‹€.

 

β€» μ„ ν˜•κ²€μƒ‰μ—μ„œ for문이 ν•˜λ‚˜ 일 λ•Œ O(n)이기 λ•Œλ¬Έμ— 2쀑for문의 λ³΅μž‘λ„λŠ” O(n²)이 λ©λ‹ˆλ‹€.
β€» μ΄μ§„κ²€μƒ‰μ˜ λ³΅μž‘λ„λŠ” κ³„μ†ν•΄μ„œ 반으둜 λ‚˜λˆ„κΈ° λ•Œλ¬Έμ— O(log n)μž…λ‹ˆλ‹€.

λ¬Έμ œν’€μ΄

μ΄λ²ˆμ— μ§  μ½”λ“œλŠ” μ’€ λ§˜μ— λ“­λ‹ˆλ‹€.

 

λ°˜μ‘ν˜•