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

[์ž๋ฃŒ๊ตฌ์กฐ] ๋ณต์žก๋„(Complexity)

1eehyunji 2023. 10. 9. 22:56

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํšจ์œจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ˆ˜์ •, ์‚ญ์ œ, ํƒ์ƒ‰, ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๋ณต์žก๋„

๋ณต์žก๋„๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„ ๋ณต์žก๋„๋กœ ๋‚˜๋‰œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„(time complexity)

์‹œ๊ฐ„ ๋ณต์žก๋„๋ž€ '๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜ ๊ด€๊ณ„'๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋กœ์ง์ด '์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜' ๊ฑธ๋ฆฌ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์“ฐ์ด๋ฉฐ, ๋ณดํ†ต ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ž…๋ ฅ ํฌ๊ธฐ n์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด 10n^2+n์ด๋ผ๊ณ  ํ•˜๋ฉด ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ๋Š” O(n^2)๊ฐ€ ๋œ๋‹ค.

'๊ฐ€์žฅ ์˜ํ–ฅ์„ ๋งŽ์ด ๋ผ์น˜๋Š” ํ•ญ'์˜ ์ƒ์ˆ˜ ์ธ์ž๋ฅผ ๋นผ๊ณ  ๋‚˜๋จธ์ง€ ํ•ญ์„ ์—†์• ์„œ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

๋‹ค๋ฅธ ํ•ญ๋“ค๋„ ์‹ ๊ฒฝ ์“ฐ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ฆ๊ฐ€ ์†๋„๋ฅผ ๊ณ ๋ คํ•œ๋‹ค๋ฉด ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์—ฐ์‚ฐ๋Ÿ‰์ด ๊ฐ€์žฅ ๋งŽ์ด ์ปค์ง€๋Š” ํ•ญ์€ n์˜ ์ œ๊ณฑํ•ญ์ด๊ณ , ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ทธ์— ๋น„ํ•ด ๋ฏธ๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•ญ๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋œ๋‹ค๋Š” ์ด๋ก ์ด๋‹ค. 

// 10n^2
for (int i=0;i<10;i++) {
	for (int j=0;j<n;j++) {
    	for (int k=0;k<n;k++) {
        	if (true) cout << k << '\n';
        }
    }
}

// n
for (int i=0;i<n;i++) {
	if (true) cout << i << '\n';
}

์ด์™€ ๊ฐ™์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋กœ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์“ฐ์ด๋Š” ์ฒ™๋„๊ฐ€ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n^2)์ด๊ณ  ์‹ค์ œ๋กœ 9์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋ฉด, ์ฝ”๋“œ๋ฅผ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ฐœ์„ ํ•œ๋‹ค๋ฉด 3์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ์ด์ฒ˜๋Ÿผ ์ฝ”๋“œ์˜ ํšจ์œจ์„ฑ์— ๋Œ€ํ•œ ์ฒ™๋„๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ์ด ํšจ์œจ์„ฑ์„ ๋” ์ข‹๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒ™๋„๊ฐ€ ๋œ๋‹ค.

 

 ์œ„ ๊ทธ๋ฆผ์—์„œ O(1)๊ณผ O(n)์„ ๋น„๊ตํ•ด๋ณด๋ฉด ์ž…๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‹น์—ฐํžˆ ๊ทธ O(n^2)๋„ ํ›จ์”ฌ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚œ๋‹ค. 

์ฆ‰, O(n^2)๋ณด๋‹ค๋Š” O(n)์„, O(n)๋ณด๋‹ค๋Š” O(1)์„ ์ง€ํ–ฅํ•ด์•ผ ํ•œ๋‹ค. 

O(2^n) > O(n^2) > O(n log n) > O(n) > O(log n) > O(1)

 

๊ณต๊ฐ„ ๋ณต์žก๋„(space complexity)

๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ ํ•„์š”๋กœ ํ•˜๋Š” ์ž์› ๊ณต๊ฐ„์˜ ์–‘์„ ๋งํ•œ๋‹ค. 

์ •์  ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ ๊ฒƒ ๋ง๊ณ ๋„ ๋™์ ์œผ๋กœ ์žฌ๊ท€์ ์ธ ํ•จ์ˆ˜๋กœ ์ธํ•ด ๊ณต๊ฐ„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณ„์† ํ•„์š”๋กœ ํ•  ๊ฒฝ์šฐ๋„ ํฌํ•จํ•œ๋‹ค.

int a[1004];

์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ์ฝ”๋“œ์—์„œ ์ด๋Ÿฌํ•œ ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ์„ ๋•Œ 1004 * 4 ๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋˜๋Š” ๋ถ€๋ถ„์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฌํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ž˜ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

๋‹ค์Œ์€ ์ž์ฃผ ์“ฐ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ ํ‘œ์ด๋‹ค. ๋ณดํ†ต ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ƒ๊ฐํ•  ๋•Œ ํ‰๊ท ๊ณผ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ ๋ คํ•ด์„œ ์“ด๋‹ค.

 

์ž๋ฃŒ ๊ตฌ์กฐ๋ณ„ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„

์ž๋ฃŒ ๊ตฌ์กฐ ์ ‘๊ทผ ํƒ์ƒ‰ ์‚ฝ์ž… ์„์žฌ
๋ฐฐ์—ด O(1) O(n) O(n) O(n)
์Šคํƒ O(n) O(n) O(1) O(1)
ํ O(n) O(n) O(1) O(1)
์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ O(n) O(n) O(1) O(1)
ํ•ด์‹œ ํ…Œ์ด๋ธ” O(1) O(1) O(1) O(1)
์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ O(log n) O(log n) O(log n) O(log n)
AVL ํŠธ๋ฆฌ O(log n) O(log n) O(log n) O(log n)
๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ O(log n) O(log n) O(log n) O(log n)

์ž๋ฃŒ ๊ตฌ์กฐ๋ณ„ ์ตœ์•… ์‹œ๊ฐ„ ๋ณต์žก๋„

์ž๋ฃŒ ๊ตฌ์กฐ ์ ‘๊ทผ ํƒ์ƒ‰ ์‚ฝ์ž… ์„์žฌ
๋ฐฐ์—ด O(1) O(n) O(n) O(n)
์Šคํƒ O(n) O(n) O(1) O(1)
ํ O(n) O(n) O(1) O(1)
์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ O(n) O(n) O(1) O(1)
ํ•ด์‹œ ํ…Œ์ด๋ธ” O(n) O(n) O(n) O(n)
์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ O(n) O(n) O(n) O(n)
AVL ํŠธ๋ฆฌ O(log n) O(log n) O(log n) O(log n)
๋ ˆ๋“œ ๋ธ”๋ž™ ํŠธ๋ฆฌ O(log n) O(log n) O(log n) O(log n)