๐ธ๋ณต์ก๋
์ฝ๋ฉํ ์คํธ๋ฅผ ์ค๋นํ๊ธฐ ์ , ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋ ์ดํดํ๊ธฐ
๋๋ถ๋ถ์ ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ์๋ ์ ํ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํฉ๋๋ค.
์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ ํ ์/๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ์ฐํ ๋ค ์ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ํ์์ฑ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ๋ณต์ก๋์ ๋ํด ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค.
๐ธ์๊ฐ๋ณต์ก๋
'์ ํ์๊ฐ'์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๊ฐ๋ณต์ก๋๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก O(N)๊ณผ ๊ฐ์ ๋น ์ค ํ๊ธฐ๋ฒ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ฐ ํ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.
for ๋ฌธ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๊ฐ๋ณต์ก๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋จ์ผ for๋ฌธ: $O(N)$
- ์ด์ค for๋ฌธ: $O(N^2)$
- ์ผ์ค for๋ฌธ: $O(N^3)$
N๊ฐ์ด ์ด๋ป๊ฒ ์ฃผ์ด์ง๋์ ๋ฐ๋ผ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด๋ณด๊ฒ ์ต๋๋ค.
N=500
N=500์ผ ๊ฒฝ์ฐ
- $O(N^3)$์ผ ๊ฒฝ์ฐ $1.25 * 10^8$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
- $O(N^2)$์ผ ๊ฒฝ์ฐ $2.5 * 10^5$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
C์ธ์ด ๊ธฐ์ค 10์ต๋ฒ ์ฐ์ฐ ์ 1์ด ์ด์์ด ๊ฑธ๋ฆฐ๋ค๊ณ ์๋ ค์ ธ ์์ต๋๋ค.
ํ์ด์ฌ์ ๋ ์ค๋ ๊ฑธ๋ฆด ๊ฒ์ด๋ฏ๋ก, ์ต์ ์ ๊ฒฝ์ฐ๋ฅผ ์ ๊ณ ๋ คํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
N=1000
- $O(N^3)$์ผ ๊ฒฝ์ฐ $10^9$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
- $O(N^2)$์ผ ๊ฒฝ์ฐ $10^6$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
์ฃผ์ด์ง N์ ๊ฐ์ด 1000์์ค์ด๋ผ๋ฉด ๊ฐ๋จํ๊ฒ $O(N^2)$ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
N=100,000
N=10๋ง์ผ ๊ฒฝ์ฐ์ ๋๋ค. ์ด ๋๋ถํฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์คํ ์ ํํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
- $O(N^2)$์ผ ๊ฒฝ์ฐ $10^{10}$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
- $O(NlogN)$์ผ ๊ฒฝ์ฐ ์ฝ $510^5log10 = 1.5 * 10^6$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
๋ฐ๋ผ์ N์ด 10๋ง๊ฐ๋ถํฐ๋ $O(N^2)$ ์์ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ํด๊ฒฐ์ด ์ด๋ ต์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๊ฐ $O(NlogN)$์ ๋๋ค.
N=10,000,000
N=1000๋ง์ผ ๊ฒฝ์ฐ์ ๋๋ค. ์ด ๋๋ถํฐ๋ $O(NlogN)$์ผ๋ก๋ ํด๊ฒฐ์ด ์ด๋ ต์ต๋๋ค.
- $O(NlogN)$์ผ ๊ฒฝ์ฐ ์ฝ $810^8log10 = 2.4 * 10^9$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
- $O(N)$์ผ ๊ฒฝ์ฐ ์ฝ $10^8$์ ์ฐ์ฐ ํ์, ์ฒ๋ง๋ฒ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
- $O(logN)$์ผ ๊ฒฝ์ฐ ์ฝ $8 * log10 = 26$์ ์ฐ์ฐ ํ์๊ฐ ํ์ํฉ๋๋ค.
N์ด ์ฒ๋ง์ด์์ผ ๊ฒฝ์ฐ๋ $O(N)$์ ์ ํ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ํน์, $O(logN)$์ ๋ก๊ทธ ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด์ง ํ์์ ๊ฒฝ์ฐ $O(logN)$ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
๐ธ๊ณต๊ฐ๋ณต์ก๋
๊ณต๊ฐ๋ณต์ก๋๋ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ผ๋ฐ์ ์ธ int ํ ์๋ฃํ์ด 4Byte๋ผ๋ ๊ฒ์ ๊ฐ์ ํ์ ๋, ๋ฐฐ์ด ๊ธฐ์ค ํฌ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- int arr[1000]: $4byte * 1000=4KB$
- int arr[1000000]: $4byte*10^6=4MB$
- int arr[1000][1000]: $4byte*10^6=4MB$
- int arr[2000][2000]: $4 * 10^6 * 4btye=16*10^6byte=16MB$
๋ณดํต 100๋ง๊ฐ ์ด์์ ๋ฐฐ์ด์ ์ ์ธํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ 1000๋ง๊ฐ ์ด์์ ๋ฐฐ์ด์ ์ ์ธํ๋ค๋ฉด ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ๋ฅผ ์ ๋๋ก ํ๊ณ ์๋์ง ์ ๊ฒ์ด ํ์ํฉ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ทธ๋ฆฌ๋ ๋ฌธ์ ํ์ด - ๋ง๋ค ์ ์๋ ๊ธ์ก (0) | 2021.06.12 |
---|---|
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ๋ ์ด ์ ๋ฆฌ (0) | 2021.06.01 |
๋ฐฑ์ค 10845 ํ ๋ฌธ์ ํ์ด (0) | 2021.03.26 |
๋ฐฑ์ค 9012 ๊ดํธ ๋ฌธ์ ํ์ด (0) | 2021.03.25 |
๋ฐฑ์ค 11650 ์ขํ์ ๋ ฌ ๋ฌธ์ ํ์ด (0) | 2021.03.24 |