Post

🦊 1. Big-O Notation

λ“€μ–΄κ°€λ©°

Big - O : μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λ‚˜νƒ€λ‚΄λŠ” μ§€ν‘œ ν˜Ήμ€ μ–Έμ–΄

μ‹œκ°„ λ³΅μž‘λ„

점근적 μ‹€ν–‰ μ‹œκ°„, ν˜Ήμ€ Big - O μ‹œκ°„μ— λŒ€ν•œ κ°œλ…μ΄λ‹€

O(s) : 온라인 전솑

파일 크기가 컀짐에 따라 전솑 μ‹œκ°„μ΄ μ„ ν˜•μ μœΌλ‘œ 증가

O(1) : λΉ„ν–‰κΈ°λ‘œ 직접 전솑

파일 크기에 관계 없이 μƒμˆ˜ μ‹œκ°„λ§ŒνΌ μ†Œμš”

s κ°€ 점차 컀지닀보면 O(1) 을 λ„˜λŠ” μˆœκ°„μ΄ μ˜¨λ‹€.

big-O, big-Θ, big-Ω

O : μ‹œκ°„μ˜ μƒν•œμ„ λ‚˜νƒ€λ‚Έλ‹€. 예λ₯Ό λ“€λ©΄ λ°°μ—΄μ˜ λͺ¨λ“  값을 좜λ ₯ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ O(N) 으둜 ν‘œν˜„ν•  수 μžˆλ‹€.

Ξ© : λ“±κ°€ κ°œλ… ν˜Ήμ€ μ‹œκ°„μ˜ ν•˜ν•œμ„ λ‚˜νƒ€λ‚Έλ‹€.

Θ : O 와 Ξ© λ₯Ό λ‘˜ λ‹€ μ˜λ―Έν•œλ‹€. μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„μ΄ O(N) 이자 Ξ©(N) 이라면 μˆ˜ν–‰ μ‹œκ°„μ€ Θ(N) 으둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

μ΅œμ„ μ˜ 경우, μ΅œμ•…μ˜ 경우, 평균적인 경우

퀡 정렬을 ν†΅ν•œ μ˜ˆμ‹œλ₯Ό ν™•μΈν•΄λ³΄μž.

  • μ΅œμ„ μ˜ 경우 : λ§Œμ•½ λͺ¨λ“  μ›μ†Œκ°€ λ™μΌν•˜λ‹€λ©΄ ν•œ 번 μˆœνšŒν•˜κ³  λλ‚˜κΈ° λ•Œλ¬Έμ— μˆ˜ν–‰ μ‹œκ°„μ„ O(N) 이라고 ν•  수 μžˆλ‹€.
  • μ΅œμ•…μ˜ 경우 : 배열이 μ—­μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ 있고 λΆ€λΆ„ λ°°μ—΄μ˜ 첫 μ›μ†Œλ₯Ό 항상 μΆ•μœΌλ‘œ μž‘λŠ”λ‹€λ©΄ μˆ˜ν–‰ μ‹œκ°„μ€ O(N^2) 이라고 ν•  수 μžˆλ‹€.
  • 평균적인 경우 : μ΅œμ„ , μ΅œμ•…μ˜ κ²½μš°λŠ” 자주 λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν‰κ· μ μœΌλ‘œ O(NlogN) 이라고 ν•  수 μžˆλ‹€.

κ³΅κ°„λ³΅μž‘λ„

μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” μ‹œκ°„ 뿐만 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ 곡간도 신경을 써야 ν•œλ‹€.

곡간 λ³΅μž‘λ„λŠ” μ‹œκ°„ λ³΅μž‘λ„μ™€ 평행선을 λ‹¬λ¦¬λŠ” κ°œλ…μ΄λ‹€.

예λ₯Ό λ“€μ–΄ 크기 N인 배열을 λ§Œλ“œλŠ”λ° O(N) 의 곡간이 ν•„μš”ν•˜λ‹€.

