Data Structure & Algorithm

[μ•Œκ³ λ¦¬μ¦˜] μ•Œκ³ λ¦¬μ¦˜ 뢄석 방법

μ—¬λ‰΄λˆ„ 2023. 12. 27. 13:28
728x90

πŸ’‘ μ•Œκ³ λ¦¬μ¦˜μ˜ 뢄석

μ•Œκ³ λ¦¬μ¦˜μ˜ μ„±λŠ₯을 ν‰κ°€ν•˜κΈ° μœ„ν•œ λΆ„μ„μœΌλ‘œ, 크게 μˆ˜ν–‰ μ‹œκ°„(μ‹œκ°„ λ³΅μž‘λ„)κ³Ό ν•„μš”ν•œ κΈ°μ–΅ μž₯치의 μ–‘(곡간 λ³΅μž‘λ„)으둜 ν‰κ°€λ˜λŠ”λ°, λŒ€λΆ€λΆ„μ˜ κ²½μš°μ— μˆ˜ν–‰ μ‹œκ°„μ΄ 더 μ€‘μš”ν•œ 의미λ₯Ό μ§€λ‹Œλ‹€. λ”°λΌμ„œ, ν•΄λ‹Ή κΈ€μ—μ„œλŠ” μ‹œκ°„ λ³΅μž‘λ„ 뢄석을 톡해 μ„€κ³„ν•œ μ•Œκ³ λ¦¬μ¦˜μ΄ μ–Όλ§ˆλ‚˜ 효율적으둜 문제λ₯Ό ν’€μ–΄λ‚΄λŠ”κ°€μ— λŒ€ν•œ μ§€ν‘œλ₯Ό μ œμ‹œν•˜κ³  νŒλ‹¨μ˜ κ·Όκ±°λ₯Ό μ œμ‹œν•˜λŠ” 방법을 λ‚˜μ—΄ν•œλ‹€.

μ‹œκ°„ λ³΅μž‘λ„ λΆ„μ„μ΄λž€ μž…λ ₯크기에 따라 λ‹¨μœ„μ—°μ‚°μ΄ λͺ‡ 번 μˆ˜ν–‰λ˜λŠ”μ§€ κ²°μ •ν•˜λŠ” μ ˆμ°¨μ΄λ‹€.

 

 

πŸ’‘ 뢄석 λ°©λ²•μ˜ μ’…λ₯˜

1. μΌμ •μ‹œκ°„ (λͺ¨λ“  경우) 뢄석 (Every-case analysis)

μž…λ ₯ κ°’μ—λŠ” μ’…μ†λ˜μ§€ μ•ŠμœΌλ©°, μž…λ ₯ ν¬κΈ°μ—λ§Œ μ’…μ†λ˜μ–΄ μžˆλŠ” κ²½μš°μ΄λ‹€. 즉, μž…λ ₯ 값에 상관없이 항상 μ—°μ‚°μ˜ μ‹€ν–‰ νšŸμˆ˜κ°€ λ™μΌν•œ 경우λ₯Ό μ˜λ―Έν•˜λ©°, μ•„λž˜μ—μ„œμ˜ $T(n)$을 κ΅¬ν•˜λŠ” 과정이 μ‹œκ°„ λ³΅μž‘λ„ 뢄석이닀.

 

μ˜ˆμ‹œ1 : 합계 μ•Œκ³ λ¦¬μ¦˜

(1) μž…λ ₯크기 : Sλ°°μ—΄μ˜ μ›μ†Œ 개수

(2) λ‹¨μœ„μ—°μ‚° : λ°°μ—΄μ˜ μ›μ†Œλ₯Ό result에 더함

result = 0
S = [1, 2, 3, 4, 5]

for i in S:
   result += i

 

λ°°μ—΄μ˜ 각 μ›μ†Œμ˜ κ°’(μž…λ ₯ κ°’)κ³ΌλŠ” λ¬΄κ΄€ν•˜κ²Œ for문은 λ°˜λ“œμ‹œ λ°°μ—΄μ˜ 크기(μž…λ ₯ 크기)만큼 μ‹€ν–‰λœλ‹€.

λ”°λΌμ„œ, λ‹¨μœ„ μ—°μ‚°μ˜ 총 횟수(μ‹œκ°„λ³΅μž‘λ„)λŠ” $T(n) = n$

 

μ˜ˆμ‹œ2 : κ΅ν™˜μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜

(1) μž…λ ₯크기 : λ°°μ—΄μ˜ μ›μ†Œ 개수 ($len(S)$)

