Dev.Beth
πŸπŸ’»πŸ
Dev.Beth
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (175)
    • πŸ€” PS(Problem Solving) (119)
      • λ°±μ€€(BOJ) (59)
      • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ (47)
      • Leet, ꡬ름 (6)
      • μ½”ν…Œ (7)
    • πŸ› οΈ 툴, κ·Έμ™Έ (10)
    • πŸ•·οΈ μ—λŸ¬, 버그 (15)
    • ✍️ 이둠 (30)
      • 이둠, 섀계 (3)
      • λ””μžμΈνŒ¨ν„΄ (1)
      • 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜ (13)
      • λ„€νŠΈμ›Œν¬, λ°μ΄ν„°λ² μ΄μŠ€ (11)
      • κ°œλ°œμ„œ (2)

λΈ”λ‘œκ·Έ 메뉴

  • WRITE
  • ADMIN

곡지사항

  • 🍡 PS challenge

인기 κΈ€

νƒœκ·Έ

  • boj 2293
  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ λ„€νŠΈμ›Œν¬ java
  • Retrofit Post ν•œκΈ€
  • κ°€λŸ­μ‹œ 검은화면
  • λ°±μ€€
  • boj 1509 c++
  • κ°€λŸ­μ‹œ κ°•μ œ μž¬λΆ€νŒ…
  • λ°±μ€€ c++
  • 2294 c++
  • λ°±μ€€ c++ 2293
  • 1520 c++
  • λ°±μ€€ 2294 c++
  • κ°€λŸ­μ‹œ 멈좀
  • 2294 λ°±μ€€ c++
  • Retrofit ν•œκΈ€κΉ¨μ§
  • λ°±μ€€ 1509 c++
  • 2294
  • κ°€λŸ­μ‹œ λ¦¬λΆ€νŒ…
  • λ°±μ€€ 2240
  • 1509 c++
  • c++ 2294
  • 2293
  • κ°€λŸ­μ‹œ 검은화면 μž¬λΆ€νŒ…
  • λ°±μ€€ 1520 c++
  • 2293 c++
  • Retrofit ν•œκΈ€ 깨짐
  • κ°€λŸ­μ‹œ μž¬λΆ€νŒ…
  • μ‚Όμ„± ν™”λ©΄ 멈좀
  • λ°±μ€€ 2293
  • λ°±μ€€ 2294

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Dev.Beth

πŸπŸ’»πŸ

[μ•”κΈ°μš© μš”μ•½] 점근 ν‘œκΈ°λ²•(Big-O)
✍️ 이둠/이둠, 섀계

[μ•”κΈ°μš© μš”μ•½] 점근 ν‘œκΈ°λ²•(Big-O)

2019. 7. 27. 21:46
λ°˜μ‘ν˜•

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

  1. μ•Œκ³ λ¦¬μ¦˜ μˆ˜ν–‰μ‹œκ°„ 뢄석 κ²°κ³Ό
  2. λ‹¨μˆœνžˆ μ¦κ°€ν•˜λŠ” λΉ„μœ¨μ„ λ‚˜νƒ€λ‚΄λŠ” κ°œλ…
  3. μˆ˜ν–‰μ‹œκ°„μ΄ μ–΄λ–»κ²Œ λ³€ν™”ν•˜λŠ”μ§€ ν‘œν˜„ν•΄μ£ΌλŠ” 도ꡬ
  4. ν‘œκΈ° 예 : $O(logN), O(N), O(NlogN), O(N^2), O(2^N), O(N!)$
  5. EX)


Q1. μœ„μ™€ 같은 κ°€λ‘œ w, μ„Έλ‘œ h의 μšΈνƒ€λ¦¬λ₯Ό μ „λΆ€ μΉ ν•˜λŠ”λ° λ“œλŠ” μ‹œκ°„μ„ Big-O둜 ν‘œν˜„ν•˜λ©΄?

A1. O(wh)

Q2. p번 덧칠해야 ν•œλ‹€λ©΄ Big-OλŠ”?

A2. O(whp)


  • Big-O(였), Big-Θ(세타), Big-Ξ©(μ˜€λ©”κ°€)의 차이
  1. Big-O : μ‹œκ°„μ˜ μƒν•œ(higher) μˆ˜ν–‰μ‹œκ°„μ„ ν‘œν˜„
  2. Big-Θ : O, Ξ© λ‘˜λ‹€ 포함. λ”± λ§žλŠ”(exactly right) μˆ˜ν–‰μ‹œκ°„μ„ ν‘œν˜„
  3. Big-Ξ© : λ“±κ°€κ°œλ… ν˜Ήμ€ ν•˜ν•œ(lower) μˆ˜ν–‰μ‹œκ°„μ„ ν‘œν˜„.


  • μ΅œμ„ , μ΅œμ•…, 평균(λ§Žμ€ μ•Œκ³ λ¦¬μ¦˜μ΄ μ΅œμ•…κ³Ό 평균이 같은 κ²½μš°κ°€ 많음)

