-
์ํ์ ๊ท๋ฉ๋ฒ์ผ๋ก ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ ์ฆ๋ชPROGRAMMING/์๋ฃ๊ตฌ์กฐ 2020. 6. 18. 13:28
์ํ์ ๊ท๋ฉ๋ฒ์ผ๋ก ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ์ฆ๋ช ํ๊ธฐ ์ํด์ ๋ค์์ ๋ ๊ฐ์ง๋ง ํ์ธํ๋ฉด ๋๋ค.
โ P(1) ์ด ์ฐธ์ด๋ค.
โก P(x-1) -> P(x) ๋ ์ฐธ์ด๋ค.
์ฆ, P(x-1) ์ด ์ฐธ์ด๋ผ๊ณ ๋ฏฟ๊ณ (๊ฐ์ ) P(x) ํ์ธ! :: ์ฌ๊ท ์ฝ๋๋ "์ฌ๊ท๋ ํญ์ ์ฑ๊ณตํ๋ค"๊ณ ์ฝ์ผ๋ฉด ๋จ
๋ค์์ ๋ ์ฝ๋๋ฅผ ์ดํด๋ณด์. (c์ธ์ด๋ก ์์ฑ๋์์ต๋๋ค.)
int sum(int x) { int i, num; num=0; for (int i=0; i<num; i++) num+=i; return num; }
int sum2(int x){ if(x<=0) return 0; else return x+ sum(x-1); }
๋ ์ฝ๋๋ ๋ชจ๋ 1๋ถํฐ ์ธ์๋ก ๋ฐ์ x ๊น์ง์ ํฉ์ ๋ฐํํ๋ ํจ์์ด๋ค.
๋จ, ์์ ์ฝ๋๋ ๋ฐ๋ณต์ ์ ์ฐจ(iterative process) ๋ก, ์๋์ ์ฝ๋๋ ์ฌ๊ท์ ์ ์ฐจ(recursive process) ๋ก ์์ฑ๋์๋ค.
์ด ๋, ์ด ๋ ์ฝ๋๊ฐ ์ ๋ง '1๋ถํฐ x ๊น์ง์ ํฉ์ ๋ฆฌํด' ํ๋ค๋ ๊ฒ์ ์ฆ๋ช ํ ์ ์๋๊ฐ?
๋ฐ๋ณต์ ์ ์ฐจ์ธ ์์ ์ฝ๋๋ 'ํ๋์ฉ' ์ค๋ช ํ ์ ์๋ค.
ํ์ง๋ง ์ฌ๊ท ์ฝ๋๋ ํ๋์ฉ, ~๋ก ๋ค์ด๊ฐ์ ๋ฑ์ ๋ฐฉ์์ผ๋ก๋ ์ง์ํด์ ์ดํดํ๊ธฐ ํ๋ค๋ค.
์ด๋ด ๋ ์ํ์ ๊ท๋ฉ๋ฒ์ ํตํด ๋ช ์พํ๊ณ ๊ฐ๋จํ๊ฒ ์ฆ๋ช ํ ์ ์๋ค.
<Proof> P(n) : sum(x) ๋ 1+2+...+x ๋ฅผ (ํญ์) ๋ฆฌํดํ๋ค.
1. (Base) P(1) ์ด ์ฐธ์ด๋ค : sum(1) ์ด ๋ฆฌํดํ๋ ๊ฐ์ 1 ์ด๋ค -> ์ฝ๋์ 1์ ๋์ ํ๋ฉด 1์ ๋ฆฌํดํจ์ ์ ์ ์์
2. (Step) P(x-1) -> P(x) ์ด ์ฐธ์ด๋ค : sum(x-1) ์ด 1+2+...+(x-1) ์ ๋ฆฌํดํ๋ฉด sum(x) ๋ 1+2+...+(x-1)+x ๋ฅผ ๋ฆฌํดํ๋ค.
=> ์ฝ๋๋ฅผ ๋ณด๋ฉด sum(x) ๋ x + sum(x-1) ์ ๊ฐ์ ๋ฆฌํดํ๋ค. sum(x-1) ์ 1+2+...+(x-1) ๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์ผ๋ฏ๋ก sum(x) ๋ x + (1+2+...+x-1) ์ ๋ฆฌํดํจ์ ํ์ธํ ์ ์๋ค.
๋ค์ ๋งํด, sum(x-1) ์ด "์์ ์ ์ญํ ์ ํ๋ค" , "์ฌ๊ท๊ฐ ์ฑ๊ณตํ๋ค" ๋ผ๊ณ '๋ฏฟ๋๋ค'๋ฉด, sum(x) ๋ ๊ทธ ๋ฏฟ๋ ๊ฐ์ ์์ sum(x) ๊ฐ ๋์ด์ผ ํ๋ ๊ฒ์ ํจ๊ป ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ ์ฐธ์์ ์ฆ๋ช ํ ์ ์๋ ๊ฒ์ด๋ค.
์ด๋ ๋ฏ, ์ํ์ ๊ท๋ฉ๋ฒ์ผ๋ก ์ฌ๊ท๋ฅผ ๊ฐ๋จํ๊ฒ ์ฆ๋ช ํ ์ ์์ผ๋ ์ํ์ ๊ท๋ฉ๋ฒ์ด ์ฆ๋ช ์ ์ ์ฉํจ์ ์ ์ ์๋ค.
์ด ์ฌ๊ท ์ฝ๋์ Complexity ๋ฅผ ์ดํด๋ณด์.
T(n) = 1 + T(n-1)
= 1+ 1 + T(n-2) = .... = n
∴ T(n) = O(n)
n ํ๊ณ ๋น์ทํ ์๊ฐ์ด ๊ฑธ๋ฆผ์ ์ ์ ์๋ค.
๋ณต์ก๋๋ ์กฐ๊ธ ๋ค๋ฅด์ง๋ง, ์์ ๋ฐ๋ณต์ ์ ์ฐจ ์ฝ๋ ์ญ์ n ๋ฒ ๋ฐ๋ณตํ๊ฒ ๋๋ฏ๋ก n ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
'PROGRAMMING > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Selection Sort , Merge Sort, ๊ทธ๋ฆฌ๊ณ ์ฆ๋ช (0) 2020.06.18 Arrays(๋ฐฐ์ด), Binary Search(์ด์ง ํ์), ์ฆ๋ช , ๊ทธ๋ฆฌ๊ณ log (0) 2020.06.18 ์ํ์ ๊ท๋ฉ๋ฒ (0) 2020.06.18 ๋ณ์์ ํฌ์ธํฐ (0) 2020.06.18