Post

🐣 1. Big-O Notation

πŸ“šΒ 1. big-O

1. An Analogy

  • λ””μŠ€ν¬μ— μžˆλŠ” νŒŒμΌμ„ λ‹€λ₯Έ 지역에 μ‚΄κ³  μžˆλŠ” μΉœκ΅¬μ—κ²Œ κ°€λŠ₯ν•œ 빨리 보내렀고 ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

λŒ€λΆ€λΆ„μ˜ μ‚¬λžŒλ“€μ€ 문제λ₯Ό λ“£μžλ§ˆμž 온라인 의 방식을 μƒκ°ν•˜κ³€ ν•œλ‹€.

But, κ²½μš°μ— 따라 λ§žμ„ μˆ˜λ„ 틀릴 μˆ˜λ„ μžˆλ‹€.

  • 파일의 크기가 μž‘λ‹€λ©΄ λ‹Ήμ—°νžˆ μ˜¨λΌμΈμ„ ν†΅ν•œ 전솑이 λΉ λ₯Ό 것이닀.
  • κ·ΈλŸ¬λ‚˜ 파일의 크기가 μ•„μ£Ό 크닀면 λΉ„ν–‰κΈ°λ₯Ό 톡해 물리적으둜 λ°°λ‹¬ν•˜λŠ” 게 더 λΉ λ₯Ό μˆ˜λ„ μžˆλ‹€.
    • μ‹€μ œλ‘œ 1TB 크기의 νŒŒμΌμ„ μ˜¨λΌμΈμ„ 톡해 μ „μ†‘ν•˜λ € ν•œλ‹€λ©΄ ν•˜λ£¨ 이상 걸릴 μˆ˜λ„ μžˆλ‹€.



2. Time Complexity

  • 점근적 μ‹€ν–‰ μ‹œκ°„(asymptoticc runtime)
  • big-O
  • 온라인 전솑 $O(s)$
    • μ—¬κΈ°μ„œ sλŠ” 파일의 크기가 λœλ‹€.
    • 파일의 크기가 증가함에 따라 전솑 μ‹œκ°„ λ˜ν•œ μ„ ν˜•μ μœΌλ‘œ μ¦κ°€ν•œλ‹€.
  • λΉ„ν–‰κΈ°λ₯Ό ν†΅ν•œ 전솑
    • 파일 크기에 관계없이 $O(1)$
    • 파일의 크기가 μ¦κ°€ν•œλ‹€κ³  ν•΄μ„œ μΉœκ΅¬μ—κ²Œ νŒŒμΌμ„ μ „μ†‘ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ΄ λŠ˜μ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.
    • ∴ μƒμˆ˜ μ‹œκ°„ 만큼 μ†Œμš”λœλ‹€.
  • μƒμˆ˜κ°€ μ–Όλ§ˆλ‚˜ 큰지 or μ„ ν˜•μ‹μ΄ μ–Όλ§ˆλ‚˜ 천천히 μ¦κ°€ν•˜λŠ”μ§€μ— 관계없이 μˆ«μžκ°€ 컀지닀 보면 μ„ ν˜•μ‹μ€ μ–Έμ  κ°€ μƒμˆ˜λ₯Ό λ›°μ–΄λ„˜κ²Œ λœλ‹€.
  • κ·Έ λ°–μ˜ λ‹€μ–‘ν•œ μ‹€ν–‰ μ‹œκ°„
    • O(log N)
    • O(N log N)
    • O(N)
    • O(N^2)
    • O(2^N)



