์๋ฃ๊ตฌ์กฐ๋ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ , ์ญ์ , ํ์, ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ ์งํฉ์ ์๋ฏธํ๋ค.
๋ณต์ก๋
๋ณต์ก๋๋ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๋ก ๋๋๋ค.
์๊ฐ ๋ณต์ก๋(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) |
'CS > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํ ์๋ฃ ๊ตฌ์กฐ(์ฐ๊ฒฐ๋ฆฌ์คํธ, ๋ฐฐ์ด) (1) | 2023.10.11 |
---|