(2) λ‹¨μœ„μ—°μ‚° : $S[j] < S[i]$ 비ꡐ (쑰건문)

for i in range(len(S)):
    for j in range(i + 1, len(S)):
        if S[j] < S[i]:
            S[i], S[j] = S[j], S[i]

 

μž…λ ₯ 값에 상관없이 μž…λ ₯ 크기(λ°°μ—΄μ˜ 크기)만큼 κ°’μ˜ 비ꡐ가 μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— 일정 μ‹œκ°„ 뢄석을 μ‹€ν–‰ν•  수 μžˆλ‹€. 

λ”°λΌμ„œ, 일정 μ‹œκ°„ 뢄석 κ²°κ³Ό 쑰건문의 총 μˆ˜ν–‰νšŸμˆ˜λŠ” 

$$T(n) = (n - 1) + (n - 2) + ... + 1 = \frac {(n - 1) n} {2}$$

$i = 0$일 λ•Œ, λΉ„κ΅νšŸμˆ˜λŠ” $n - 1$번

$i = 1$일 λ•Œ, λΉ„κ΅νšŸμˆ˜λŠ” $n - 2$번

$...$

 

2. μ΅œμ•…μ˜ 경우 뢄석 (Worst-case analysis)

μž…λ ₯ κ°’κ³Ό μž…λ ₯ 크기 λͺ¨λ‘μ— μ’…μ†λ˜μ–΄ μžˆλŠ” 경우둜, λ‹¨μœ„μ—°μ‚°μ΄ μˆ˜ν–‰λ˜λŠ” νšŸμˆ˜κ°€ μ΅œλŒ€μΈ 경우λ₯Ό μ„ νƒν•˜λŠ” 뢄석방법이닀.

 

μ˜ˆμ‹œ : μˆœμ°¨κ²€μƒ‰ μ•Œκ³ λ¦¬μ¦˜

(1) μž…λ ₯크기 : λ°°μ—΄μ˜ μ›μ†Œ 개수 ($len(S)$)

(2) λ‹¨μœ„μ—°μ‚° : λ°°μ—΄μ˜ 각 κ°’κ³Ό x(찾고자 ν•˜λŠ” κ°’)κ°’μ˜ 비ꡐ

x = 4
S = [1, 2, 3, 4, 5]
cnt = 0

for i in S:
    if i == x:
        break;
    cnt += 1

 

λ°°μ—΄μ˜ 크기가 n이라고 ν•  λ•Œ, x에 ν•΄λ‹Ήν•˜λŠ” 값이 λ°°μ—΄μ˜ 맨 λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•˜κ±°λ‚˜ xκ°€ 배열에 μ—†λŠ” 경우  for문이 n만큼 μ‹€ν–‰λœλ‹€. 즉, λ‹¨μœ„μ—°μ‚°μ΄ n번 μˆ˜ν–‰λ˜κ³  이에 따라 μ΅œμ•…μ˜ 경우 λΆ„μ„μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” $W(n) = n$이닀.

 

참고둜, 순차 κ²€μƒ‰μ˜ 경우 μž…λ ₯된 λ°°μ—΄μ˜ 값에 따라 κ²€μƒ‰ν•˜λŠ” νšŸμˆ˜κ°€ 달라지기 λ•Œλ¬Έμ— μž…λ ₯ 값에 μ’…μ†λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” λͺ¨λ“  경우 λΆ„μ„μ˜ 쑰건을 λ§Œμ‘±ν•˜μ§€ λͺ»ν•˜κ²Œ 되며 이에 따라 λͺ¨λ“  경우 뢄석은 λΆˆκ°€λŠ₯ν•˜λ‹€.

 

3. ν‰κ· μ˜ 경우 뢄석 (Average-case analysis)

μž…λ ₯ κ°’κ³Ό μž…λ ₯ 크기 λͺ¨λ‘μ— μ’…μ†λ˜μ–΄ μžˆλŠ” 경우둜, λͺ¨λ“  μž…λ ₯에 λŒ€ν•΄ λ‹¨μœ„μ—°μ‚°μ΄ μˆ˜ν–‰λ˜λŠ” 평균 횟수(κΈ°λŒ€μΉ˜)λ₯Ό μ˜λ―Έν•œλ‹€. 각 μž…λ ₯에 λŒ€ν•΄ ν™•λ₯  할당이 κ°€λŠ₯ν•˜λ©°, μ΅œμ•…μ˜ κ²½μš°λ³΄λ‹€λŠ” 계산이 λ³΅μž‘ν•œ 것이 νŠΉμ§•μ΄λ‹€.

 

