[μκ³ λ¦¬μ¦] λΆν μ 볡(Divide & Conquer)
<μκ³ λ¦¬μ¦ λ¬Έμ ν΄κ²° μ λ΅>μ ν΄λΉ λ¨μ λ°μ€μ λλ€.
"λΆν μ 볡μ μ¬μ©νλ μκ³ λ¦¬μ¦λ€μ λκ° μΈ κ°μ§μ κ΅¬μ± μμλ₯Ό κ°κ³ μμ΅λλ€.
-
λ¬Έμ λ₯Ό λΉμ·ν ν¬κΈ°μ λ μμ λ¬Έμ λ‘ λΆν νλ κ³Όμ (divide)
-
κ° λ¬Έμ μ λν΄ κ΅¬ν λ΅μ μλ λ¬Έμ μ λν λ΅μΌλ‘ λ³ν©νλ κ³Όμ (merge)
-
λμ΄μ λ΅μ λΆν νμ§ μκ³ κ³§μ₯ ν μ μλ λ§€μ° μμ λ¬Έμ (base case)"
"κ°μ λ¬Έμ λΌλ μ΄λ»κ² λΆν νλλμ λ°λΌ μκ° λ³΅μ‘λ μ°¨μ΄κ° 컀μ§λ€λ κ²μ 보μ¬μ£Όλ μ’μ μμ λλ€. μ¬λ¬λ² μ€λ³΅λμ΄ κ³μ°λλ©΄μ μκ°μ μλͺ¨νλ λΆλΆ λ¬Έμ λ€μ΄ μκΈ° λλ¬Έμ λλ€."
ββ
λ³ν© μ λ ¬ (Merge Sort)
μμ΄μ κ°μ΄λ°μμ μͺΌκ° λ κ°μ λΆλΆμμ΄λ‘ λ§λ€κ³ , κ° λΆλΆ μμ΄μ λν΄μλ κ°μ μ μ°¨λ₯Ό μ¬κ· νΈμΆνλ€. κΈ°μ μ¬λ‘(base case)κΉμ§ μͺΌκ° κ°μ΄ λ°νλλ©΄, λμλ₯Ό λΉκ΅νμ¬ λ³ν©νλ©° μμ΄μ μ λ ¬νκ² λλ€.
β
ν΅ μ λ ¬ (Merge Sort)
νΌλ΄(Pivot, κΈ°μ€)μ μ νκ³ , νΌλ΄κ³Ό λμλ₯Ό λΉκ΅ν΄
μμ΄μ [Pivotλ³΄λ€ μμ μλ€] [Pivot] [Pivotλ³΄λ€ ν° μλ€]μ κΌ΄λ‘ λ§λ λ€.
μ΄ λ, νΌλ΄μ μμΉλ μ λ ¬ νμ νΌλ΄μ μμΉμ μΌμΉνλ―λ‘ [Pivot]μ μ μΈνκ³ μ λ€ λ¬Άμμ λν΄μ κ°μ μ μ°¨λ₯Ό κ°κ° μ¬κ·νΈμΆ νλ€.
β
β
β
μΉ΄λΌμΈ λ°μ λΉ λ₯Έ κ³±μ (Karatsuba)
$$a\left(256μ리\ μμ°μ\right)\times b\left(256μ리\ μμ°μ\right)\ =\ ?$$
$$a\ =a_1\left(aμ\ 첫\ 128μ리\right)\times 10^{128}+a_0\left(aμ\ κ·Έ\ λ€μ\ 128μ리\right)β$$
$$b\ =b_1\left(bμ\ 첫\ 128μ리\right)\times 10^{128}+b_0\left(bμ\ κ·Έ\ λ€μ\ 128μ리\right)β$$
$$\to \ a\times b=\left(a_1\times b_1\right)\times 10^{256}+\left(a_1\times b_0\ +\ a_0\times b_1\right)\ +\ \left(a_0\times b_0\right)β$$
a × bλ μ λ° ν¬κΈ°μ 4λ²μ κ³±μ
μΌλ‘ λΆν (divide)ν μμμμ μ μ μλ€.
κ·Έλ¦¬κ³ λ€μκ³Ό κ°μ΄ κ³μ°νλ©΄ 4λ²μ κ³±μ
μ 3λ²μ κ³±μ
μΌλ‘ μ€μΌ μκ° μλ€.
$$z_0=\left(a_0\times b_0\right)$$
$$z_1=\left(a_1\times b_0\ +\ a_0\times b_1\right)\ β$$
$$z_2=\left(a_1\times b_1\right)$$
$$β»\ \left(a_1+b_0\ \right)\times \left(\ a_0+b_1\right)\ =$$
$$\left(a_1\times b_1\right)+\left(a_1\times b_0\ +\ a_0\times b_1\right)\ +\ \left(a_0\times b_0\right)$$
$$\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =z_0+z_1+z_2ββ$$
μλ μΈ κ°μ λ³μλ₯Ό μ μ ν μ°μ°(λνκΈ°, μννΈ)νμ¬ κ΅¬νλ€.
z2 = a1 * b1;
z0 = a0 * b0;
z1 = (a0 + a1) * (b0 + b1) - z0 - z2;
β