Skip to content

Latest commit

Β 

History

History
60 lines (39 loc) Β· 4.9 KB

File metadata and controls

60 lines (39 loc) Β· 4.9 KB

μ•Œκ³ λ¦¬μ¦˜ 기초

μ•Œκ³ λ¦¬μ¦˜μ€ 완전탐색(Brute-Force, λͺ¨λ“  경우의 수λ₯Ό νƒμƒ‰ν•΄λ³΄λŠ” 것)μ—μ„œ μ‹œμž‘ν•œλ‹€. μ΄λŠ” λͺ¨λ“  경우의 수λ₯Ό λ‹€ 따져보기 λ•Œλ¬Έμ— κ°•λ ₯ν•˜μ§€λ§Œ, μ΅œλŒ€μ˜ μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§€κ²Œ λœλ‹€. λͺ¨λ“  경우의 수λ₯Ό 생각해보고, μ‹œκ°„λ³΅μž‘λ„λ₯Ό 쀄일 수 μžˆλŠ” 뢀뢄이 μžˆλ‹€λ©΄ κ·ΈλŸ¬ν•œ μ•Œκ³ λ¦¬μ¦˜μ„ 생각해보고, κ·Έ μ•Œκ³ λ¦¬μ¦˜μ„ μ •ν™•ν•˜κ²Œ μ½”λ“œλ‘œ κ΅¬ν˜„ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. 쒋은 μ½”λ“œλ₯Ό 짜기 μœ„ν•΄μ„œλŠ” λ‹€μŒ κ³Όμ •μ˜ μ—°μŠ΅μ΄ ν•„μš”ν•˜λ‹€.

  • 문제λ₯Ό νŒŒμ•…ν•˜κ³  μ•Œκ³ λ¦¬μ¦˜μ„ μƒκ°ν•˜κΈ°
  • μ•Œκ³ λ¦¬μ¦˜μ˜ κ³΅κ°„λ³΅μž‘λ„μ™€ μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ³„μ‚°ν•˜μ—¬ 문제의 μ œμ•½ 쑰건 내에 μˆ˜ν–‰λ  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜μΈμ§€ νŒλ‹¨ν•˜κΈ°
  • μ•Œκ³ λ¦¬μ¦˜μ„ λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ κ΅¬ν˜„ν•˜κΈ° (μ—°μŠ΅λ§Œμ΄ μ •λ‹΅)

μ•Œκ³ λ¦¬μ¦˜(Algorithm) μ΄λž€?

문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬ λ™μž‘λ“€μ˜ λͺ¨μž„을 λ§ν•˜λ©°, κ³ λŒ€ 페λ₯΄μ‹œμ•„μ˜ μˆ˜ν•™μž μ•Œμ½°λ¦¬μ¦ˆλ―Έ(Al-Khwarizmi)μ—μ„œ μœ λž˜ν•˜μ˜€λ‹€.

μ•Œκ³ λ¦¬μ¦˜μ˜ 쑰건

  • μ •λ°€μ„± : λ³€ν•˜μ§€ μ•ŠλŠ” λͺ…ν™•ν•œ μž‘μ—… 단계λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.
  • μœ μΌμ„± : 각 λ‹¨κ³„λ§ˆλ‹€ λͺ…ν™•ν•œ λ‹€μŒ 단계λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.
  • μž…λ ₯ : μ •μ˜λœ μž…λ ₯을 받아듀일 수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • 좜λ ₯ : λ‹΅μœΌλ‘œ 좜λ ₯을 내보낼 수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • μœ ν•œμ„± : νŠΉμ • 수의 μž‘μ—… 이후에 μ •μ§€ν•΄μ•Ό ν•œλ‹€. (μ •μ§€ 쑰건)
  • μΌλ°˜μ„± : μ •μ˜λœ μž…λ ₯듀에 일반적으둜 μ μš©ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

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

κ΅¬ν˜„ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ λ”°μ§ˆ λ•Œ μ‹œκ°„λ³΅μž‘λ„μ™€ κ³΅κ°„λ³΅μž‘λ„μ˜ κ°œλ…μ΄ λ‚˜μ˜¨λ‹€.
μž…λ ₯ λ°μ΄ν„°μ˜ 크기가 컀질수둝 μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯ μ°¨μ΄λŠ” λ‘λ“œλŸ¬μ§„λ‹€. μ„±λŠ₯이 μ’‹μ§€ μ•Šμ€ μ•Œκ³ λ¦¬μ¦˜μΌ 경우 μž…λ ₯ λ°μ΄ν„°μ˜ 크기가 μ»€μ‘Œμ„ λ•Œ μ‹€ν–‰ μ‹œκ°„μ΄ λΉ λ₯΄κ²Œ λŠ˜μ–΄λ‚œλ‹€. λ”°λΌμ„œ λ¬Έμ œμ— 따라 미리 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 계산해보고 문제 쑰건에 μ ν•©ν•œ μ•Œκ³ λ¦¬μ¦˜μΈμ§€ νŒλ‹¨ν•˜λŠ” 과정이 μ€‘μš”ν•˜λ‹€.

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

μ‹œκ°„λ³΅μž‘λ„λž€ μž‘λ™ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰μ‹œκ°„μ„ μ •λŸ‰ν™”ν•˜λŠ” 것을 λœ»ν•œλ‹€.
μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” μ—°μ‚°μ˜ 횟수 T(N)을 κ΅¬ν•˜λŠ” 방법이 주둜 쓰인닀. 보톡 1μ–΅(10^8)번의 μ—°μ‚°λ‹Ή 1초의 μ‹œκ°„μ΄ κ±Έλ¦°λ‹€κ³  κ°„μ£Όν•œλ‹€.

