TIL-078 | Big-O notation

Lee, ChankyuΒ·2022λ…„ 1μ›” 31일
0
post-thumbnail

🌈 Big-O notation

🧐 κ·Έλ™μ•ˆ 자료ꡬ쑰&μ•Œκ³ λ¦¬μ¦˜μ„ κ³΅λΆ€ν•˜λ©΄μ„œ κ³΅λΆ€ν•˜λŠ” μ΄λ‘ λ§ˆλ‹€ μ‹œκ°„λ³΅μž‘λ„λ₯Ό ν¬ν•¨ν•˜μ—¬ ν•™μŠ΅μ„ ν–ˆμ—ˆλ‹€. κ°œλ…μ„ λ”°λ‘œ κ³΅λΆ€ν•˜κΈ΄ ν–ˆμ—ˆκΈ°μ— 이해λ₯Ό ν•˜κ³€ ν–ˆμ—ˆμ§€λ§Œ 쑰금 더 κΉŠμ€ 이해λ₯Ό μœ„ν•΄ Big-O notation에 λŒ€ν•΄ 짚고 λ„˜μ–΄κ°€κ³ μž ν•œλ‹€.

Big-O notationμ΄λž€?

  • μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μ„€λͺ…ν•˜λŠ” μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ˜λ―Έν•˜λ©°, 계산 λ³΅μž‘λ„λ₯Ό ν‘œκΈ°ν•˜λŠ” λŒ€ν‘œμ μΈ 방법이 λΉ…μ˜€ ν‘œκΈ°λ²•μ΄λ‹€.
  • λΉ…μ˜€λ‘œ ν‘œκΈ°ν• λ•ŒλŠ” μ΅œκ³ μ°¨ν•­λ§Œ ν‘œκΈ°ν•˜λ©°, O(f(n))으둜 λ‚˜νƒ€λ‚Έλ‹€.
  • λΉ…μ˜€ ν‘œκΈ°λ²•μ€ μƒν•œ(=κ°€μž₯ 늦게 싀행될 λ•Œ)을 μ˜λ―Έν•œλ‹€. ν•˜ν•œμ„ μ˜λ―Έν•˜λŠ” λΉ…μ˜€λ©”κ°€, 평균을 μ˜λ―Έν•˜λŠ” 빅세타 도 μžˆμ§€λ§Œ 주둜 λΉ…μ˜€λ₯Ό μ‚¬μš©ν•œλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„

  • μ•Œκ³ λ¦¬μ¦˜μ˜ λ³΅μž‘λ„λ₯Ό νŒλ‹¨ν•˜λŠ” μ²™λ„λ‘œλŠ” μ‹œκ°„λ³΅μž‘λ„μ™€ κ³΅κ°„λ³΅μž‘λ„ 두 가지가 있으며, 이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λŒ€ν‘œμ μΈ ν‘œκΈ°λ²•μœΌλ‘œ λΉ…μ˜€ ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜λŠ” 것이닀.
  • μ‹œκ°„λ³΅μž‘λ„λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λ‚˜νƒ€λ‚Έλ‹€κ³  λ³Ό 수 μžˆλ‹€.
  • κ³΅κ°„λ³΅μž‘λ„λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ 곡간(λ©”λͺ¨λ¦¬) νš¨μœ¨μ„±μ„ λ‚˜νƒ€λ‚Έλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜μ€ 연산이 λ§Žμ•„μ§ˆμˆ˜λ‘ κ·Έ 속도가 였래 κ±Έλ¦°λ‹€.
  • λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ•Œκ³ λ¦¬μ¦˜ λ‚΄ μ—°μ‚°μ˜ νšŸμˆ˜μ™€ 관계가 μžˆλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜μ—μ„œ μ‹œκ°„λ³΅μž‘λ„λŠ” "n의 값이 증가함에 따라 처리 μ‹œκ°„μ΄ μ¦κ°€ν•˜λŠ” 정도" 라고 생각할 수 μžˆλ‹€.

Big-O ν‘œκΈ°λ²•μ˜ νŠΉμ§•

  • μƒμˆ˜ν•­ λ¬΄μ‹œ
    : λΉ…μ˜€ ν‘œκΈ°λ²•μ€ 데이터 μž…λ ₯κ°’(n)이 μΆ©λΆ„νžˆ 크닀고 κ°€μ •ν•˜κ³  있고, μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„± λ˜ν•œ 데이터 μž…λ ₯κ°’(n)의 크기에 따라 영ν–₯ λ°›κΈ° λ•Œλ¬Έμ— μƒμˆ˜ν•­ 같은 μ‚¬μ†Œν•œ 뢀뢄은 λ¬΄μ‹œν•œλ‹€.
    ex) O(2n) --> O(n)

  • 영ν–₯λ ₯ μ—†λŠ” ν•­ λ¬΄μ‹œ
    : λΉ…μ˜€ ν‘œκΈ°λ²•μ€ 데이터 μž…λ ₯κ°’(n)의 크기에 따라 영ν–₯을 λ°›κΈ° λ•Œλ¬Έμ— κ°€μž₯ 영ν–₯λ ₯이 큰 항에 이외에 영ν–₯λ ₯이 μ—†λŠ” 항듀은 λ¬΄μ‹œν•œλ‹€.
    ex) O(n2+9n+1) --> O(n2)

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

