Skip to content

Latest commit

Β 

History

History
70 lines (49 loc) Β· 4.17 KB

big-O.md

File metadata and controls

70 lines (49 loc) Β· 4.17 KB

πŸ’» λΉ…μ˜€(Big-O)ν‘œκΈ°λ²•


πŸ‘¨πŸ»β€πŸ’» λΉ…μ˜€(Big-O)λž€?

  • λΉ…μ˜€(O, Big-O)λž€ μž…λ ₯값이 λ¬΄ν•œλŒ€λ‘œ ν–₯ν• λ•Œ ν•¨μˆ˜μ˜ μƒν•œμ„ μ„€λͺ…ν•˜λŠ” μˆ˜ν•™μ  ν‘œκΈ° 방법이닀.
  • 컴퓨터 κ³Όν•™μ—μ„œ λΉ…μ˜€λŠ” μž…λ ₯값이 컀질 λ•Œ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹€ν–‰ μ‹œκ°„(μ‹œκ°„ λ³΅μž‘λ„)κ³Ό ν•¨κ»˜ 곡간 μš”κ΅¬μ‚¬ν•­(곡간 λ³΅μž‘λ„)이 μ–΄λ–»κ²Œ μ¦κ°€ν•˜λŠ”μ§€λ₯Ό λΆ„λ₯˜ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λΆ„μ„ν•˜λŠ” 데에도 맀우 μœ μš©ν•˜κ²Œ ν™œμš© λœλ‹€.
  • μ•Œκ³ λ¦¬μ¦˜μ€ ν”νžˆ 'μ‹œκ°„κ³Ό 곡간이 νŠΈλ ˆμ΄λ“œ μ˜€ν”„(Space-Time Tradeoff)' 관계닀. 이 말은 μ‹€ν–‰ μ‹œκ°„μ΄ λΉ λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ€ 곡간을 많이 μ‚¬μš©ν•˜κ³ , 곡간을 적게 μ°¨μ§€ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ μ‹€ν–‰ μ‹œκ°„μ΄ λŠλ¦¬λ‹€λŠ” 이야기이닀.

πŸ‘¨πŸ»β€πŸ’» μ‹œκ°„ λ³΅μž‘λ„(Time Complexity)

  • μ‹œκ°„ λ³΅μž‘λ„μ˜ 사전적 μ •μ˜λŠ” μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ μ„€λͺ…ν•˜λŠ” 계산 λ³΅μž‘λ„(Computational Complexity)λ₯Ό μ˜λ―Έν•˜λ©°, 계산 λ³΅μž‘λ„λ₯Ό ν‘œκΈ°ν•˜λŠ” λŒ€ν‘œμ μΈ 방법이 λ°”λ‘œ λΉ…μ˜€λ‹€.
  • λΉ…μ˜€λ‘œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό ν‘œν˜„ν•  λ•ŒλŠ” μ΅œκ³ μ°¨ν•­λ§Œμ„ ν‘œκΈ°ν•˜λ©°, κ³„μˆ˜λŠ” λ¬΄μ‹œν•œλ‹€. 예λ₯Ό λ“€μ–΄ μž…λ ₯κ°’ n에 λŒ€ν•΄ 4n^2 + 3n + 4 만큼 κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜κ°€ μžˆλ‹€λ©΄ 이 ν•¨μˆ˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ΅œκ³ μ°¨ν•­μΈ 4n^2λ§Œμ„ κ³ λ €ν•œλ‹€. μ΄μ€‘μ—μ„œλ„ κ³„μˆ˜λŠ” λ¬΄μ‹œν•˜λ©° n^2 λ§Œμ„ κ³ λ €ν•œλ‹€. 즉, μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n^2)이 λœλ‹€.

πŸ‘¨πŸ»β€πŸ’» 곡간 λ³΅μž‘λ„(Space Complexity)

  • 곡간 λ³΅μž‘λ„λž€, ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œν‚¨ ν›„ μ™„λ£Œν•˜λŠ”λ° ν•„μš”λ‘œ ν•˜λŠ” μžμ› κ³΅κ°„μ˜ 양을 λ§ν•œλ‹€.
  • 총 곡간 μš”κ΅¬ = κ³ μ • 곡간 μš”κ΅¬ + κ°€λ³€ 곡간 μš”κ΅¬λ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  • κ³ μ • 곡간은 μž…λ ₯κ³Ό 좜λ ₯의 νšŸμˆ˜λ‚˜ 크기와 κ΄€κ³„μ—†λŠ” κ³΅κ°„μ˜ μš”κ΅¬(μ½”λ“œ μ €μž₯ 곡간, λ‹¨μˆœ λ³€μˆ˜, κ³ μ • 크기의 ꡬ쑰 λ³€μˆ˜, μƒμˆ˜)λ₯Ό λ§ν•œλ‹€.
  • κ°€λ³€ 곡간은 ν•΄κ²°ν•˜λ €λŠ” 문제의 νŠΉμ • μΈμŠ€ν„΄μŠ€μ— μ˜μ‘΄ν•˜λŠ” 크기λ₯Ό 가진 ꡬ쑰화 λ³€μˆ˜λ“€μ„ μœ„ν•΄μ„œ ν•„μš”λ‘œ ν•˜λŠ” 곡간, ν•¨μˆ˜κ°€ μˆœν™˜ ν˜ΈμΆœμ„ ν•  경우 μš”κ΅¬λ˜λŠ” μΆ”κ°€ 곡간, 즉 λ™μ μœΌλ‘œ ν•„μš”ν•œ 곡간을 λ§ν•œλ‹€.

