๐ค Basic Arithmethic
๋ง์ , ๋บ์ , ๊ณฑ์ , ๋๋์ ์ฆ ๊ธฐ๋ณธ์ฐ์ฐ(์ฌ์น์ฐ์ฐ)์ Basic Arithmethic์ด๋ผ๊ณ ํฉ๋๋ค.
n-bit๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ณธ์ ์ธ bit ์ฐ์ฐ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด์ ์ ๋ชจ๋ ๊ณ์ฐ์ ์์ด ๋จ์ผ bit์ ๋ํด ๊ธฐ๋ณธ์ ์ธ bit ์ฐ์ฐ์ $O(1)$์๊ฐ์ด ์๋ชจ๋๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
๐ ๋ n-bit ์ด์ง์์ ๋ง์
$53$๊ณผ $35$์ ์ด์ง์์ธ "1 1 0 1 0 1"๊ณผ "1 0 0 0 1 1"์ ์์๋ก ๋ํด๋ณด๊ฒ ์ต๋๋ค.
์์ ๊ฐ์ด 6bit ์ฐ์ฐ์์ ์ต์์ ๋นํธ์์์ Carry๊ฐ ๋ฐ์ํ์ฌ 7bit๊ฐ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ์ถ๋ ฅ๋์์ต๋๋ค.
๋ ๊ฐ์ n-bit ์ง๋ฆฌ ์ด์ง์๊ฐ ์ฃผ์ด์ก์ ๋ n ๋ฒ์ ๋ง์ ์ด ๋ฐ๋ณต๋๋ฉด์ ์ผ์ด๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ฆ ๋ n-bit ์ด์ง์์ ๋ง์ ์ ์๊ฐ๋ณต์ก๋๋ $O(n)$์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๐ ๋ n-bit ์ด์ง์์ ๊ณฑ์ (Algorithm 1)
$13$๊ณผ $11$์ ์ด์ง์์ธ "1 1 0 1"๊ณผ "1 0 1 1"์ ์์๋ก ๊ณฑํด๋ณด๊ฒ ์ต๋๋ค.
์์ ์์ ๋ดค์๋ ๋ 4bit ์ด์ง์์ ๊ณฑ์ ์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ด๋ "1 0 1 1"์ ๊ฐ ๋นํธ๋ฅผ "1 1 0 1"๊ณผ AND์ฐ์ฐ์ ํตํด ์งํ๋ ๋ค ๊ฐ ์๋ฆฟ์ ๋งํผ์ธ 3 ๋ฒ์ Shift๊ฐ ์ผ์ด๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์ดํ 4๊ฐ์ ์ค๊ฐ๊ฐ์ ๋ํ๊ธฐ ์ํด 3๋ฒ์ ๋ง์ ์ฐ์ฐ์ด ์งํ๋ฉ๋๋ค.
ํด๋น ๊ฐ๋ค์ ๋ชจ๋ ๋ํ์๋ 8bit์ธ "1 0 0 0 1 1 1 1"์ด ์ถ๋ ฅ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
์๋ฆฟ์์ ์ด๋๊ณผ Carry๋ฅผ ๊ณ ๋ คํ์๋ ์ต๋ ๋ ๋ฐฐ์ bit์๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ์ด ์ถ๋ ฅ๋๋ค๋ ๊ฒ์ ์ถ์ธกํ ์ ์์ต๋๋ค.
๋ n-bit ์ด์ง์๋ฅผ $x$์ $y$๋ก ์ผ๋ฐํํ์ฌ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ถ์ํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ ๊ณ ๋ คํด์ผํ ๊ฒ์ 1) Shift์ฐ์ฐ๊ณผ 2) ๋ง์ ์ฐ์ฐ์ ํ์์ ๋๋ค
1) $y$์ ๊ฐ bit์ ๋ํด ์ต๋ n-1 ๋ฒ shift ์ฐ์ฐ์ด ์งํ๋ฉ๋๋ค.
2) ์ต๋ 2n-bit๋ก ์ด๋ฃจ์ด์ง ์ด์ง์๊ฐ n-1๋ฒ์ ๋ง์ ์ฐ์ฐ์ด ์งํ๋ฉ๋๋ค.
Shift์ฐ์ฐ์ด ์ด n-1๋ฒ๊น์ง ์ผ์ด๋๋ฏ๋ก ์ด๋ $$O(1) + O(2) + ... + O(n-1) = O(n^2)$$
๋ผ๊ณ ๋ํ๋ผ ์ ์์ต๋๋ค.
์์์์ ๊ฐ์ด ๋ n-bit ์ด์ง์์ ๋ง์ ์ ์๊ฐ๋ณต์ก๋๋ $O(n)$์ ๋๋ค.
๋ง์ ์ฐ์ฐ์ ์ด n-1๋ฒ ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก ์ด๋ $$O(n) * (n - 1) = O(n^2)$$
๋ผ๊ณ ๋ํ๋ผ ์ ์์ต๋๋ค.
Shift์ฐ์ฐ๊ณผ ๋ง์ ์ฐ์ฐ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ํ๋๋ผ๋ $O(n^2)$์ ๋น๋กํ๋ค๊ณ ํ ์ ์๊ธฐ ๋๋ฌธ์
$x$์ $y$์ ๊ณฑ์ ์ ์๊ฐ ๋ณต์ก๋๋ $O(n^2)$์ ๋๋ค.
๐ ๋ n-bit ์ด์ง์์ ๊ณฑ์ (Algorithm 2)
๋ ์ $x$์ $y$๋ฅผ ๊ณฑํฉ๋ค๊ณ ํ์ ๋ ์๋์ ๋ฐฉ๋ฒ์ ์ ์ฉํฉ๋๋ค.
1. ์งํฉ $S=∅$ ๋ก ๋ก๋๋ค.
2. $y=0$์ผ ๊ฒฝ์ฐ $0$์ ๋ตํ๊ณ ์ข ๋ฃํฉ๋๋ค.
3. $y$ ๊ฐ ํ์์ธ ๊ฒฝ์ฐ ์์์ $(x,y)$ ๋ฅผ ์งํฉ $S$ ์ ์ถ๊ฐํฉ๋๋ค.
4. $x$์ $2$๋ฅผ ๊ณฑํ๊ณ , $y$๋ฅผ $2$๋ก ๋๋๋๋ค. (์ด๋ ์์์ ์ดํ๋ ๋ฒ๋ฆฝ๋๋ค.)
์ด ์๋ฅผ ๊ฐ๊ฐ $x′,y′$ ์ด๋ผ ํ ๋, $y′$์ด ํ์์ธ ๊ฒฝ์ฐ $(x′,y′)$ ์ $S$ ์ ์ถ๊ฐํ๊ณ , $x$๊ณผ $y$๋ฅผ ๊ฐ๊ฐ $x′, y′$ ์ผ๋ก ๋ฐ๊พธ์ด์ค๋๋ค.
5. ๊ณผ์ 3, 4๋ฅผ $y=0$ ์ด ๋ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
6. ์งํฉ $S$ ์ ์ํ ์์์์ ์ผ์ชฝ์ ์๋ ์ซ์๋ค์ ๋ชจ๋ ๋ํด์ค๋๋ค.
์ดํด๋ฅผ ๋๊ธฐ ์ํด ์๋์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํด๋น ๊ณผ์ ์ Pseudocode๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
function multiply(x, y)
if(y == 0): return 0
z = multiply(x, y / 2)
if (y % 2 == 0): return 2*z
else: return x + 2z
์์ ์๊ณ ๋ฆฌ์ฆ์ ์ฆ๋ช ํ๊ธฐ ์ํด ์ํ์ ๊ท๋ฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
๐ Multiplication ์ ์๊ฐ๋ณต์ก๋
function multiply(x, y)
if(y == 0): return 0
z = multiply(x, y / 2)
if (y % 2 == 0): return 2*z
else: return x + 2z
์์ ์ฝ๋๋ฅผ ๋ถ์ํ๊ฒ ์ต๋๋ค.
n-bit ์ด์ง์์ธ y๋ฅผ 2๋ก ๋๋๋ค ์ฆ right shift ํ๋ ์์ ์ 1๋ฒ, ์ ์ฒด์ 2๋ฅผ ๊ณฑํ๋ค ์ฆ left shiftํ๋ ์์ ์ 1๋ฒ์ฉ ์ํํจ์ ์ ์ ์์ต๋๋ค.
๊ฐ๊ฐ์ ์์ ์๋ $O(1)$์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ
์์ ์ฝ๋๋ฅผ ํด์ํ๋ฉด $O(n)$์ ์์ ์ ์ต๋ $n$ํ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ $O(n^2)$์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
'Computer Science > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๋ถํ ์ ๋ณต(2) - Multiplication (0) | 2022.09.29 |
---|---|
[Algorithm] ๋ถํ ์ ๋ณต(1) - Master Theorem๊ณผ ์ผ๋ฐํด (0) | 2022.09.28 |
[Algorithm] Master Theorem ๋ง๋ณด๊ธฐ (0) | 2022.09.14 |
[Algorithm] ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ ๋ง๋ณด๊ธฐ (0) | 2022.09.13 |
[Algorithm] ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ(1) - ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ ๊ณผ ๋น ์ค ํ๊ธฐ๋ฒ (0) | 2022.09.05 |