βœ” O(1) : μž…λ ₯값에 상관없이 μΌμ •ν•œ μ‹€ν–‰μ‹œκ°„μ„ κ°€μ§€λŠ” ν›Œλ₯­ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄λΌ ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ μƒμˆ˜κ°’μ΄ 상상 μ΄μƒμœΌλ‘œ 클 경우 사싀상 μΌμ •ν•œ μ‹œκ°„μ˜ μ˜λ―Έκ°€ μ—†λ‹€. 졜고의 μ•Œκ³ λ¦¬μ¦˜μ΄ 될 수 μžˆμ§€λ§Œ 그만큼 신쀑해야 ν•œλ‹€.
πŸ‘‰ ex) μŠ€νƒμ—μ„œμ˜ pop, push

βœ” O(log n) : λ‘œκ·ΈλŠ” 맀우 큰 μž…λ ₯κ°’μ—μ„œλ„ 크게 영ν–₯을 받지 μ•ŠλŠ” νŽΈμ΄λ‹€. 맀우 κ²¬κ³ ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
πŸ‘‰ ex) 이진 탐색 트리

βœ” O(n) : μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ€ μž…λ ₯값에 λΉ„λ‘€ν•œλ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ„ ν˜• μ‹œκ°„ μ•Œκ³ λ¦¬μ¦˜μ΄λΌ λΆ€λ₯Έλ‹€. μ •λ ¬λ˜μ§€ μ•Šμ€ λ¦¬μŠ€νŠΈμ—μ„œ μ΅œλŒ€ λ˜λŠ” μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ” κ²½μš°κ°€ ν•΄λ‹Ήλ˜λ©° λͺ¨λ“  μž…λ ₯값을 적어도 ν•œ 번 이상은 μ‚΄νŽ΄λ΄μ•Ό ν•œλ‹€.
πŸ‘‰ ex) for λ¬Έ

βœ” O(nlog n) : 병합 μ •λ ¬λ“±μ˜ λŒ€λΆ€λΆ„ 효율이 쒋은 μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ή ν•œλ‹€. 아무리 쒋은 μ•Œκ³ λ¦¬μ¦˜μ΄λΌ 할지라도 n log n 보닀 λΉ λ₯Ό 수 μ—†λ‹€. μž…λ ₯값이 μ΅œμ„ μΌ 경우, 비ꡐλ₯Ό κ±΄λ„ˆ λ›°μ–΄ O(n)이 될 수 μžˆλ‹€.
πŸ‘‰ ex) 퀡 μ •λ ¬(quick sort), 병합정렬(merge sort), νž™ μ •λ ¬(heap Sort)

βœ” O(n^2) : 버블 μ •λ ¬ 같은 λΉ„νš¨μœ¨μ μΈ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ή ν•œλ‹€.
πŸ‘‰ ex) 이쀑 for λ¬Έ, μ‚½μž…μ •λ ¬(insertion sort), 버블정렬(bubble sort), 선택정렬(selection sort)

βœ” O(2^n) : ν”Όλ³΄λ‚˜μΉ˜μ˜ 수λ₯Ό μž¬κ·€λ‘œ κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ή ν•œλ‹€. n^2와 ν˜Όλ™λ˜λŠ” κ²½μš°κ°€ μžˆλŠ”λ° 2^n이 훨씬 더 크닀.
πŸ‘‰ ex) ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄

βœ” O(n!) : κ°€μž₯ 느린 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μž…λ ₯값이 쑰금만 컀져도 계산이 μ–΄λ ΅λ‹€.

μ„±λŠ₯ 비ꡐ

  • μœ„μ˜ κ·Έλž˜ν”„μ— λ‚˜μ™€ μžˆλŠ” μ‹œκ°„ λ³΅μž‘λ„μ˜ μ„±λŠ₯을 λΉ„κ΅ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.
    πŸ‘‰ μƒμˆ˜ν•¨μˆ˜ < λ‘œκ·Έν•¨μˆ˜ < μ„ ν˜•ν•¨μˆ˜ < λ‹€ν•­ν•¨μˆ˜ < μ§€μˆ˜ν•¨μˆ˜
    (μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ 갈수둝 νš¨μœ¨μ„±μ΄ 떨어진닀.)

πŸ“ Reference

  1. https://noahlogs.tistory.com/27
  2. https://holika.tistory.com/29
  3. https://codermun-log.tistory.com/235
profile
Backend Developer - "Growth itself contains the germ of happiness"

0개의 λŒ“κΈ€