πŸ‘¨πŸ»β€πŸ’» λΉ…μ˜€ μ’…λ₯˜

πŸƒ O(1)

  • μž…λ ₯값이 아무리 컀도 μ‹€ν–‰ μ‹œκ°„μ„ μΌμ •ν•˜λ‹€.
  • 졜고의 μ•Œκ³ λ¦¬μ¦˜μ΄λΌ ν•  수 μžˆλ‹€.
  • O(1)에 μ‹€ν–‰λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 쑰회 및 μ‚½μž…μ΄ ν•΄λ‹Ήν•œλ‹€.

πŸƒ O(log n)

  • O(1)κ³Ό λ‹€λ₯΄κ²Œ μ‹€ν–‰ μ‹œκ°„μ΄ μž…λ ₯값에 영ν–₯을 λ°›λŠ”λ‹€.
  • λ‘œκ·ΈλŠ” 맀우 큰 μž…λ ₯값에도 크게 영ν–₯을 받지 μ•ŠλŠ” 편이기 λ•Œλ¬Έμ— μ›¬λ§Œν•œ n의 크기에 λŒ€ν•΄μ„œλ„ 맀우 κ²¬κ³ ν•˜λ‹€.
  • λŒ€ν‘œμ μœΌλ‘œ 이진 검색이 이에 ν•΄λ‹Ήν•œλ‹€.

πŸƒ O(n)

  • μž…λ ₯κ°’λ§ŒνΌ μ‹€ν–‰ μ‹œκ°„μ— 영ν–₯을 λ°›μœΌλ©°, μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ€ μž…λ ₯값에 λΉ„λ‘€ν•œλ‹€. μ΄λŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ μ„ ν˜• μ‹œκ°„(Linear-Time)μ•Œκ³ λ¦¬μ¦˜μ΄λΌκ³  ν•œλ‹€.
  • μ •λ ¬λ˜μ§€ μ•Šμ€ λ¦¬μŠ€νŠΈμ—μ„œ μ΅œλŒ“κ°’ λ˜λŠ” μ΅œμ†Ÿκ°’μ„ μ°ΎλŠ” κ²½μš°κ°€ 이에 ν•΄λ‹Ήν•˜λ©° 이 값을 μ°ΎκΈ° μœ„ν•΄μ„œλŠ” λͺ¨λ“  μž…λ ₯값을 적어도 ν•œ 번 이상은 μ‚΄νŽ΄λ΄μ•Ό ν•œλ‹€.

πŸƒ O(n log n)

  • 병합 정렬을 λΉ„λ‘―ν•œ λŒ€λΆ€λΆ„μ˜ 효율 쒋은 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ήν•œλ‹€.
  • 적어도 λͺ¨λ“  μˆ˜μ— λŒ€ν•΄ ν•œ 번 이상은 비ꡐ해야 ν•˜λŠ” 비ꡐ 기반 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ 아무리 쒋은 μ•Œκ³ λ¦¬μ¦˜λ„ O(n log n)보닀 λΉ λ₯Ό 수 μ—†λ‹€.
  • λ¬Όλ‘  μž…λ ₯값이 μ΅œμ„ μΈ 경우, 비ꡐλ₯Ό κ±΄λ„ˆ λ›°μ–΄ O(n)이 될 수 있으며 νŒ€μ†ŒνŠΈ(Timesort)κ°€ 이런 λ‘œμ§μ„ κ°–κ³  μžˆλ‹€.

πŸƒ O(n^2)

  • 버블 μ •λ ¬ 같은 λΉ„νš¨μœ¨μ μΈ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ήν•œλ‹€.

πŸƒ O(2^n)

  • ν”Όλ³΄λ‚˜μΉ˜ 수λ₯Ό μž¬κ·€λ‘œ κ³„μ‚°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄ 이에 ν•΄λ‹Ήν•œλ‹€.
  • n^2와 λΉ„μŠ·ν•΄λ³΄μ΄μ§€λ§Œ 2^n이 훨씬 더 크닀.

πŸƒ O(n!)

  • 각 λ„μ‹œλ₯Ό λ°©λ¬Έν•˜κ³  λŒμ•„μ˜€λŠ” κ°€μž₯ 짧은 경둜λ₯Ό μ°ΎλŠ” μ™ΈνŒμ› 문제(Travelling Salesman Problem)λ₯Ό 브루트 포슀둜 풀이할 λ•Œκ°€ 이에 ν•΄λ‹Ήν•œλ‹€.
  • κ°€μž₯ 느린 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, μž…λ ₯값이 쑰금만 컀져도 μ›¬λ§Œν•œ λ‹€ν•­ μ‹œκ°„ λ‚΄μ—λŠ” 계산기 μ–΄λ ΅λ‹€.