πŸ“š Computer Science/Data Structure

[자료ꡬ쑰] Time Complexity (μ‹œκ°„ λ³΅μž‘λ„)

hyebin (Helia) 2023. 3. 7. 17:10
λ°˜μ‘ν˜•

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

  • 컴퓨터 ν”„λ‘œκ·Έλž¨μ˜ μž…λ ₯κ°’κ³Ό μ—°μ‚° μˆ˜ν–‰ μ‹œκ°„μ˜ 상관관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 척도
  • 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„κ³Ό μž…λ ₯의 ν•¨μˆ˜ 관계
  • μ•Œκ³ λ¦¬μ¦˜μ˜ 둜직이 μ–Όλ§ˆλ‚˜ 였랜 μ‹œκ°„μ΄ κ±Έλ¦¬λŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©
  • μ•Œκ³ λ¦¬μ¦˜μ˜ λ‘œμ§μ„ μ½”λ“œλ‘œ κ΅¬ν˜„ν•  λ•Œ, 효율적으둜 κ΅¬ν˜„ν•˜κΈ°μœ„ν•΄ κ³ λ €ν•΄μ•Ό 함
    • 효율적인 μ•Œκ³ λ¦¬μ¦˜ κ΅¬ν˜„: μž…λ ₯값이 μ»€μ§μ— λ”°λΌ μ¦κ°€ν•˜λŠ” μ‹œκ°„μ˜ λΉ„μœ¨μ„ μ΅œμ†Œν™”ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬μ„±
  • 주둜 λΉ…-였 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•΄ λ‚˜νƒ€λƒ„

μ‹œκ°„ λ³΅μž‘λ„λ₯Ό ν‘œκΈ°ν•˜λŠ” 방법

  • Big-O(Big-Oh, λΉ…-였) ⇒ μƒν•œ 점근, μ΅œμ•…μ˜ κ²½μš°μ— λŒ€ν•΄ λ‚˜νƒ€λ‚΄λŠ” 방법
  • Big-Ω(Big-Omega, λΉ…-μ˜€λ©”κ°€) ⇒ ν•˜ν•œ 점근, μ΅œμ„ μ˜ κ²½μš°μ— λŒ€ν•΄ λ‚˜νƒ€λ‚΄λŠ” 방법
  • Big-θ(Big-Theta, λΉ…-세타) ⇒ λΉ… μ˜€μ™€ λΉ… μ˜€λ©”κ°€μ˜ 곡톡뢀뢄, μ΅œμ†Œμ™€ μ΅œμ•…μ˜ μ€‘간인 ν‰κ· μ μΈ λ³΅μž‘도

 

Big-O ν‘œκΈ°λ²•

  • μž…λ ₯ λ²”μœ„ n을 κΈ°μ€€μœΌλ‘œ ν•΄μ„œ 둜직이 λͺ‡ 번 λ°˜λ³΅λ˜λŠ”μ§€ λ‚˜νƒ€λ‚΄λŠ” ν‘œκΈ°λ²•
  •  ‘μž…λ ₯κ°’μ˜ λ³€ν™”에 λ”°λΌ μ—°μ‚°μ„ μ‹€ν–‰ν•  λ•Œ, μ—°μ‚° νšŸμˆ˜μ— λΉ„ν•΄ μ‹œκ°„이 μ–Όλ§ˆλ§ŒνΌ κ±Έλ¦¬λŠ”κ°€?’λ₯Ό ν‘œκΈ°ν•˜λŠ” λ°©λ²•