2-1. big-O, big-ΞΈ, big-Ξ©

  • ν•™κ³„μ—μ„œ μˆ˜ν–‰ μ‹œκ°„μ„ ν‘œκΈ°ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ°œλ…
  • O(big-O)
    • μ‹œκ°„μ˜ μƒν•œ
    • μ‹œκ°„μ˜ μƒν•œμ΄λ―€λ‘œ λ°°μ—΄μ˜ λͺ¨λ“  값을 좜λ ₯ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ $O(N)$ 에 λŒ€ν•΄ $O(N^2)$, $O(N^3)$ 으둜 ν‘œν˜„ν•  수 μžˆλ‹€.
    • 근데 ꡳ이 μ΄λŸ°μ‹μœΌλ‘œ ν‘œν˜„ν•  ν•„μš”λŠ” μ—†μŒ ➑️ κ°œλ… μƒμœΌλ‘œλ§Œ μ΄ν•΄ν•˜μž!
  • Ξ©(big-Omega)
    • λ“±κ°€ κ°œλ… ν˜Ήμ€ ν•˜ν•œ
    • λ°°μ—΄μ˜ λͺ¨λ“  κ°’ 좜λ ₯ μ•Œκ³ λ¦¬μ¦˜
      • $Ξ©(N)$ , $Ξ©(logN)$ , $Ξ©(N)$ 으둜 ν‘œν˜„ κ°€λŠ₯
      • μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν‘œν˜„ν•˜λŠλƒμ— 따라 λ‹¬λΌμ§ˆ 수 μžˆμŒμ„ λ‚˜νƒ€λƒ„
      • ∴ Ξ© μˆ˜ν–‰ μ‹œκ°„λ³΄λ‹€ λΉ λ₯Ό 수 μ—†λ‹€!
  • ΞΈ(big-theta)
    • O와 Ξ© λ‘˜ λ‹€ 의미
    • μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„μ΄ $O(N)$ μ΄λ©΄μ„œ $Ξ©(N)$ 이라면 $ΞΈ(N)$ 이닀.

πŸ’‘ μΈν„°λ·°μ—μ„œλŠ” big-O의 μ˜λ―ΈλŠ” θ의 μ˜λ―Έμ™€ κ°€κΉŒμš°λ―€λ‘œ big-O에 λŒ€ν•΄ μ–Έμ œλ‚˜ λ”± 맞게 ν‘œκΈ°ν•˜μž.



2-2. μ΅œμ„ μ˜ 경우, μ΅œμ•…μ˜ 경우, 평균적인 경우

  • μ•Œκ³ λ¦¬μ¦˜μ˜ μˆ˜ν–‰ μ‹œκ°„μ„ μ„Έ 가지 λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  • e.g. 퀡 μ •λ ¬
    • β€˜μΆ•β€™μ΄ λ˜λŠ” μ›μ†Œ ν•˜λ‚˜λ₯Ό λ¬΄μž‘μœ„λ‘œ 뽑은 λ’€, 이보닀 μž‘μ€ μ›μ†Œλ“€μ€ μ•žμ—, 큰 μ›μ†Œλ“€μ€ 뒀에 놓이도둝 μ›μ†Œμ˜ μœ„μΉ˜λ₯Ό λ°”κΎΌλ‹€.
    • β€˜λΆ€λΆ„ μ •λ ¬(partitial sort)’ ➑️ μ™Όμͺ½, 였λ₯Έμͺ½μ„ μž¬κ·€μ μœΌλ‘œ 정렬해감
  • μ΅œμ„ μ˜ 경우
    • λͺ¨λ“  μ›μ†Œ 동일 : λ‹¨μˆœνžˆ λ°°μ—΄ ν•œ μ°¨λ‘€ 순회
    • $O(N)$
  • μ΅œμ•…μ˜ 경우
    • κ°€μž₯ 큰 μ›μ†Œκ°€ κ³„μ†ν•΄μ„œ 좕이 됨
    • κ³ μž‘ ν•˜λ‚˜ 쀄어든 크기의 λΆ€λΆ„ λ°°μ—΄λ‘œ λ‚˜λˆ”
    • $O(N^2)$
  • 평균적인 경우
    • μ΅œμ„ κ³Ό μ΅œμ•…μ˜ κ²½μš°κ°€ 가끔 λ°œμƒ
    • $O(N logN)$
  • μ΅œμ„ μ˜ κ²½μš°λŠ” 아무 μ•Œκ³ λ¦¬μ¦˜ + νŠΉμˆ˜ν•œ 쑰합을 톡해 μ–΄λ–»κ²Œλ“  $O(1)$둜 κ΅¬ν˜„ κ°€λŠ₯
    • ∴ λ”±νžˆ λ…Όμ˜ λŒ€μƒμ΄ μ•„λ‹˜!
  • λŒ€λΆ€λΆ„μ˜ 경우 μ΅œμ•…μ˜ κ²½μš°μ™€ 평균적인 κ²½μš°κ°€ κ°™λ‹€.
  • μ΅œμ„ /μ΅œμ•…/ν‰κ· μ˜ 경우 β‰  big-O/ΞΈ/Ξ©
    • μ•„λ¬΄λŸ° κ΄€λ ¨μ„± μ—†μŒ
    • μ΅œμ„ /μ΅œμ•…/ν‰κ· μ˜ 경우 : μ–΄λ–€ μž…λ ₯ λ˜λŠ” μƒν™©μ—μ„œ big-O둜 ν‘œν˜„
    • big-O/ΞΈ/Ξ© : 각각 μƒν•œ, ν•˜ν•œ, λ”± λ§žλŠ” μˆ˜ν–‰ μ‹œκ°„μ„ 의미