퀡정렬('μΆ•(pivot)'을 λ¬΄μž‘μœ„λ‘œ μ„ μ •ν•΄μ„œ 이보닀 μž‘은 값은 μ•žμ—, 큰 값은 뒀에 μ •λ ¬ν•˜λŠ” 정렬기법)을 예둜 λ“€μžλ©΄

  1. μ΅œμ„  : λͺ¨λ“  μ›μ†Œκ°€ 동일할 μ‹œ $O(N)$
  2. μ΅œμ•… : κ°€μž₯ 큰 μ›μ†Œκ°€ κ³„μ†ν•΄μ„œ 좕이 될 경우 $O(N^2)$
  3. 평균 : μ΅œμ„ κ³Ό μ΅œμ•…μ˜ 평균 $O(NlogN)$


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


ν•œλ§ˆλ””λ‘œ, μ²˜λ¦¬ν•΄μ•Ό ν•  λ°μ΄ν„°μ˜μˆ˜ n * μ—°μ‚°μ˜ 횟수(예제 및 μ—°μŠ΅λ¬Έμ œλ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”)

Big-O의 μˆœμ„œλŠ” μ•„λž˜μ™€ 같은데, 보톡 $O(N^2)$μ΄μƒμ˜ λ³΅μž‘λ„λ₯Ό κ°€μ§€λŠ” μ•Œκ³ λ¦¬μ¦˜μ€ μ’‹μ§€ μ•Šλ‹€.

$O(1) < O(logN) < O(N) < O(NlogN) < O(N^2) < O(2^N) < O(N!)$


곡간 λ³΅μž‘λ„


μ•Œκ³ λ¦¬μ¦˜μ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ— λŒ€ν•œ 뢄석결과

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


곡간 λ³΅μž‘λ„ 계산법


λ©”λͺ¨λ¦¬λ₯Ό μ–Όλ§ˆλ‚˜ μ‚¬μš©ν•˜λŠ”μ§€ κ³„μ‚°ν•˜λ©΄ λœλ‹€.

ν‘œκΈ° 예 :

  1. $O(n)$ : 크기가 n인 배열을 λ§Œλ“€ 수 μžˆλŠ” 곡간
  2. $O(n^2)$ : n*n 크기의 2차원 배열을 λ§Œλ“€ 수 μžˆλŠ” 곡간


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


$O(2N)$ -> $O(N)$으둜 ν‘œκΈ°


지배적이지 μ•Šμ€ 항은 λ¬΄μ‹œ(제일 큰 경우의 수만 ν‘œκΈ°)


$O(N^2+N)$ -> $O(N^2)$으둜 ν‘œκΈ°

$O(N+logN)$ -> $O(N)$으둜 ν‘œκΈ°

$O(5*2^N+1000N^{100})$ -> $O(2^N)$으둜 ν‘œκΈ°

$O(B^2+A)$ -> ν•˜λ‚˜μ˜ ν•­μœΌλ‘œ ν‘œκΈ°ν•  수 μ—†λ‹€.(A와 B의 νŠΉλ³„ν•œ 관계λ₯Ό μ•Œκ³  μžˆμ§€ μ•Šμ€ 이상)


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


λ§μ…ˆ : Aμž‘μ—…μ„ 끝낸 ν›„ Bμž‘μ—…μ„ 끝낸닀면 λ§μ…ˆ. $O(A+B)$

κ³±μ…ˆ : Aμž‘μ—…μ„ ν• λ•Œ Bμž‘μ—…μ„ κ°™μ΄ν•˜λ©΄ κ³±μ…ˆ. $O(A*B)$


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


μ΅œμ•…μ˜ κ²½μš°λŠ” 가끔 λ°œμƒν•˜μ§€λ§Œ, ν•œλ²ˆ λ°œμƒν•˜λ©΄ κ·Έ ν›„λ‘œ κ½€ μ˜€λž«λ™μ•ˆ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμœΌλ―€λ‘œ λΉ„μš©(μˆ˜ν–‰μ‹œκ°„)을 λΆ„ν• μƒν™˜ ν•œλ‹€λŠ” κ°œλ….


$logN$ μˆ˜ν–‰ μ‹œκ°„


μ–΄λ–€ λ¬Έμ œμ—μ„œ, μ›μ†Œμ˜ κ°―μˆ˜κ°€ 절반 μ”© μ€„μ–΄λ“€λ•Œμ˜ μˆ˜ν–‰ μ‹œκ°„.

μ΄μ§„νŠΈλ¦¬(binary search)둜 예λ₯Ό 듀어보면,

μ΄μ§„νŠΈλ¦¬λŠ” N개의 μ •λ ¬λœ μ›μ†Œκ°€ λ“€μ–΄μžˆλŠ” 배열을 λ°˜μ”© 쀄여가며 검색값을 μ°Ύλ‹€κ°€, 탐색해야 ν•  μ›μ†Œκ°€ ν•˜λ‚˜λ§Œ λ‚¨μœΌλ©΄ μ’…λ£Œν•˜λŠ” νŠΉμ§•μ΄ μžˆμœΌλ―€λ‘œ

