์๋ฃ๊ตฌ์กฐ(์๋ฃ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ฅ) + ์๊ณ ๋ฆฌ์ฆ(์ฒ๋ฆฌ ์ ์ฐจ) = ํ๋ก๊ทธ๋จ
โ ์๊ณ ๋ฆฌ์ฆ ์กฐ๊ฑด
โ ์
๋ ฅ : 0๊ฐ ์ด์์ ์
๋ ฅ์ด ์กด์ฌํด์ผํจ
ย ย ย ย ๐จ ์
๋ ฅ์ด 0๊ฐ์ธ ๊ฒฝ์ฐ : ํค๋ณด๋/๋ง์ฐ์ค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ง ์์ ex) for๋ฌธ์ ์ด์ฉํด 1~100 ๋ํ๋ ํ๋ก๊ทธ๋๋ฐ
โก ์ถ๋ ฅ : 1๊ฐ ์ด์์ ์ถ๋ ฅ์ด ์กด์ฌํด์ผํจ
ย ย ย ย ๐จ ์ถ๋ ฅ์ด 0๊ฐ๋ฉด ์๋๋ ์ด์ : ํ๋ก๊ทธ๋จ์ ๋ชฉ์ = ๊ฒฐ๊ณผ ์ป๊ธฐ -> ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ํ์๊ณ !
โข ๋ช ๋ฐฑ์ฑ : ๊ฐ ๋ช ๋ น์ด์ ์๋ฏธ๋ ๋ชจํธํ์ง ์๊ณ ๋ช ํํด์ผํจ
โฃ ์ ํ์ฑ: ํ์ ๋ ์์ ๋จ๊ณ ํ์๋ ๋ฐ๋์ ์ข
๋ฃ๋์ด์ผ ํจ
ย ย ย ย โ๏ธ real-time system : ์ ํด์ง ์๊ฐ ๋ด์ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํจ
โค ์ ํจ์ฑ : ๊ฐ ๋ช
๋ น์ด๋ค์ ์ข
์ด์ ์ฐํ, ๋๋ ์ปดํจํฐ๋ก ์คํ ๊ฐ๋ฅํ ์ฐ์ฐ์ด์ด์ผ ํจ
โ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ ๋ฐฉ์
โ ํ๊ธ์ด๋ ์์ด ๊ฐ์ ์์ฐ์ด : ์ฝ๊ฐ์ ๋ชจํธ์ฑ -> ๋ช
๋ฐฑํ๊ฒ ์ ์ํด์ผํจ
โก ํ๋ฆ๋(flowchart) : ๋ํ ์ฌ์ฉ -> ์๊ณ ๋ฆฌ์ฆ ๋ณต์กํด์ง์๋ก ํ๋ฆ
โข ์์ฌ ์ฝ๋(pseudo-code) : ์์ฐ์ด๋ณด๋ค ์ฒด๊ณ์ ์ด๊ณ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ณด๋ค ๋ ์๊ฒฉํจ
โฃ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด : ์์ฝ์ด๋ค์ด ๋ชจ๋ ๋ช
๋ฐฑํ ์๋ฏธ๋ฅผ ๊ฐ์ง
์๋ฃํ(data type) : ๋ฐ์ดํฐ์ ์ข ๋ฅ
์ถ์์๋ฃํ(ADT, abstract data type) : ์ค์ ์ ์ธ ๊ตฌํ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ๋์ด ์ ์๋ ์๋ฃํ = ์ถ์์ , ์ํ์ ์ผ๋ก ์๋ฃํ์ ์ ์ํ ๊ฒ = ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ตฌํํ ๊ฒ
โ๏ธ ๊ฐ์ฒด(objects)์ ํจ์(functions)๋ค์ด ์ ์๋จ
์๊ฐ ๋ณต์ก๋ ํจ์ T(n) = nยฒ+n+1 ์ ๊ฐ์์ nยฒ์ 99.9% ์ฐจ์ง, n+1์ 0.1% ์ฐจ์ง
=> ์ฐจ์๊ฐ ๊ฐ์ฅ ํฐ ํญ์ด ์ ์ฒด์ ๊ฐ ์ฃผ๋
โจ ๋น ์ค ํ๊ธฐ๋ฒ(=์ํ) : ์๊ฐ ๋ณต์ก๋ ํจ์์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ์ ๊ฑฐํด ์๊ณ ๋ฆฌ์ฆ ๋ถ์์ ์ฝ๊ฒ ํ ๋ชฉ์ ์ผ๋ก ์๊ฐ ๋ณต์ก๋๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ
๋ ๊ฐ์ ํจ์ f(n)๊ณผ g(n)์ด ์ฃผ์ด์ก์ ๋ ๋ชจ๋ n>nโ์ ๋ํ์ฌ f(n)โคcg(n)์ ๋ง์กฑํ๋ 2๊ฐ์ ์์ c์ nโ๊ฐ ์กด์ฌํ๋ฉด f(n)=O(g(n))์ด๋ค.
f(n)=5์ด๋ฉด nโ=1, c=10์ผ ๋, n>1์ ๋ํ์ฌ 5โค10โ1์ด ๋๊ธฐ ๋๋ฌธ์ O(1)์ด๋ค.
f(n)=2n+1์ด๋ฉด nโ=2, c=3์ผ ๋, n>2์ ๋ํ์ฌ 2n+1โค3n์ด ๋๊ธฐ ๋๋ฌธ์ O(n)์ด๋ค.
f(n)=3nยฒ+100์ด๋ฉด nโ=100, c=5์ผ ๋, n>100์ ๋ํ์ฌ 3nยฒ+100โค5nยฒ์ด ๋๊ธฐ ๋๋ฌธ์ O(nยฒ)์ด๋ค.
f(n)=5โ2^n+10nยฒ+100์ด๋ฉด nโ=1000, c=10์ผ ๋, n>1000์ ๋ํ์ฌ 5โ2^n+10nยฒ+100โค10โ2^n์ด ๋๊ธฐ ๋๋ฌธ์ O(2^n)์ด๋ค.
๋ง์ด ์ฐ์ด๋ ๋น ์ค ํ๊ธฐ๋ฒ : O(1) > O(logn) > O(n) > O(nlogn) > O(nยฒ) > O(nยณ) > O(2^n) > O(n!)
์ํ์๊ฐ : O(1) < O(logn) < O(n) < O(nlogn) < O(nยฒ) < O(nยณ) < O(2^n) < O(n!)
๋น ์ค๋ฉ๊ฐ(=ํํ) ํ๊ธฐ๋ฒ
๋ ๊ฐ์ ํจ์ f(n)๊ณผ g(n)์ด ์ฃผ์ด์ก์ ๋ ๋ชจ๋ n>nโ์ ๋ํ์ฌ f(n)โฅcg(n)์ ๋ง์กฑํ๋ 2๊ฐ์ ์์ c์ nโ๊ฐ ์กด์ฌํ๋ฉด f(n)=ฮฉ(g(n))์ด๋ค.
๋น ์ธํ(=์ํ+ํํ) ํ๊ธฐ๋ฒ
๋ ๊ฐ์ ํจ์ f(n)๊ณผ g(n)์ด ์ฃผ์ด์ก์ ๋ ๋ชจ๋ n>nโ์ ๋ํ์ฌ cโg(n)โคf(n)โคcโg(n)์ ๋ง์กฑํ๋ 3๊ฐ์ ์์ cโ, cโ์ nโ๊ฐ ์กด์ฌํ๋ฉด f(n)=๐ฃ(g(n))์ด๋ค.
โ๏ธ ๋น ์คํ๊ธฐ๋ฒ ์์
int test1 (int n) { // O(n)
sum = 1;
for (i=1; i<=n; i+=2)
sum++;
return sum;
}
void test2 (int n) { // O(nยฒ) = O(n) x O(n)
for (i=0; i<n; ++i)
for (j=0; j<n; j++)
k++;
}
void test3 (int n) { // O(nยณ) = O(n) x O(nยฒ)
for (i=0; sum=1; i<n; i++)
for (j=0; j<n*n; j++)
sum++;
}
void test4 (int n) { // O(nlogn) = O(n) x O(logn)
int i, j, sum = 0;
for (i=0; i<n; j++)
for (j=n; j>0; j/=2)
sum+=i;
}
void test5 (int n) { // O(n) = O(n) + O(logn) (๋ ์ค ์ฐจ์ ๋์ ๊ฒ)
int i, j, sum=0;
for (i=0; i<n; i++)
sum+=i;
for (j=n; j>0; j/=2)
sum+=j;
}