3. Space Complexity

  • μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” μ‹œκ°„λΏ μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ λ˜ν•œ μ‹ κ²½ 써야 ν•œλ‹€.
  • β­οΈμž¬κ·€ ν˜ΈμΆœμ—μ„œ μ‚¬μš©ν•˜λŠ” μŠ€νƒ 곡간 λ˜ν•œ 곡간 λ³΅μž‘λ„μ— ν¬ν•¨λœλ‹€.
1
2
3
4
5
6
int sum(int n) {
  if (n <= 0) {
    return 0;
  }
  return n + sum(n - 1);
}

ν•΄λ‹Ή μ½”λ“œλŠ” 호좜될 λ•Œλ§ˆλ‹€ μŠ€νƒμ˜ κΉŠμ΄κ°€ κΉŠμ–΄μ§„λ‹€.

μ „λΆ€ 호좜 μŠ€νƒμ— 더해지고 μ‹€μ œ λ©”λͺ¨λ¦¬ 곡간을 μž‘μ•„ λ¨ΉλŠ”λ‹€.

But, 단지 n번 ν˜ΈμΆœν–ˆλ‹€κ³  ν•΄μ„œ $O(n)$ 곡간을 μ‚¬μš©ν•˜μ§„ μ•ŠλŠ”λ‹€.

1
2
3
4
5
6
7
8
9
10
int pairSumSequence(int n){
  int sum = 0;
  for (int i = 0; i < n; i++){
    sum += pairSum(i, i + 1);
  }
  return sum;
}
int pairSum(int a, int b) {
  return a + b;
}
  • ν•¨μˆ˜λ“€μ΄ 호좜 μŠ€νƒμ— λ™μ‹œμ— μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ O(1) κ³΅κ°„λ§Œ μ‚¬μš©ν•œλ‹€.



4. Drop the Constants

  • big-OλŠ” λ‹¨μˆœνžˆ μ¦κ°€ν•˜λŠ” λΉ„μœ¨μ„ λ‚˜νƒ€λ‚΄λŠ” κ°œλ…
    • 특수 μž…λ ₯에 ν•œν•΄, O(N)이 O(1)보닀 λΉ λ₯΄κ²Œ λ™μž‘ν•  수 있음!
  • ∴ μˆ˜ν–‰ μ‹œκ°„μ—μ„œ μƒμˆ˜ν•­μ„ λ¬΄μ‹œν•œλ‹€!
  • β€œμˆ˜ν–‰ μ‹œκ°„μ΄ μ–΄λ–»κ²Œ λ³€ν™”ν•˜λŠ” 지λ₯Ό ν‘œν˜„ν•΄μ£ΌλŠ” λ„κ΅¬β€μ΄λ―€λ‘œ λ³΅μž‘ν•œ 연산을 λΆ„μ„ν•˜κ±°λ‚˜ 세뢀사항을 κ³ λ €ν•  ν•„μš”λŠ” μ—†λ‹€.
    • $O(n)$ 이 μ–Έμ œλ‚˜ $O(2N)$ 보닀 λ‚˜μ€ 것은 μ•„λ‹ˆλΌλŠ” μ‚¬μ‹€λ§Œ μ•Œκ³  있자.



5. Drop the Non-Dominant Terms

  • $O(N^2 + N)$ μ—μ„œ 두 번째 N은 νŠΉλ³„νžˆ μ€‘μš”ν•œ 항이 μ•„λ‹ˆλ‹€.
  • ∴ μˆ˜μ‹μ—μ„œ 지배적이지 μ•Šμ€ 항은 λ¬΄μ‹œν•΄λ„ λœλ‹€.
  • big-O μ‹œκ°„ μ¦κ°€μœ¨ κ·Έλž˜ν”„