μˆ˜ν–‰μ‹œκ°„μ€ N을 μ ˆλ°˜μ”© λ‚˜λˆ„λŠ” κ³Όμ •μ—μ„œ, λͺ‡λ‹¨κ³„ λ§Œμ— 1이 λ˜λŠ”μ§€μ— 따라 κ²°μ •λœλ‹€.


N = 16일 경우,

N = 8

N = 4

N = 2

N = 1


인데, μˆœμ„œλ₯Ό λ’€μ§‘μ–΄μ„œ 1μ—μ„œ 16으둜 μ¦κ°€ν•˜λŠ” κ²ƒμœΌλ‘œ 생각해보면 μˆ˜ν–‰νšŸμˆ˜λŠ” $2^k = 16$ 의 k이닀.

μ΄λ•Œ $2^k = 16$을 λ§Œμ‘±ν•˜λŠ” k값을 κ΅¬ν•΄μ£ΌλŠ” 것이 λ°”λ‘œ log.


$2^k = 16$

$log_216 = k$

$log_22^4 = k$

$4 = k$


λ”°λΌμ„œ μ΄μ§„νƒμƒ‰μ˜ μˆ˜ν–‰μ‹œκ°„μ€


$2^k = N$

$log_2N= k$


둜 ꡬ할 수 있고, μ‹œκ°„λ³΅μž‘λ„λ‘œ ν‘œν˜„ν•˜λ©΄ $O(logN)$이 λœλ‹€.


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


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

(*λΆ„κΈ°(branch) : μž¬κ·€ν•¨μˆ˜κ°€ μžμ‹ μ„ μž¬ν˜ΈμΆœν•˜λŠ” 횟수)



예제 및 μ—°μŠ΅λ¬Έμ œ


(κΈΈμ–΄μ„œ μ ‘μ–΄λ†“μŠ΅λ‹ˆλ‹€)


예제1. μ•„λž˜ μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ”?

λ‹΅ : $O(N)$

forλ¬Έ ν•˜λ‚˜λ‹Ή N, $O(N)+O(N) = O(2N)$ 인데, μƒμˆ˜λŠ” λ¬΄μ‹œν•˜λ―€λ‘œ.


예제2. μ•„λž˜ μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ”?

λ‹΅ : $O(N^2)$

μ•ˆμͺ½λ£¨ν”„μ˜ 반볡 νšŸμˆ˜λŠ” O(N)이고 이 루프가 N번 λ°˜λ³΅λ˜λ―€λ‘œ.


예제3. μ•„λž˜ μ½”λ“œμ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ”?

λ‹΅ : $O(N^2)$

μ—¬λŸ¬ λ°©λ²•μœΌλ‘œ ꡬ할 수 μžˆμ§€λ§Œ, 평균을 μ΄μš©ν•œ λ°©λ²•μœΌλ‘œ ꡬ해보면

array의 μ‚¬μ΄μ¦ˆκ°€ 10일경우 μ•ˆμͺ½λ£¨ν”„μ˜ 경우 1,2,3,4,5,6,7,8,9,10.

평균값은 μ€‘κ°„κ°’μœΌλ‘œ λŒ€λž΅ 5(Big-Oμ—μ„œλŠ” μ •ν™•ν•˜κ²Œ 계산할 ν•„μš”μ—†μŒ).

κ²°κ΅­ 1,2,3....N일 경우 평균값은 N/2이고, μ•ˆμͺ½λ£¨ν”„ N/2κ°€ λ°”κΉ₯루프N번 μˆ˜ν–‰λ˜λ―€λ‘œ $O(N*(N/2))$ -> $O(N^2)$


(+κ³„μ†ν•΄μ„œ μ—…λŽƒν•©λ‹ˆλ‹€)



μ°Έκ³  μ‚¬μ΄νŠΈ : https://ledgku.tistory.com/33

이미지 좜처 : http://rapapa.net/?p=3382

μ°Έκ³  λ¬Έμ„œ : μ½”λ”© 인터뷰 μ™„μ „ 뢄석 : 187κ°€μ§€ ν”„λ‘œκ·Έλž˜λ° λ¬Έμ œμ™€ 해법

λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ 동일쑰건 (μƒˆμ°½μ—΄λ¦Ό)

'✍️ 이둠 > 이둠, 섀계' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[μ•”κΈ°μš©μš”μ•½/κ°œμΈμ •λ¦¬] λ„€νŠΈμ›Œν¬(HTTP~Socket)  (0) 2019.07.30
[μ•”κΈ°μš©μš”μ•½/κ°œμΈμ •λ¦¬] λ„€νŠΈμ›Œν¬(OSI7계측~TCP/IP)  (0) 2019.07.28
    '✍️ 이둠/이둠, 섀계' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [μ•”κΈ°μš©μš”μ•½/κ°œμΈμ •λ¦¬] λ„€νŠΈμ›Œν¬(HTTP~Socket)
    • [μ•”κΈ°μš©μš”μ•½/κ°œμΈμ •λ¦¬] λ„€νŠΈμ›Œν¬(OSI7계측~TCP/IP)
    Dev.Beth
    Dev.Beth
    Beth의 곡뢀 λΈ”λ‘œκ·Έ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”