Big-O ν‘œκΈ°λ²•μ˜ μ’…λ₯˜

  1. O(1)
    • μΌμ •ν•œ λ³΅μž‘도(constant complexity)라고 ν•˜λ©°, μž…λ ₯값이 μ¦κ°€ν•˜λ”라도 μ‹œκ°„이 λŠ˜μ–΄λ‚˜μ§€ μ•ŠμŒ
    • μž…λ ₯κ°’μ˜ 크기와 관계없이, μ¦‰μ‹œ 좜λ ₯값을 μ–»μ–΄λ‚Ό 수 있음
  2. O(n)
    • μ„ ν˜• λ³΅μž‘도(linear complexity)라고 λΆ€λ₯΄λ©°, μž…λ ₯값이 μ¦κ°€ν•¨μ— λ”°λΌ μ‹œκ°„ λ˜ν•œ κ°™μ€ λΉ„μœ¨λ‘œ μ¦κ°€ν•˜λŠ” κ²ƒμ„ μ˜λ―Έ
    • μž…λ ₯값이 컀지면 컀질수둝 κ³„μˆ˜(n μ•žμ— μžˆλŠ” 수)의 μ˜λ―Έκ°€ 점점 μ—†μ–΄μ§€κΈ° λ•Œλ¬Έμ—, 같은 λΉ„μœ¨λ‘œ μ¦κ°€ν•˜κ³  μžˆλ‹€λ©΄ 2λ°°κ°€ μ•„λ‹Œ 5λ°°, 10배둜 μ¦κ°€ν•˜λ”λΌλ„ O(n)으둜 ν‘œκΈ°
  3. O(log n)
    • 둜그 λ³΅μž‘λ„(logarithmic complexity)라고 λΆ€λ₯΄λ©°, Big-Oν‘œκΈ°λ²•μ€‘ O(1) λ‹€μŒμœΌλ‘œ λΉ λ₯Έ μ‹œκ°„ λ³΅μž‘λ„
  4. O(n2)
    • 2μ°¨ λ³΅μž‘λ„(quadratic complexity)라고 λΆ€λ₯΄λ©°, μž…λ ₯값이 증가함에 따라 μ‹œκ°„μ΄ n의 제곱수의 λΉ„μœ¨λ‘œ μ¦κ°€ν•˜λŠ” 것을 의미
    • n3κ³Ό n5 λ„ λͺ¨λ‘ O(n2)둜 ν‘œκΈ°
  5. O(2n)
    • κΈ°ν•˜κΈ‰μˆ˜μ  λ³΅μž‘도(exponential complexity)라고 λΆ€λ₯΄λ©°, Big-O ν‘œκΈ°λ²• μ€‘ κ°€μž₯ λŠλ¦° μ‹œκ°„ λ³΅μž‘도

 

μžλ£Œκ΅¬μ‘°μ—μ„œμ˜ μ‹œκ°„ λ³΅μž‘λ„

자료 ꡬ쑰의 평균 μ‹œκ°„ λ³΅μž‘λ„

자료 ꡬ쑰 μ ‘κ·Ό 탐색 μ‚½μž… μ‚­μ œ
λ°°μ—΄ (Array) O(1) O(n) O(n) O(n)
μŠ€νƒ (Stack) O(n) O(n) O(1) O(1)
큐 (Queue) O(n) O(n) O(1) O(1)
이쀑 μ—°κ²° 리슀트 (Double Linked List)  O(n) O(n) O(1) O(1)
ν•΄μ‹œ ν…Œμ΄λΈ” (Hash Table) O(1) O(1) O(1) O(1)
이진 탐색 트리 (BST) O(log n) O(log n) O(log n) O(log n)
AVL 트리 O(log n) O(log n) O(log n) O(log n)
λ ˆλ“œ λΈ”λž™ 트리 O(log n) O(log n) O(log n) O(log n)

 

자료 ꡬ쑰의 μ΅œμ•…μ˜ μ‹œκ°„ λ³΅μž‘λ„

자료 ꡬ쑰 μ ‘κ·Ό 탐색 μ‚½μž… μ‚­μ œ
λ°°μ—΄ (Array) O(1) O(n) O(n) O(n)
μŠ€νƒ (Stack) O(n) O(n) O(1) O(1)
큐 (Queue) O(n) O(n) O(1) O(1)
이쀑 μ—°κ²° 리슀트 (Double Linked List)  O(n) O(n) O(1) O(1)
ν•΄μ‹œ ν…Œμ΄λΈ” (Hash Table) O(n) O(n) O(n) O(n)
이진 탐색 트리 (BST) O(n) O(n) O(n) O(n)
AVL 트리 O(log n) O(log n) O(log n) O(log n)
λ ˆλ“œ λΈ”λž™ 트리 O(log n) O(log n) O(log n) O(log n)
λ°˜μ‘ν˜•