6. Multi-Part Algorithms: Add vs. Multiply

  • λ§μ…ˆ μˆ˜ν–‰ μ‹œκ°„μ˜ 경우
1
2
3
4
5
6
for (int a : arrA) {
  print(a);
}
for (int b : arrB) {
  print(b);
}
  • κ³±μ…ˆ μˆ˜ν–‰ μ‹œκ°„μ˜ 경우
1
2
3
4
5
for (int a : arrA) {
  for (int b : arrB) {
    print(a + "," + b);
  }
}
  • A + B : β€œA 일을 λͺ¨λ‘ 끝마친 후에 B 일을 μˆ˜ν–‰ν•˜λΌβ€
  • A * B : β€œA 일을 ν•  λ•Œλ§ˆλ‹€ B 일을 μˆ˜ν–‰ν•˜λΌβ€



7. Amortized Time

  • ArrayList (동적 κ°€λ³€ 크기 λ°°μ—΄)
    • λ°°μ—΄μ˜ 역할을 함과 λ™μ‹œμ— 크기가 자유둭게 μ‘°μ ˆλ˜λŠ” 자료ꡬ쑰
    • μ›μ†Œ μ‚½μž… μ‹œ ν•„μš”μ— 따라 λ°°μ—΄μ˜ 크기λ₯Ό μ¦κ°€μ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ ArrayList의 곡간이 λ°”λ‹₯λ‚  일 X
  • λ°°μ—΄μ˜ μš©λŸ‰μ΄ 꽉 찼을 λ•Œ, ArrayList ν΄λž˜μŠ€λŠ” 기쑴보닀 크기가 두 λ°° 더 큰 배열을 λ§Œλ“  뒀에 이전 λ°°μ—΄μ˜ λͺ¨λ“  μ›μ†Œλ₯Ό μƒˆ λ°°μ—΄λ‘œ λ³΅μ‚¬ν•œλ‹€.
    • μ΄λ•Œ μ‚½μž… μ—°μ‚° μ‹œκ°„ : $O(N)$
    • ∡ 기쑴의 λͺ¨λ“  μ›μ†Œλ₯Ό μƒˆ λ°°μ—΄λ‘œ λ³΅μ‚¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έ
  • But, λŒ€λ‹€μˆ˜μ˜ κ²½μš°μ—λŠ” 배열에 κ°€μš© 곡간이 μ‘΄μž¬ν•˜κ³  μ΄λ•Œμ˜ μ‚½μž… 연산은 $O(1)$이 μ†Œμš”λœλ‹€.

μ΄λŸ¬ν•œ 두 κ°€μ§€μ˜ μ—°μ‚° (β€œλ°°μ—΄μ΄ 꽉 찼을 λ•Œ μ‚½μž…β€, β€œμΌλ°˜μ μΈ μ‚½μž…β€)을 ν¬ν•¨ν•œ 전체 μˆ˜ν–‰ μ‹œκ°„μ„ 따진닀.

  • λΆ„ν•  μƒν™˜ : μ΅œμ•…μ˜ κ²½μš°λŠ” 가끔 λ°œμƒν•˜μ§€λ§Œ ν•œ 번 λ°œμƒν•˜λ©΄ κ·Έ ν›„λ‘œ κ½€ μ˜€λž«λ™μ•ˆ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŒ
  • ∴ μ΄λŸ¬ν•œ 경우의 μƒν™˜ μ‹œκ°„μ€ $O(1)$ 이닀.



