νμ€ν μΉπ κ°λ°μ μ§λ§μ π§π½βπ»
β μΈκ³΅μ§λ₯ κ΄μ¬ π€
Categories
-
β£
βΆ COMPUTER_SCIENCE
π: 7 -
β£
βΆ WEB
π: 3 -
β£
βΆ ETC
π: 3-
β
β£
ETCS
π: 10 -
β
β£
SUBBRAIN κ°λ°κΈ°
π: 5 -
β
β
YOS κ°λ°κΈ°
π: 1
-
β
β£
-
β
βΆ AI
π: 9-
β£
AITOOLS
π: 3 -
β£
CV
π: 2 -
β£
DEEP_LEARNING
π: 1 -
β£
DATA_VIS
π: 2 -
β£
GRAPH
π: 1 -
β£
LIGHTWEIGHT
π: 1 -
β£
MATH
π: 1 -
β£
NLP
π: 3 -
β
STRUCTURED_DATA
π: 2
-
β£
λ³ν© μ λ ¬
Merge Sort(λ³ν© μ λ ¬)
_Introduction to Algorithm, 3rd, Cormen_μ ν λλ‘ μ 리ν λ΄μ©μ λλ€
λ³ν© μ λ ¬μ divide-and-conquer μκ³ λ¦¬μ¦μ μ΄μ©νμ¬ μ¬κ·μ μΌλ‘ μ λ ¬νλ μκ³ λ¦¬μ¦μ΄λ€.
μ λ°μ μΌλ‘ ν΅μ λ ¬λ³΄λ€ λ€λ¨μ΄μ§κ³ λ°μ΄ν° ν¬κΈ° λ§νΌ λ©λͺ¨λ¦¬κ° λ νμνλ€.
μμ λ μ λ ¬(stable sort)μ΄λ―λ‘, λ§μ½ κ°μ ν¬κΈ°μ μμκ° λμ΄ μ‘΄μ¬νλ©΄, λμ μ ν κ΄κ³κ° λ°λμ§ μλλ€.
Merge ν¨μ
λ¨Όμ Merge ν¨μμ΄λ€. Merge-Sort ν¨μ λ΄λΆμ μ€νλ ν¨μλ‘, λλ λ κ°μ μ λ ¬λ λ°°μ΄μ νλλ‘ ν©μΉλ μν μ νλ€.
Merge(A,p,q,r)
n1=q-p+1
n2=r-q
//let L[1..n1+1] and R[1..n2+1] be new arrays
for i = 1 to n1
L[i] = A[p+i-1]
for j = 1 to n2
R[j] = A[q+j]
L[n1+1] = inf
R[n2+1] = inf
i = 1
j = 1
for k = p to r // 루ν λΆλ³μ± λμ 루ν
if L[i]<=R[j]
A[k] = L[i]
i = i + 1
else A[k] = R[j]
j = j + 1
μ κ³Όμ μ μκ° λ³΅μ‘λλ $O(n)$μ΄λ€.
- μ‘΄μ¬νλ for loopλ€μ΄ λͺ¨λ nμ λΉλ‘νμ¬ μ§νλ¨ μ¦, nμ λν μ ν ν¨μκΌ΄
- μ΄μΈμ μ½λλ λͺ¨λ μμ μκ°μ.
Merge ν¨μμ 루ν λΆλ³μ±
μ΄λ, 17λ²μ§Έ μ€λΆν° λ§μ§λ§ κΉμ§μ for 루νμ 루ν λΆλ³μ±μ λ€μκ³Ό κ°μ΄ 보쑴λλ€.
루ν λΆλ³μ±(Loop invariant) κ°μ :
μ€λ¦μ°¨μ λ³ν© μ λ ¬μμ λΆλΆλ°°μ΄ $A[p..k-1]$μ $L[1..n1+1]$κ³Ό $R[1..n2+1]$μ μμλ€ μ€ $k - p$ κ°μ κ°μ₯ μμ μμλ€λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ λ ¬λμ΄ μλ€. λν, $L, R$ λ°°μ΄ λ΄μμ νμ¬ μμ§ $A$ λ°°μ΄μ μΆκ°λμ§ μμ μμλ€μΈ $L[i]$μ $R[j]$λ $L, R$ λ°°μ΄ λ΄μμ κ°μ₯ μμ μμμ΄λ€.
μ΄κΈ°νμμμ 루ν λΆλ³μ±:
루νμ μ§μ νλ©΄μ $k = p$μ΄λ©°, $A[pβ¦k-1]$μ λΉμ΄μμΌλ―λ‘, $k-p(0)$κ°μ κ°μ₯ μμ μμλ€λ‘ μ΄λ£¨μ΄μ Έ μκ³ , μ λ ¬λμ΄ μλ€. λν $L$κ³Ό $R$ λ°°μ΄μ κ°κ° μ λ ¬λμ΄ μμΌλ―λ‘, $L[1], R[1]$μ κ°μ λ°°μ΄μμ κ°μ₯ μμ μμμ΄λ€. μ¦, 루ν λΆλ³μ±μ΄ 보쑴λλ€.
μ μ§μμμ 루ν λΆλ³μ±:
λ¨Όμ $L[i] <= R[j]$μΈ κ²½μ°, $L[i]$λ $A[k] = L[i]$ μ΄μ μ $A$μ ν¬ν¨λμ§ μμ $L$ λ΄μμ κ°μ₯ μμ μμμ΄λ©°, $A[k] = L[i]$ μ΄νμ $A[pβ¦k]$λ $k-p+1$κ°μ μ λ ¬λ κ°μ₯ μμ μμλ€μ κ°μ§κ³ μκ² λλ€. μ΄ν $k$μ $i$κ° 1μ© μ¦κ°νλ©΄μ 루ν λΆλ³μ±μ 보쑴νλ€.
$R[j] < L[i]$μΈ κ²½μ°, 16, 17λ²μ§Έ μ€μ μ½λκ° λκ°μ νλμΌλ‘ 루ν λΆλ³μ±μ 보쑴νλ€.
μ’ λ£μμμ 루ν λΆλ³μ±:
$k = r + 1$μ΄ λλ©΄μ, $A[p..k-1]$ μ¦, $A[p..r]$μ $k-p=r-p+1$κ°μ $L[1..n1+1], R[1..n2+1]$μμ κ°μ₯ μμ μ λ ¬λ μμλ€μ κ°μ§κ² λλ€. μ΄λ $L,R$μλ κ°κ° 무νλμ μμλ§ νλμ© κ°μ§κ² λλ―λ‘, 루ν λΆλ³μ±μ 보쑴νλ€.
Merge-Sort ν¨μ
μ΄ λ€μμ Merge-Sort ν¨μμ΄λ€. μ 체 λ°°μ΄ Aμ λΆλΆλ°°μ΄ $A[p..r]$μ λ λ€λ₯Έ λκ°μ λΆλΆ λ°°μ΄ $A[p..q]$μ $A[q+1..r]$λ‘ λλμ΄ μ λ ¬νλ μν μ νλ©°, μ¬κ· ꡬ쑰λ₯Ό ν¬ν¨νκ³ μλ€.
Merge-Sort(A,p,r)
if p &#60; r
q = (p+r)//2
Merge-Sort(A, p, q)
Merge-Sort(A, q+1, r)
Merge(A, p, q, r)
$p >= r$μ΄ λλ μκ°, λ°°μ΄μλ νλμ μμλ§ λ¨μΌλ―λ‘ κ΅³μ΄ μ λ ¬νμ§ μλλ€.
μ 체μ μΈ λ³λ ¬ μ λ ¬μ λμμ μλμ κ·Έλ¦Ό(Figure 1)μΌλ‘ λ¬μ¬λμ΄ μλ€.
divide-and-conquer μκ³ λ¦¬μ¦ λΆμ
μ΄λ¬ν μ¬κ· ꡬ쑰λ₯Ό ν¬ν¨νκ³ μλ κ²½μ°μλ μ νμ(recurrence equation)μ ν΅νμ¬ ννν μ μλ€.
λ§μ½, μ λ ₯ ν¬κΈ° nμ΄ μ΄λ μμ€(c) μ΄νλ‘ κ·Ήλλ‘ μμμ§λ©΄, κ±°μ μμ μκ°($O(1)$) μμ νλ¦°λ€κ³ λ³Ό μ μλ€. μλ₯Ό λ€μ΄, λ°°μ΄μ μμκ° νλλ§ μλ€λ©΄ μ λ ¬μ νμ§ μκ³ ,μλμ μ€λͺ ν A λ°°μ΄λ‘ Combine νλ μκ°λ§ μ‘΄μ¬νλ―λ‘, μμμκ°μ ν릴 κ²μ΄λ€. μ΄λ, λ¨ 1κ°μ§λ¦¬ λ°°μ΄μ Combineνλλ° κ±Έλ¦¬λ μμμκ°μ $c_1$λΌκ³ νμ.
μ΄μΈμλ λ¨Όμ λ°°μ΄μ μ λ°μΌλ‘ λλλλ° $D(n)$ λ§νΌμ μκ°μ΄ νμνκ³ , λ³΄ν΅ λ°°μ΄μ ν¬κΈ°μ κ΄κ³μμ΄ μμ μκ°μ΄ κ±Έλ¦°λ€. $D(n)=O(1)$ (Divide κ³Όμ )
μ λ°μ λ°°μ΄μ μ λ ¬νλλ° κ±Έλ¦¬λ μκ°μ, λ λΆλΆλ°°μ΄λ‘ λλμ΄ μ²λ¦¬νλ―λ‘, $2T(n/2)$λ§νΌμ μ λ ¬ μκ°μ΄ νμνλ€.(Conquer κ³Όμ )
λ§μ§λ§μΌλ‘ μ΄ λμ μμ Merge ν¨μμ²λΌ νλλ‘ ν©νλλ°, $C(n)$ λ§νΌμ μκ°μ΄ νμνλ€.(Combine κ³Όμ ) μ΄λ, μμ Merge ν¨μ λ μ€λͺ ν κ² μ²λΌ $O(n)$μ μκ°μ΄ 걸리며, μμ 1κ°μ§λ¦¬ λ°°μ΄μ Combined νλλ° κ±Έλ¦¬λ μκ°μ $c_1$μ΄λΌ νμμΌλ―λ‘, μ΄μ λΉλ‘ν΄ $nc_1$μ΄λΌ ν μ μλ€.
μ κ²½μ°λ₯Ό μμΌλ‘ μ 리νλ©΄ μλμ κ°μ μ νμμ΄ λμ¨λ€.
\[T(n)=\left\{\begin{matrix} O(1),when\ n\leq c \\ D(n)+2T(n/2)+C(n) \end{matrix}\right.=\left\{\begin{matrix} c_1,when\ n = 1 \\ 2T(n/2)+nc_1 \end{matrix}\right.\]μ΄λ $T(n/2)$λ λν λ€μκ³Ό κ°μ΄ ννλ μ μλ€.
\[T(n/2)=\left\{\begin{matrix} O(1),when\ n\leq c \\ D(n/2)+2T(n/4)+C(n/2) \end{matrix}\right.=\left\{\begin{matrix} c_1,when\ n = 1 \\ 2T(n/4)+\frac{n}{2}\cdot c_1 \end{matrix}\right.\]μ΄λ₯Ό λμ
νκ³ , nμ 1λ³΄λ€ ν¬λ€κ³ κ°μ νλ©΄ $\eqref{eq:T(n)}$ μ¦, $T(n)$μ λ€μκ³Ό κ°μ΄ μ 리 λλ€.
\(T(n)=4T(n/4)+ 2nc_1\)
μ΄λ° μμΌλ‘ $T(n)$μ κ³μ λ μμ μ
λ ₯ κ°μ T ν¨μλ‘ λλλ€ λ³΄λ©΄ μλ κ·Έλ¦Ό Figure 2μ κ°μ μ¬κ· νΈλ¦¬ κ΅¬μ‘°κ° λμ€κ² λλ€.
μ΄λ¬ν νΈλ¦¬ ꡬ쑰λ μκΈ°ν κ·Έλ¦Όκ³Ό κ°μ΄ nμ ν¬κΈ°κ° 1μ΄ λμ΄ μμμκ°μ΄ λμ¬ λκΉμ§ μ§νλλλ°, μ΄λ¬ν μΈ΅ ꡬ쑰λ μ΄ $\log n + 1$ κ° λ§νΌ μμ±λλ€. (μ»΄ν¨ν° 곡νμμμ $\log$μ λ°μ μλ΅λ μ κΈ°λ³Έ 2 μ.)
κ·Έλ¦¬κ³ κ° μΈ΅ ꡬ쑰μμ k κ°λλ‘ μμ±λ λΉμ© $cn/k$μ λͺ¨λ ν©νλ©΄ μΈμ λ $cn$μΌλ‘ μΌμ νλ―λ‘, κ° μΈ΅μμμ μκ° λΉμ©μ $cn$μ΄λΌκ³ ν μ μλ€.
μ 체 μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λλ $(\log n+1)cn = cn\log n + cn$μ΄ λλ©°, μ΄λ₯Ό λΉ μ€ νκΈ°λ²μΌλ‘ λνλλ©΄ μ°¨μμ μμκ° λ¨μ΄μ§λ―λ‘ μ΅μ’ μ μΌλ‘ λ³λ ¬ μ λ ¬μ μκ° λ³΅μ‘λλ $O(\log n)$μ΄ λλ€.
_articles/computer_science/algorithm/λ³ν© μ λ ¬.md