μž¬κ·€ ν˜ΈμΆœμ—μ„œ μ‚¬μš©ν•˜λŠ” μŠ€νƒ 곡간도 곡간 λ³΅μž‘λ„ 계산에 ν¬ν•¨λœλ‹€.

이 ν•¨μˆ˜λŠ” 호좜될 λ•Œλ§ˆλ‹€ μŠ€νƒμ˜ κΉŠμ΄κ°€ κΉŠμ–΄μ§€κΈ° λ•Œλ¬Έμ— O(N) 곡간을 μ‚¬μš©ν•œλ‹€.

이 μ½”λ“œλŠ” ν•¨μˆ˜λ₯Ό λŒ€λž΅ n 번 μ‹€ν–‰ν–ˆμ§€λ§Œ 호좜 μŠ€νƒμ— λ™μ‹œμ— μ‘΄μž¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— O(1) 곡간을 μ‚¬μš©ν•œλ‹€.

μƒμˆ˜ν•­μ€ λ¬΄μ‹œν•˜λΌ

O(2N) 으둜 ν‘œκΈ°λ˜μ–΄μ•Ό ν•  μ•Œκ³ λ¦¬μ¦˜μ€ μ‹€μ œλ‘œ O(N) 으둜 ν‘œν˜„ν•œλ‹€.

지배적이지 μ•Šμ€ 항은 λ¬΄μ‹œν•˜λΌ

μ•žμ„œ μƒμˆ˜ν•­μ€ λ¬΄μ‹œν•΄λ„ λœλ‹€κ³  μ–ΈκΈ‰ν–ˆλ‹€.

λ”°λΌμ„œ O(N^2 + N^2) 은 O(N^2) κ°€ λœλ‹€.

μ—¬λŸ¬ λΆ€λΆ„μœΌλ‘œ 이루어진 μ•Œκ³ λ¦¬μ¦˜: λ§μ…ˆ vs κ³±μ…ˆ

μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ΄ 두 λ‹¨κ³„λ‘œ 이루어져 μžˆλ‹€κ³  ν•  λ•Œ, μ–΄λ–€ κ²½μš°μ— μˆ˜ν–‰μ‹œκ°„μ„ λ”ν•˜κ³  κ³±ν•΄μ•Ό ν• κΉŒ

μ™Όμͺ½μ—μ„  A 일을 ν•œ 뒀에 B 일을 ν•˜κΈ° λ•Œλ¬Έμ— μˆ˜ν–‰μ‹œκ°„μ€ O(A+B) 이닀

였λ₯Έμͺ½μ—μ„  A의 각 μ›μ†Œμ— λŒ€ν•΄ B 일을 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μˆ˜ν–‰μ‹œκ°„μ€ O(AB) 이닀

즉, λ§Œμ•½ μ•Œκ³ λ¦¬μ¦˜μ΄ A 일을 λͺ¨λ‘ 끝마친 ν›„ B 일을 μˆ˜ν–‰ν•˜λΌλŠ” ν˜•νƒœλΌλ©΄ A + B μ—¬μ•Ό ν•œλ‹€.

λ§Œμ•½ μ•Œκ³ λ¦¬μ¦˜μ΄ A 일을 ν• λ•Œλ§ˆλ‹€ B 일을 μˆ˜ν–‰ν•΄μ•Ό ν•œλ‹€λ©΄ A * B μ—¬μ•Ό ν•œλ‹€.

μƒν™˜μ‹œκ°„

ArrayList λŠ” μ›μ†Œ μ‚½μž… μ‹œ ν•„μš”μ— 따라 λ°°μ—΄ 크기λ₯Ό μ‘°μ ˆν•˜λŠ” μžλ£Œκ΅¬μ‘°μ΄λ‹€.

배열에 κ°€μš© 곡간이 μ‘΄μž¬ν•˜λ©΄ μ‚½μž… μ—°μ‚°μ˜ μˆ˜ν–‰μ‹œκ°„μ€ O(1) 이닀