8. Log N Runtimes

  • 이진 탐색
    • N개의 μ •λ ¬λœ μ›μ†Œκ°€ λ“€μ–΄ μžˆλŠ” λ°°μ—΄μ—μ„œ μ›μ†Œ xλ₯Ό 찾을 λ•Œ μ‚¬μš©
  1. μ›μ†Œ x와 λ°°μ—΄μ˜ 쀑간값을 비ꡐ ν›„ κ°™μœΌλ©΄ λ°˜ν™˜
  2. x < μ€‘κ°„κ°’μ˜ 경우, μ™Όμͺ½ 탐색
  3. x > μ€‘κ°„κ°’μ˜ 경우, 였λ₯Έμͺ½ 탐색
  • μ²˜μŒμ—λŠ” μ›μ†Œ Nκ°œκ°€ λ“€μ–΄μžˆλŠ” λ°°μ—΄μ—μ„œ μ‹œμž‘
  • ν•œ 단계 이후, 탐색해야할 μ›μ†Œμ˜ κ°œμˆ˜κ°€ $N/2$둜 쀄어듦
  • 두 단계 이후, 탐색해야할 μ›μ†Œμ˜ κ°œμˆ˜κ°€ $N/4$둜 쀄어듦
    • ∴ λ”°λΌμ„œ 총 μˆ˜ν–‰ μ‹œκ°„μ€ λͺ‡ 단계 λ§Œμ— 1이 λ˜λŠ”μ§€μ— 따라 κ²°μ •λœλ‹€.

$2^k = N$ λ₯Ό λ§Œμ‘±ν•˜λŠ” $k$ κ°’ λ„μΆœ ➑️ 둜그(log)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„

  • μ–΄λ–€ λ¬Έμ œμ—μ„œ μ›μ†Œμ˜ κ°œμˆ˜κ°€ μ ˆλ°˜μ”© 쀄어든닀면 κ·Έ 문제의 μˆ˜ν–‰ μ‹œκ°„μ€ $O(log N)$이 될 κ°€λŠ₯성이 크닀.
  • κ· ν˜• 이진 탐색 νŠΈλ¦¬μ—μ„œλ„ 맀 λ‹¨κ³„λ§ˆλ‹€ μ›μ†Œμ˜ λŒ€μ†Œ 비ꡐ ν›„ 쒌우둜 λ‚΄λ €κ°€λ―€λ‘œ μ΄λ•Œλ„ $O(log N)$의 μˆ˜ν–‰ μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.
  • πŸ€” κ·Έλ ‡λ‹€λ©΄ big-Oμ—μ„œ 둜그의 밑은?
    • κ³ λ €ν•  ν•„μš” X (μˆ˜ν•™μ μΈ κ°œλ…)
  • πŸ’‘ 밑이 λ‹€λ₯Έ λ‘œκ·ΈλŠ” μƒμˆ˜ν•­ 만큼 차이가 λ‚˜λ―€λ‘œ big-O ν‘œν˜„μ‹μ—μ„œλŠ” λŒ€λΆ€λΆ„ 둜그의 밑은 λ¬΄μ‹œν•œλ‹€.



9. Recursive Runtimes

  • ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄ μ½”λ“œ
1
2
3
4
5
6
int f(int n) {
  if (n <= 1) {
     return 1;
  }
  return f(n - 1) + f(n - 1);
}



  • 전체 λ…Έλ“œμ˜ 개수 : $2^0 + 2^1 + 2^2 + 2^3 + … + 2^N (= 2^{N+1} - 1)$
  • ∴ μž¬κ·€ ν•¨μˆ˜μ—μ„œ μˆ˜ν–‰ μ‹œκ°„
    • $O(λΆ„κΈ°^{깊이})$
  • 곡간 λ³΅μž‘λ„ : $O(N)$
    • νŠΉμ • μ‹œκ°μ— μ‚¬μš©ν•˜λŠ” κ³΅κ°„μ˜ ν¬κΈ°λŠ” $O(N)$ 이닀.
  • 전체 λ…Έλ“œμ˜ 개수 : $O(2^N)$




πŸŽ“Β  1. Harvard CS50 - Asymptotic Notation

  • ν”„λ‘œκ·Έλž¨μ˜ λŸ°νƒ€μž„μ΄ 점근적으둜 μ–Όλ§ˆλ‚˜ 빨리 μ¦κ°€ν•˜λŠ”μ§€ λΆ„μ„ν•˜λŠ” 방법
    • μž…λ ₯ 크기가 λ¬΄ν•œλŒ€λ‘œ 증가함에 따라 크기가 10인 λ°°μ—΄κ³Ό λΉ„κ΅ν•˜μ—¬ 크기가 100인 배열을 μ •λ ¬ν•˜λŠ” 것



