๐Ÿค– 1. ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Yeonsu Summerยท2022๋…„ 7์›” 4์ผ
0

์ž๋ฃŒ๊ตฌ์กฐ

๋ชฉ๋ก ๋ณด๊ธฐ
1/4
post-thumbnail
post-custom-banner

์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ž๋ฃŒ๊ตฌ์กฐ(์ž๋ฃŒ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ €์žฅ) + ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ฒ˜๋ฆฌ ์ ˆ์ฐจ) = ํ”„๋กœ๊ทธ๋žจ

โœ… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์กฐ๊ฑด

โ‘  ์ž…๋ ฅ : 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))์ด๋‹ค.

  • ์ตœ์„ ์˜ ๊ฒฝ์šฐ : O(1) -> ์˜๋ฏธ ์—†์Œ
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ : O(n) -> ๋„๋ฆฌ ์‚ฌ์šฉ๋จ, ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฌ์›€
  • ํ‰๊ท ์˜ ๊ฒฝ์šฐ : O(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;
}
profile
๐Ÿ€ an evenful day, life, journey
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€