์•Œ๊ณ ๋ฆฌ์ฆ˜

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ ํ’€์ด ์ „, ์‹œ/๊ณต๊ฐ„ ๋ณต์žก๋„ ์ดํ•ดํ•˜๊ธฐ

ghtis1798 2021. 5. 31. 14:25

๐Ÿ”ธ๋ณต์žก๋„

์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•˜๊ธฐ ์ „, ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„ ์ดํ•ดํ•˜๊ธฐ

๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ์—๋Š” ์ œํ•œ ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ ์ ˆํ•œ ์‹œ/๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•œ ๋’ค ์ ์ ˆํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ํ•„์š”์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ธ์‹œ๊ฐ„๋ณต์žก๋„

'์ œํ•œ์‹œ๊ฐ„'์•ˆ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ O(N)๊ณผ ๊ฐ™์€ ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ๊ธฐ์ค€์œผ๋กœ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

for ๋ฌธ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์‹œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๋‹จ์ผ for๋ฌธ: $O(N)$
  2. ์ด์ค‘ for๋ฌธ: $O(N^2)$
  3. ์‚ผ์ค‘ for๋ฌธ: $O(N^3)$

N๊ฐ’์ด ์–ด๋–ป๊ฒŒ ์ฃผ์–ด์ง€๋ƒ์— ๋”ฐ๋ผ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

N=500

N=500์ผ ๊ฒฝ์šฐ

  1. $O(N^3)$์ผ ๊ฒฝ์šฐ $1.25 * 10^8$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. $O(N^2)$์ผ ๊ฒฝ์šฐ $2.5 * 10^5$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

C์–ธ์–ด ๊ธฐ์ค€ 10์–ต๋ฒˆ ์—ฐ์‚ฐ ์‹œ 1์ดˆ ์ด์ƒ์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์€ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ์ด๋ฏ€๋กœ, ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ž˜ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

N=1000

  1. $O(N^3)$์ผ ๊ฒฝ์šฐ $10^9$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. $O(N^2)$์ผ ๊ฒฝ์šฐ $10^6$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์–ด์ง„ N์˜ ๊ฐ’์ด 1000์ˆ˜์ค€์ด๋ผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ $O(N^2)$ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

N=100,000

N=10๋งŒ์ผ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹ ์ค‘ํžˆ ์„ ํƒํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. $O(N^2)$์ผ ๊ฒฝ์šฐ $10^{10}$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. $O(NlogN)$์ผ ๊ฒฝ์šฐ ์•ฝ $510^5log10 = 1.5 * 10^6$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ N์ด 10๋งŒ๊ฐœ๋ถ€ํ„ฐ๋Š” $O(N^2)$ ์ˆ˜์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” ํ•ด๊ฒฐ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ $O(NlogN)$์ž…๋‹ˆ๋‹ค.

N=10,000,000

N=1000๋งŒ์ผ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ๋ถ€ํ„ฐ๋Š” $O(NlogN)$์œผ๋กœ๋„ ํ•ด๊ฒฐ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

  1. $O(NlogN)$์ผ ๊ฒฝ์šฐ ์•ฝ $810^8log10 = 2.4 * 10^9$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  2. $O(N)$์ผ ๊ฒฝ์šฐ ์•ฝ $10^8$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜, ์ฒœ๋งŒ๋ฒˆ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. $O(logN)$์ผ ๊ฒฝ์šฐ ์•ฝ $8 * log10 = 26$์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

N์ด ์ฒœ๋งŒ์ด์ƒ์ผ ๊ฒฝ์šฐ๋Š” $O(N)$์˜ ์„ ํ˜• ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ˜น์€, $O(logN)$์˜ ๋กœ๊ทธ ์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ง„ ํƒ์ƒ‰์˜ ๊ฒฝ์šฐ $O(logN)$ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๐Ÿ”ธ๊ณต๊ฐ„๋ณต์žก๋„

๊ณต๊ฐ„๋ณต์žก๋„๋Š” ์ œํ•œ๋œ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ int ํ˜• ์ž๋ฃŒํ˜•์ด 4Byte๋ผ๋Š” ๊ฒƒ์„ ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, ๋ฐฐ์—ด ๊ธฐ์ค€ ํฌ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. int arr[1000]: $4byte * 1000=4KB$
  2. int arr[1000000]: $4byte*10^6=4MB$
  3. int arr[1000][1000]: $4byte*10^6=4MB$
  4. int arr[2000][2000]: $4 * 10^6 * 4btye=16*10^6byte=16MB$

๋ณดํ†ต 100๋งŒ๊ฐœ ์ด์ƒ์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— 1000๋งŒ๊ฐœ ์ด์ƒ์˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ–ˆ๋‹ค๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๋ฅผ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ ๊ฒ€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.