μ‹œκ°„λ³΅μž‘λ„μ˜ ν‘œκΈ°λ²•

  • λΉ…-였(Big-Oh, ) ν‘œκΈ°λ²• : Worst Case의 μ—°μ‚°νšŸμˆ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λΉ…-μ˜€λ©”κ°€(Big-Omega, ) ν‘œκΈ°λ²• : Best Case의 μ—°μ‚°νšŸμˆ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  • λΉ…-세타(Big-Theta, ν‘œκΈ°λ²• : Average Case의 μ—°μ‚°νšŸμˆ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

일반적으둜 μ‹œκ°„λ³΅μž‘λ„λ₯Ό ν‘œν˜„ν•  땐 **λΉ…-였 ν‘œκΈ°λ²•(Big-O Notation)**을 μ‚¬μš©ν•œλ‹€. λΉ…-였 ν‘œκΈ°λ²•μ€ μ—°μ‚° 횟수 T(N)μ—μ„œ μ΅œκ³ μ°¨ν•­λ§Œμ„ ν‘œκΈ°ν•˜λŠ” ν‘œκΈ°λ²•μ΄λ‹€. μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹€ν–‰ μ‹œκ°„μ΄ n + n^2에 λΉ„λ‘€ν•œλ‹€κ³  ν•  λ•Œ, n이 맀우 컀지면 n^2μ΄λ‚˜ n + n^2μ΄λ‚˜ 큰 차이가 λ‚˜μ§€ μ•Šκ²Œ 되기 λ•Œλ¬Έμ΄λ‹€.

μ‹œκ°„λ³΅μž‘λ„μ˜ μ’…λ₯˜

  • μƒμˆ˜ν˜• O(1) : 항상 μΌμ •ν•œ μ‹œκ°„ μ•ˆμ— μ‹€ν–‰ μ™„λ£Œ
  • λ‘œκ·Έν˜• O(logN) : μ‹€ν–‰ μ‹œκ°„μ΄ μž…λ ₯ 크기의 λ‘œκ·Έμ— λΉ„λ‘€ν•΄μ„œ λŠ˜μ–΄λ‚¨
  • μ„ ν˜• O(N) : μ‹€ν–‰ μ‹œκ°„μ΄ μž…λ ₯ 크기에 λ°”λ‘œ λΉ„λ‘€ (μ„ ν˜•μ μœΌλ‘œ 증가)
  • μ„ ν˜•λ‘œκ·Έν˜• O(NlogN) : μ„ ν˜• μ•Œκ³ λ¦¬μ¦˜κ³Ό 닀항식 μ•Œκ³ λ¦¬μ¦˜μ˜ 쀑간쯀 속도
  • λ‹€ν•­μ‹ν˜• O(N^c) : μž…λ ₯ 크기가 λŠ˜μ–΄λ‚˜λ©΄ μ‹€ν–‰ μ‹œκ°„μ΄ λΉ λ₯΄κ²Œ λŠ˜μ–΄λ‚¨
  • μ§€μˆ˜ν˜• O(c^N) : 닀항식 μ•Œκ³ λ¦¬μ¦˜λ³΄λ‹€λ„ 더 λΉ λ₯΄κ²Œ λŠ˜μ–΄λ‚¨
  • νŒ©ν† λ¦¬μ–Όν˜• O(N!) : κ°€μž₯ 느린 μ•Œκ³ λ¦¬μ¦˜. n이 μž‘μ•„λ„ 금방 거의 μ“°κΈ° νž˜λ“  μˆ˜μ€€μœΌλ‘œ λŠλ €μ§„λ‹€.

image

그림을 보면 μ•Œ 수 있 듯이, O(n^2)λΆ€ν„° μ‹€ν–‰ μ‹œκ°„μ΄ 크게 λŠ˜μ–΄λ‚œλ‹€. μ„ ν˜•λ‘œκ·Έν˜•(μ€€μ„ ν˜•) O(NlogN) μ•Œκ³ λ¦¬μ¦˜ λ˜λŠ” 그보닀 더 λΉ λ₯Έ μ•Œκ³ λ¦¬μ¦˜μ„ 찾으면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€.

κ³΅κ°„λ³΅μž‘λ„(Space Complexity)

κ³΅κ°„λ³΅μž‘λ„λž€ μ•Œκ³ λ¦¬μ¦˜μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— λŒ€ν•œ 뢄석 결과둜, μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” λ©”λͺ¨λ¦¬μ˜ 크기λ₯Ό λ§ν•œλ‹€. μž„λ² λ””λ“œ μ‹œμŠ€ν…œμ²˜λŸΌ μ œμ•½μ΄ λ§Žμ€ ν™˜κ²½μ—μ„œλŠ” λ©”λͺ¨λ¦¬ μš©λŸ‰μ΄ μ‹€ν–‰ μ‹œκ°„ λͺ»μ§€μ•Šκ²Œ μ€‘μš”ν•˜λ‹€.

이λ₯Ό 잘 μ•ŒκΈ° μœ„ν•΄μ„œλŠ” μžλ£Œν˜• 별 λ©”λͺ¨λ¦¬ 크기가 μ–΄λ–€μ§€, μ‹€μ œ μžλ£Œκ΅¬μ‘°κ°€ μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜λŠ”μ§€ 등을 μ œλŒ€λ‘œ μ΄ν•΄ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

α„‹α…‘α†―α„€α…©α„…α…΅α„Œα…³α†· α„‹α…΅α„†α…΅α„Œα…΅α„ƒα…³α†―-9