배열이 가득 μ°¨ μžˆμ„ λ•Œ μ‚½μž…ν•˜λ €λ©΄ λ°°μ—΄μ˜ 크기λ₯Ό 2N 으둜 μƒˆλ‘œ μ‘°μ ˆν•˜κ³  λͺ¨λ“  μ›μ†Œλ₯Ό 볡사해야 ν•˜λ―€λ‘œ μˆ˜ν–‰μ‹œκ°„μ€ O(N) 이닀

ν•˜μ§€λ§Œ μ΅œμ•…μ˜ 경우인 O(N) 은 자주 λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μˆ˜ν–‰μ‹œκ°„μ„ λΆ„ν•  μƒν™˜ν•΄μ•Ό ν•œλ‹€.

λ”°λΌμ„œ X 개의 μ›μ†Œλ₯Ό μ‚½μž…ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ€ O(2X) β†’ O(1) 이닀

log N μˆ˜ν–‰μ‹œκ°„

이진 탐색과 κ· ν˜• 이진 탐색 트리의 μ›μ†Œλ₯Ό μ°ΎλŠ” μˆ˜ν–‰ μ‹œκ°„μ€ O(log N) 이닀.

μ²˜μŒμ—λŠ” μ›μ†Œ Nκ°œκ°€ λ“€μ–΄μžˆλŠ” λ°°μ—΄μ—μ„œ μ‹œμž‘ν•˜κ³  ν•œ λ‹¨κ³„λ§ˆλ‹€ 탐색할 μ›μ†Œμ˜ κ°œμˆ˜κ°€ N/2 둜 쀄어든닀.

λ°˜λŒ€λ‘œ μƒκ°ν•˜λ©΄ 2λ₯Ό λͺ‡ 번 κ³±ν•΄μ•Ό N이 λ˜λŠ”κ°€?

즉, 2^k = N 을 λ§Œμ‘±ν•˜λŠ” k λŠ” 무엇인가? λ°”λ‘œ 둜그라고 ν•  수 μžˆλ‹€

μž¬κ·€μ μœΌλ‘œ μˆ˜ν–‰ μ‹œκ°„ κ΅¬ν•˜κΈ°

이 ν•¨μˆ˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N^2) 이 μ•„λ‹ˆλ‹€.

μˆ˜ν–‰ μ‹œκ°„μ„ μΆ”μΈ‘ν•˜μ§€ 말고 μ½”λ“œλ₯Ό ν•˜λ‚˜μ”© 읽어봐야 ν•œλ‹€.

트리의 κΉŠμ΄κ°€ N 이고 각 λ…Έλ“œλŠ” 두 개의 μžμ‹ λ…Έλ“œλ₯Ό 가지고 μžˆλ‹€.

λ”°λΌμ„œ κΉŠμ΄κ°€ ν•œ 단계 κΉŠμ–΄μ§ˆ λ•Œ λ§ˆλ‹€ 두 λ°° λ§Žμ€ λ…Έλ“œλ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€.

λ”°λΌμ„œ 전체 λ…Έλ“œμ˜ κ°―μˆ˜λŠ” 2^(N-1) - 1 이 λœλ‹€.

κ·Έλž˜μ„œ 보톡 μž¬κ·€ ν•¨μˆ˜μ˜ μˆ˜ν–‰μ‹œκ°„μ€ O(λΆ„κΈ°^깊이) κ°€ λœλ‹€.

결둠적으둜 μœ„ ν•¨μˆ˜μ˜ μˆ˜ν–‰ μ‹œκ°„μ€ O(2^N) 이 λœλ‹€.

곡간 λ³΅μž‘λ„λŠ” O(N) 이닀.

전체 λ…Έλ“œμ˜ κ°―μˆ˜λŠ” O(2^N) 개 μ΄μ§€λ§Œ νŠΉμ • μ‹œκ°μ— μ‚¬μš©ν•˜λŠ” κ³΅κ°„μ˜ ν¬κΈ°λŠ” O(N) 이닀.

This post is licensed under CC BY 4.0 by the author.