λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

CS/μ•Œκ³ λ¦¬μ¦˜

μ•Œκ³ λ¦¬μ¦˜ λ³΅μž‘λ„

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

 

μ•Œκ³ λ¦¬μ¦˜μ˜ λ³΅μž‘λ„λŠ” μ‹œκ°„ λ³΅μž‘λ„μ™€ 곡간 λ³΅μž‘λ„λ‘œ λ‚˜λ‰œλ‹€.

 

μ΅œκ·Όμ—λŠ” ν•˜λ“œμ›¨μ–΄ λ©”λͺ¨λ¦¬ μš©λŸ‰μ΄ 컀쑌기 λ•Œλ¬Έμ—, μ•Œκ³ λ¦¬μ¦˜ μ„±λŠ₯ μΈ‘μ •μ—μ„œλŠ” μ‹œκ°„ λ³΅μž‘λ„κ°€ μ’€ 더 μš°μ„ μ‹œλœλ‹€.

 

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

  • μ•Œκ³ λ¦¬μ¦˜μ— ν•„μš”ν•œ 단계 수만 κ³ λ €ν•œλ‹€.
  • 데이터가 μ¦κ°€ν• μˆ˜λ‘ 단계 μˆ˜κ°€ μ–΄λ–»κ²Œ λ³€ν•˜λŠ”μ§€λ₯Ό 말해쀀닀.

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

  • ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰μ‹œμΌ°μ„ λ•Œ ν•„μš”λ‘œ ν•˜λŠ” μžμ› κ³΅κ°„μ˜ 양이닀.
  • μ •μ μœΌλ‘œ μ„ μ–Έλœ λ³€μˆ˜, μž¬κ·€ν•¨μˆ˜μ™€ 같이 λ™μ μœΌλ‘œ 곡간을 κ³„μ†ν•΄μ„œ ν•„μš”λ‘œ ν•˜λŠ” κ²½μš°λ„ ν¬ν•¨ν•œλ‹€.

 

λΉ… 였 ν‘œκΈ°λ²•

  • μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ κ°„κ²°ν•˜κ³  μΌκ΄€λœ μ–Έμ–΄λ‘œ μ„€λͺ…ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν–ˆλ‹€.
  • μ ˆλŒ€μ μΈ μ‹€ν–‰ μ‹œκ°„κ³Ό ν•„μš”ν•œ μžμ› κ³΅κ°„μ˜ 양을 νŒŒμ•…ν•˜κΈ°λž€ μ–΄λ €μš°λ―€λ‘œ, λΉ… 였 ν‘œκΈ°λ²•μœΌλ‘œ μ•Œκ³ λ¦¬μ¦˜μ˜ νš¨μœ¨μ„±μ„ μ •λŸ‰ν™”ν•  수 μžˆλ‹€.
  • μž…λ ₯ 크기 N에 따라 연산이 λͺ‡ 번 μ‹€ν–‰λ˜λŠ”μ§€λ₯Ό ν‘œκΈ°ν•˜λŠ” 것이닀.

1. λΉ… 였 ν‘œκΈ°λ²•μ˜ : νŠΉμ§•

  • μ‹œκ°„ λ³΅μž‘λ„μ— λ―Έλ―Έν•œ 영ν–₯을 μ£ΌλŠ” μš”μ†ŒλŠ” ν‘œκΈ°ν•˜μ§€ μ•ŠλŠ”λ‹€. (데이터가 무수히 컀질수둝 λ¬΄μ˜λ―Έν•œ μš”μ†Œμ΄κΈ° λ•Œλ¬Έμ΄λ‹€.)
    • μƒμˆ˜ν•­ λ¬΄μ‹œ
    • κ³„μˆ˜ λ¬΄μ‹œ
    • μ΅œκ³ μ°¨ν•­λ§Œ ν‘œκΈ°
  • 일반적으둜 μ΅œμ•…μ˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό κΈ°μ€€μœΌλ‘œ λ§ν•œλ‹€.
    • μ΅œμ•…μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ–Όλ§ˆλ‚˜ λΉ„νš¨μœ¨μ μΈμ§€ μ•Œλ©΄, μ΅œμ•…μ„ λŒ€λΉ„ν•¨κ³Ό λ™μ‹œμ— μ•Œκ³ λ¦¬μ¦˜ 선택에 μ€‘μš”ν•œ 영ν–₯을 λ―ΈμΉ  수 μžˆλ‹€.
    • κ·ΈλŸ¬λ‚˜ λŒ€λΆ€λΆ„μ˜ 경우 평균적인 μ‹œλ‚˜λ¦¬μ˜€κ°€ λ°œμƒν•˜κΈ΄ ν•œλ‹€.
  • μ„œλ‘œ λ‹€λ₯Έ λΆ„λ₯˜μ— μ†ν•˜λŠ” 두 μ•Œκ³ λ¦¬μ¦˜μ΄λΌλ©΄ μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ 써야 할지 λŒ€μ²΄λ‘œ μ•Œ 수 μžˆλ‹€.
    • 같은 λΆ„λ₯˜μ— μ†ν•˜λŠ” 두 μ•Œκ³ λ¦¬μ¦˜μ΄λΌλ©΄ μ–΄λ–€ 게 더 λΉ λ₯Έμ§€ μ•ŒκΈ° μœ„ν•΄ 좔가적인 뢄석이 ν•„μš”ν•˜λ‹€.

