Section 2: Big O

Big O

μ½”λ“œμ˜ μ„±λŠ₯을 ν‰κ°€ν•˜λŠ” 일반적인 μ§€ν‘œλ‘œ μ‚¬μš©λ˜λŠ” μΌμ’…μ˜ μ‹œμŠ€ν…œ
ν•˜λ‚˜μ˜ λ¬Έμ œλŠ” μ—¬λŸ¬κ°€μ§€ 풀이 방식이 μ‘΄μž¬ν•˜κ³  무엇이 κ°€μž₯ 쒋은가에 λŒ€ν•œ λ¬ΌμŒμ„ μˆ˜ν•™μ μœΌλ‘œ ν‘œν˜„ν•΄ μ§€ν‘œλ₯Ό μ œκ³΅ν•  수 있음
μ—¬λŸ¬ μ ‘κ·Όλ²•μ˜ μž₯단점을 νŒŒμ•…ν•˜κΈ° 쉽고 디버깅 μ‹œ μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ˜λŠ” 뢀뢄을 μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
면접에 자주 λ‚˜μ˜€λ‹ˆ 잘 μ•Œμ•„λ‘λΌκ³  함.

μ½”λ“œ μ‹œκ°„ 제기

1μ—μ„œ νŠΉμ • N κ°’ μ‚¬μ΄μ˜ λͺ¨λ“  숫자λ₯Ό λ”ν•˜λŠ” ν•¨μˆ˜λ₯Ό λ§Œλ“œμ‹œμ˜€

function(3) // 1 + 2 + 3 = 6
function a(n){ let total = 0; for (let i = 1; i <= n; i++){ total += i; } return total; } function b(n){ return n * (n + 1) /2; }
μ–΄λŠκ²Œ 더 μ’‹μ€μ§€μ˜ μ˜λ―ΈλŠ”?
  • λΉ λ₯Έκ°€?
  • λ©”λͺ¨λ¦¬λ₯Ό 덜 μ‚¬μš©ν•˜λŠ”κ°€?
  • 더 가독성이 쒋은가?
Β 
μ—¬κΈ°μ„œ λΉ λ₯΄κΈ°λŠ” μ–΄λ–»κ²Œ μΈ‘μ •ν•˜λ‚˜?
JS의 λ‚΄μž₯ ν•¨μˆ˜ performance.now() μ‚¬μš©ν•˜κΈ°
function a(n){ let total = 0; for (let i = 1; i <= n; i++){ total += i; } return total; } let t1 = performance.now(); a(100000000000); let t2 = performance.now(); console.log(`time ${(t2 - t1 / 1000}`)
10μ–΅μœΌλ‘œ μœ„ 두 ν•¨μˆ˜λ₯Ό λΉ„κ΅ν•˜λ©΄ μ „μžλŠ” 1초 ν›„μžλŠ” 0.0001μ΄ˆμ— 끝남
그치만 이런 방식이 정말 ν™•μ‹€ν•œ μ„±λŠ₯ μΈ‘μ •μ˜ μ§€ν‘œκ°€ 될 수 μžˆλ‚˜?

μ‹œκ°„ 문제

  • 기기의 사양에 따라 μΈ‘μ •μ˜ κ²°κ³Όκ°€ λ‹€λ₯΄κ³  무엇을 ν•˜λŠ”μ§€μ— 따라 λ‹€λ₯΄λ‹€.
  • λΉ λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” 정말 짧은 μ‹œκ°„μ•ˆμ— λλ‚œλ‹€ ν•˜μ§€λ§Œ μ΄μ€‘μ—μ„œλ„ μ΅œμ„ μ΄ μ‘΄μž¬ν•˜λŠ”λ° 이걸 μ–΄λ–»κ²Œ μ•Œ 수 μžˆλ‚˜?

μ»΄ν“¨ν„°μ˜ μ—°μ‚° 갯수 μ„ΈκΈ°