ex1. λ¬Έμžμ—΄μ˜ 개수λ₯Ό μ„ΈλŠ” 방법

  • λ¬Έμžμ—΄μ˜ 문자 수 β€˜n’에 λŒ€ν•΄ μ„ ν˜• μ‹œκ°„μœΌλ‘œ μ‹€ν–‰
  • 문자 수λ₯Ό 늘리면 λŸ°νƒ€μž„μ€ μž…λ ₯ 길이에 따라 μ„ ν˜•μ μœΌλ‘œ 증가
\[O(n)\]
  • But, λ§Œμ•½ λ¬Έμžμ—΄μ˜ 길이λ₯Ό κ³„μ‚°ν•˜μ—¬ ν•˜λ‚˜μ˜ λ³€μˆ˜μ— μ €μž₯ν•΄λ†“λŠ” 경우 κ³ λ €
  • len μ΄λΌλŠ” λ³€μˆ˜μ— λ¬Έμžμ—΄μ˜ 길이λ₯Ό κ³„μ‚°ν•˜μ—¬ λ„£μ–΄λ†“λŠ”λ‹€.
\[O(1)\]

⭐️ Asymptotic Complexity ⭐️

  • μ΄λŠ” λ¬Έμžμ—΄μ˜ 길이에 μ „ν˜€ 상관없이 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 속도에 μ „ν˜€ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.
  • 1자의 λ¬Έμžμ—΄κ³Ό 1000자의 λ¬Έμžμ—΄μ—μ„œ λ˜‘κ°™μ΄ λΉ λ₯΄κ²Œ μ‹€ν–‰
  • λ³„λ„μ˜ λ©”λͺ¨λ¦¬ 차지 λΌλŠ” 단점 λ°œμƒ
  • 단계 μˆ˜μ— 관계없이 μž…λ ₯ 크기에 따라 λ³€κ²½λ˜μ§€ μ•ŠμœΌλ©΄ μ—¬μ „νžˆ O(1)둜 λ‚˜νƒ€λ‚΄λŠ” 점근적으둜 일정



λ‹€μ–‘ν•œ Big-O μ•Œκ³ λ¦¬μ¦˜

\[O(n^2)\]
  • \(O(n^2)\) κ°€ \(O(n)\) 에 λΉ„ν•΄ μž…λ ₯ λ°μ΄ν„°μ˜ μˆ˜κ°€ 적을 λ•ŒλŠ” 더 λΉ λ₯Ό 수 μžˆμ§€λ§Œ 데이터가 λ§Žμ•„μ§€λ©΄ κ·Έ 차이가 컀진닀.
\[O(lgn)\]
  • λŒ€ν‘œμ μΈ μ˜ˆμ‹œ : 이진탐색
  • 이미 μ •λ ¬λœ μš”μ†Œμ— λŒ€ν•œ 탐색 μˆ˜ν–‰
  • 각 μž‘μ—…μ—μ„œ λ°°μ—΄μ˜ 크기λ₯Ό 절반으둜 쀄인닀.
  • λ°°μ—΄μ˜ 크기λ₯Ό 두배 ν‚€μš°λ©΄ ν•΄λ‹Ή μ½”λ“œμ˜ 1 Chunk만큼 μ‹€ν–‰ μ‹œκ°„μ΄ λŠ˜μ–΄λ‚œλ‹€.
  • λͺ©λ‘μ˜ 쀑간 μš”μ†Œλ₯Ό ν™•μΈν•œ λ‹€μŒ λΆ„ν• ν•œλ‹€. -> λŒ€μˆ˜μ‹œκ°„ \(O(log n)\) μ—μ„œ μž‘λ™ν•œλ‹€.
  • best-case : μ²˜μŒμ— λ°”λ‘œ μ°Ύκ³ μžν•˜λŠ” μš”μ†Œλ₯Ό μ°ΎλŠ” 경우
  • worst-case : μ΅œν›„μ˜ κ²½μš°μ— μ°Ύκ³ μžν•˜λŠ” μš”μ†Œλ₯Ό μ°ΎλŠ” 경우

⭐️ λŸ°νƒ€μž„μ˜ μƒν•œκ³Ό ν•˜ν•œ ⭐️

This post is licensed under CC BY 4.0 by the author.