2. λΉ… 였 ν‘œκΈ°λ²• : μ’…λ₯˜

μƒμˆ˜ μ‹œκ°„ O(1)

  • μ•Œκ³ λ¦¬μ¦˜μ— ν•„μš”ν•œ 단계 μˆ˜κ°€ 항상 μΌμ •ν•˜λ‹€.
    e.g. λ°°μ—΄ 끝에 μ‚½μž…, μ‚­μ œ λ“±

μ„ ν˜• μ‹œκ°„ O(N)

  • 데이터가 ν•˜λ‚˜μ”© 좔가될 λ•Œλ§ˆλ‹€ μ•Œκ³ λ¦¬μ¦˜μ΄ ν•œ 단계씩 더 κ±Έλ¦°λ‹€.
  • λ°μ΄ν„°μ˜ 수(N)κ°€ 증가함에 따라 μ‹€ν–‰μ‹œκ°„λ„ μ„ ν˜•μ μœΌλ‘œ μ¦κ°€ν•œλ‹€.
    e.g. λ°°μ—΄ μˆœνšŒν•˜λ©΄μ„œ 검색 λ“±

둜그 μ‹œκ°„ O(log N)

  • 데이터가 두 배둜 증가할 λ•Œλ§ˆλ‹€ ν•œ 단계씩 λŠ˜μ–΄λ‚œλ‹€.
  • 연산이 ν•œ 번 싀행될 λ•Œλ§ˆλ‹€ λ°μ΄ν„°μ˜ 크기가 절반으둜 κ°μ†Œν•œλ‹€λŠ” μ˜λ―Έλ‹€.
    e.g. 이진 탐색 λ“±
    (참고둜 컴퓨터 κ³Όν•™μ—μ„œ μƒλž΅λœ 둜그의 밑은 2이닀.)

이차 μ‹œκ°„ O(NΒ²)

  • 데이터가 N개일 λ•Œ NΒ² 단계가 κ±Έλ¦°λ‹€.
  • 데이터가 μ¦κ°€ν•˜λ©΄ 단계 μˆ˜κ°€ κΈ‰κ²©νžˆ λŠ˜μ–΄λ‚˜λ―€λ‘œ 비ꡐ적 λΉ„νš¨μœ¨μ μΈ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ κ°„μ£Όλœλ‹€.
    e.g. 버블 μ •λ ¬, 선택 μ •λ ¬, μ‚½μž… μ •λ ¬ λ“±

μ„ ν˜• 둜그 μ‹œκ°„ O(N log N)

  • O(N)의 μ•Œκ³ λ¦¬μ¦˜κ³Ό O(log N)의 μ•Œκ³ λ¦¬μ¦˜μ΄ μ€‘μ²©λœ μƒνƒœλ₯Ό μ˜λ―Έν•œλ‹€.
    e.g. 퀡 μ •λ ¬, 병합 μ •λ ¬, νž™ μ •λ ¬ λ“±
  • 퀡 μ •λ ¬μ˜ νš¨μœ¨μ„±μ΄ O(N log N)인 이유
    • 데이터λ₯Ό λΆ„ν• ν•˜λŠ” νšŸμˆ˜λŠ” log Nμ΄λ―€λ‘œ O(log N)이닀.
    • 각 λΆ„ν•  λ‹¨κ³„μ—μ„œ pivot과의 비ꡐ와 κ΅ν™˜ 횟수λ₯Ό κ³„μ‚°ν•˜λ©΄ O(N)이닀.
      n + n/2 + n/4 + n/8 + ...
    • μ΅œμ•…μ˜ μ‹œλ‚˜λ¦¬μ˜€(데이터가 μ˜€λ¦„μ°¨μˆœ λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ ν•œμͺ½μœΌλ‘œ μ λ €μ„œ λΆˆκ· ν˜•ν•˜κ²Œ λΆ„ν• λ˜λŠ” 경우)μ—μ„œλŠ” O(NΒ²)이 될 수 μžˆλ‹€.

 

3. λΉ… 였 ν‘œκΈ°λ²• : νš¨μœ¨μ„± 비ꡐ

O(1) < O(log N) < O(N) < O(N log N) < O(NΒ²)

 

μ°Έκ³ 

βŒœλˆ„κ΅¬λ‚˜ μžλ£Œκ΅¬μ‘°μ™€ μ•Œκ³ λ¦¬μ¦˜βŒŸ - 제이 μ›¬κ·Έλ‘œμš°

βŒœλ©΄μ ‘μ„ μœ„ν•œ CS μ „κ³΅μ§€μ‹λ…ΈνŠΈβŒŸ - 주홍철

'CS > μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€