μ˜ˆμ‹œ : μˆœμ°¨κ²€μƒ‰ μ•Œκ³ λ¦¬μ¦˜

(1) μž…λ ₯크기 : λ°°μ—΄μ˜ μ›μ†Œ 개수 ($len(S) = n$)

(2) λ‹¨μœ„μ—°μ‚° : λ°°μ—΄μ˜ 각 κ°’κ³Ό x(찾고자 ν•˜λŠ” κ°’)κ°’μ˜ 비ꡐ

(3) κ°€       μ • : λ°°μ—΄μ˜ μ•„μ΄ν…œμ€ λͺ¨λ‘ λ‹€λ₯΄λ‹€

x = 4
S = [1, 2, 3, 4, 5]
cnt = 0

for i in S:
    if i == x:
        break;
    cnt += 1

 

1) Case 1 : xκ°€ λ°°μ—΄ μ•ˆμ— μžˆλŠ” 경우

$$ A(n) = \sum_{k=1}^n k \times \frac {1} {n} = \frac {n + 1} {2} $$

  • $1 \leq  k leq n$ 에 λŒ€ν•΄ $x$κ°€ λ°°μ—΄μ˜ $k$λ²ˆμ§Έμ— μžˆμ„ ν™•λ₯  $= \frac {1} {n}$
  • $x$κ°€ λ°°μ—΄μ˜ $k$λ²ˆμ§Έμ— μžˆμ„ λ•Œ, 이λ₯Ό μ°ΎκΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” λ‹¨μœ„μ—°μ‚° 횟수 $= k$

2) Case 2 : xκ°€ λ°°μ—΄ μ•ˆμ— μ—†λŠ” 경우λ₯Ό κ³ λ €

$$ A(n) = \sum_{k=1}^n (k \times \frac {p} {n}) + n(1-p) = n(1 - \frac {p} {2}) + \frac {p} {2} $$

  • $x$κ°€ λ°°μ—΄ $S$ μ•ˆμ— μžˆμ„ ν™•λ₯  = $p$
  • $1 \leq  k \leq n$ 에 λŒ€ν•΄ $x$κ°€ λ°°μ—΄μ˜ $k$λ²ˆμ§Έμ— μžˆμ„ ν™•λ₯  $ = \frac {p} {n}$
  • $x$κ°€ 배열에 없을 ν™•λ₯  = $1 - p$
  • $x$κ°€ λ°°μ—΄μ˜ $k$λ²ˆμ§Έμ— μžˆμ„ λ•Œ, 이λ₯Ό μ°ΎκΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” λ‹¨μœ„μ—°μ‚° 횟수 $= k$

4. μ΅œμ„ μ˜ 경우 뢄석 (Best-case analysis)

μž…λ ₯ κ°’κ³Ό μž…λ ₯ 크기 λͺ¨λ‘μ— μ’…μ†λ˜μ–΄ μžˆλŠ” 경우둜, λͺ¨λ“  μž…λ ₯에 λŒ€ν•΄ λ‹¨μœ„μ—°μ‚°μ΄ μˆ˜ν–‰λ˜λŠ” νšŸμˆ˜κ°€ μ΅œμ†ŒμΈ 경우λ₯Ό μ„ νƒν•˜λŠ” 방법이닀.

 

μ˜ˆμ‹œ : μˆœμ°¨κ²€μƒ‰ μ•Œκ³ λ¦¬μ¦˜

(1) μž…λ ₯크기 : λ°°μ—΄μ˜ μ›μ†Œ 개수 ($len(S) = n$)

(2) λ‹¨μœ„μ—°μ‚° : λ°°μ—΄μ˜ 각 κ°’κ³Ό x(찾고자 ν•˜λŠ” κ°’)κ°’μ˜ 비ꡐ

x = 4
S = [1, 2, 3, 4, 5]
cnt = 0

for i in S:
    if i == x:
        break;
    cnt += 1

 

μ°ΎμœΌλ €λŠ” κ°’($x$)이 λ°°μ—΄μ˜ κ°€μž₯ μ•žμ— μ‘΄μž¬ν•  λ•Œ, μž…λ ₯의 크기에 상관없이 λ‹¨μœ„μ—°μ‚°μ΄ ν•œ 번만 μˆ˜ν–‰λœλ‹€.

λ”°λΌμ„œ, $B(n) = 1$

728x90
λŒ“κΈ€μˆ˜0