λ‹¨μˆœν•˜κ²Œ 컴퓨터가 λͺ‡λ²ˆμ˜ 연산을 ν•΄μ•Όν•˜λŠ” μ„ΈλŠ”κ²ƒ μ»΄ν“¨ν„°μ˜ 사양에 관련없이 μ‚¬μš©μ΄ κ°€λŠ₯
μ•„λž˜ μ•Œκ³ λ¦¬μ¦˜μ€ N이 μ–Όλ§ˆλ‚˜ 크던 3번의 연산에 ν•¨μˆ˜κ°€ 끝남
notion image
μ•„λž˜λŠ” N만큼의 연산을 μˆ˜ν–‰ν•¨
notion image
5n+2의 연산이 λ‚˜μ˜€μ§€λ§Œ μžμ„Έν•œ κ°œμˆ˜λ³΄λ‹¨ 큰그림을 λ΄μ•Όν•˜ν•¨

μ‹œκ°„λ³΅μž‘λ„μ˜ μ‹œκ°ν™”

Big O 곡식

μž…λ ₯의 크기와 μ‹€ν–‰ μ‹œκ°„μ˜ 관계λ₯Ό μ˜λ―Έν•¨
μ•„λž˜ ν•¨μˆ˜λŠ” N의 크기가 μ‹€ν–‰μ‹œκ°„μ— μ–΄λ–€ 영ν–₯도 주지 μ•ŠμŒ
notion image
μ•„λž˜ ν•¨μˆ˜λŠ” 5nμ΄μ§€λ§Œ μƒμˆ˜λŠ” μ œμ™Έν•œλ‹€
notion image
μ•„λž˜ ν•¨μˆ˜λŠ” o(n)의 루프가 2개 μžˆμ§€λ§Œ O(2n)으둜 ν‘œμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€
notion image
쀑첩 λ£¨ν”„μ˜ 경우
notion image
notion image

Big O ν‘œμ‹œ λ‹¨μˆœν™” ν•˜κΈ°

기본적으둜 μƒμˆ˜λŠ” 크게 μ€‘μš”ν•˜μ§€ μ•ŠμŒ
notion image
  1. μ‚°μˆ˜λŠ” μƒμˆ˜λ‹€ (λ”ν•˜κΈ°, λΉΌκΈ°, λ‚˜λˆ„κΈ°)
  1. λ³€μˆ˜λ„ μƒμˆ˜
  1. index 둜 배열에 μ ‘κ·Όν•˜λŠ”κ²ƒλ„ μƒμˆ˜
  1. λ£¨ν”„λŠ” ν‘Έλ₯΄ 길이 * λ‚΄λΆ€ μ—°μ‚° λ§Œμ•½ 루프가 ν•˜λ‚˜ 더 μžˆλ‹€λ©΄ (n*m)

곡간 λ³΅μž‘λ„

μ§€κΈˆκΉŒμ§€λŠ” μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λ³΄μ•˜μ§€λ§Œ 곡간 λ³΅μž‘λ„λŠ” λ©”λͺ¨λ¦¬λ₯Ό μ–Όλ§ˆλ‚˜ μ°¨μ§€ν•˜λŠ”μ§€λ₯Ό λ³΄λŠ” 것
μž…λ ₯을 μ œμ™Έν•˜κ³  μ•Œκ³ λ¦¬μ¦˜μ΄ μ°¨μ§€ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ˜λ―Έν•¨
  1. null, number, undefine 등은 μƒμˆ˜ 곡간을 차지
  1. λ¬Έμžμ—΄μ€ O(n) 곡간을 ν•„μš”λ‘œν•¨
  1. μžλ£Œν˜• νƒ€μž…λ„ O(n) 곡간이 ν•„μš”ν•¨
Β 
notion image
μž…λ ₯의 크기에 상관없이 μ‚¬μš©ν•˜λŠ” 곡간은 이미 μ •ν•΄μ Έ 있음
notion image
μž…λ ₯의 크기에 따라 μƒˆλ‘œμš΄ 배열을 λ¦¬ν„΄ν•˜κΈ°μ— O(n)
Β 

λ‘œκ·Έμ™€ μ„Ήμ…˜

λͺ‡λͺ‡ μ•Œκ³ λ¦¬μ¦˜μ€ μƒμˆ˜, n, n 제곱 λ“±μœΌλ‘œ ν‘œν˜„ν•˜κΈ° μ–΄λ €μš΄ κ²½μš°κ°€ 있음
κ·Έ κ²½μš°μ— λ“±μž₯ν•˜λŠ”κ²ƒμ΄ log

Log

μ§€μˆ˜ ν•¨μˆ˜μ˜