๊ด€๋ฆฌ ๋ฉ”๋‰ด

๊ตฌ๋ฆ„

[ํŒ]2์ฐจ์› ๋ฐฐ์—ด์˜ ํ• ๋‹น ๋ณธ๋ฌธ

๐Ÿ‘จ‍๐Ÿ’ป๊ฐœ๋ฐœ (deprecated)

[ํŒ]2์ฐจ์› ๋ฐฐ์—ด์˜ ํ• ๋‹น

rattan32 2016. 9. 2. 19:05

c++ ์—์„œ 2์ฐจ์› ๋ฐฐ์—ด์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

100*100 ์˜ int ํ˜• ๋ฐฐ์—ด์ด stack ์˜์—ญ์— ์žกํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.


stack ์˜ ํฌ๊ธฐ(๋ณดํ†ต 1~8MB ์ •๋„) ๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฐ์—ด์„ ์žก์œผ๋ ค๋ฉด, data ์˜์—ญ(์ „์—ญ ๋ณ€์ˆ˜) ํ˜น์€ heap ์˜์—ญ(๋™์  ํ• ๋‹น) ์„ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

data ์˜์—ญ์€ stack ์˜์—ญ์—์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ฐ™์œผ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” heap ์— ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์žก๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


int[3000][2000] ๋ฐฐ์—ด์€ stack ์˜์—ญ์— ์žกํžˆ์ง€ ์•Š์œผ๋ฏ€๋กœ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ ํ• ๋‹น์„ ํ†ตํ•ด run time ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.



๋จผ์ € arr ์ด์ค‘ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๋ฐฐ์—ด์˜ ๋†’์ด ๋งŒํผ(์—ฌ๊ธฐ์„œ๋Š” 3000*2000์‚ฌ๊ฐํ˜• ๋ฐฐ์—ด) ์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  3000๋งŒํผ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉฐ arr[n] ์— ๋ฐฐ์—ด์˜ ๋„ˆ๋น„ ๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘ ์‚ฌ์šฉํ•œ ๋‹ค์Œ์—๋Š” ํ• ๋‹นํ•œ ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€ ์ˆœ์„œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฐ์‚ฐ์„ ๋†’์ด+1 ๋ฒˆ ๋งŒํผ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


new ์—ฐ์‚ฐ ํ˜น์€ malloc() ๋“ฑ ๊ณผ ๊ฐ™์€ heap ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์š”์ฒญ์€ ํ• ๋‹นํฌ๊ธฐ๋ฅผ k ๋ผ ํ• ๋•Œ O(k) ๋งŒํผ์˜ ๋น„์šฉ์ด ๋“ค์ง€๋งŒ ํ• ๋‹นํฌ๊ธฐ-์‹œ๊ฐ„ ๊ทธ๋ž˜ํ”„์—์„œ ๊ธฐ์šธ๊ธฐ๊ฐ€ 1๋ณด๋‹ค ์ž‘์€ ํ˜•ํƒœ๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค.

(์‹ค์งˆ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ ๋  ์ˆ˜์‹ญMB ์ •๋„ ๊นŒ์ง€์˜ ํ• ๋‹น ์‹œ๊ฐ„์—์„œ๋Š” ์œ ์˜๋ฏธํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„๋‚ด๊ธฐ๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.)

๋”ฐ๋ผ์„œ ์œ„์™€๊ฐ™์ด ๋†’์ด๋งŒํผ ๋™์  ํ• ๋‹น์„ ํ•˜๊ฒŒ๋˜๋ฉด, O(n*k) ๋งŒํผ์˜ ๋น„์šฉ์ด ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ• ๋•Œ์—๋„ O(n*k) ์˜ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค.


๋”ฐ๋ผ์„œ ๋ฐฐ์—ด์„ ๋™์  ํ• ๋‹น ํ•  ๋•Œ์—๋Š” ์œ„์™€๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ• ๋‹น์„ ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ฒ˜์Œ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์„ ๋†’์ด ๋งŒํผ ํ• ๋‹นํ•˜๋Š”๊ฒƒ์€ ๊ธฐ์กด์˜ ์ฝ”๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ 2์ฐจ์› ํฌ๊ธฐ๋ฅผ ํ•œ๋ฒˆ์— 1์ฐจ์› ๋ฐฐ์—ด์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์— 2์ฐจ์› ํฌ๊ธฐ๋กœ ํ• ๋‹นํ•œ 1์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐฐ์—ด์˜ ๋„ˆ๋น„ ๋งŒํผ ๋„์›Œ์„œ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๋ฉด, stack ์˜์—ญ์— ์„ ์–ธํ•œ ๋ฐฐ์—ด๊ณผ ์™„์ „ํžˆ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ 2์ฐจ์› ๋ฐฐ์—ด์ด ์™„์„ฑ ๋ฉ๋‹ˆ๋‹ค.

๋‹จ ๋‘๋ฒˆ๋งŒ์˜ new ์—ฐ์‚ฐ ํ˜ธ์ถœ๋กœ 2์ฐจ์› ๋ฐฐ์—ด์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋†’์ด ๋งŒํผ์˜ ๋ฃจํ”„๋ฅผ ๋Œ์ง€๋งŒ, ๋Œ€์ž…์—ฐ์‚ฐ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฐ์‚ฐ์„ ๋น„๊ตํ•ด ๋ณธ๋‹ค๋ฉด ๋Œ€์ž…์—ฐ์‚ฐ์€ ๊ฑฐ์˜ ์—†๋Š”์‹œ๊ฐ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ size ๋ฅผ 1000, count ๋ฅผ 1000 ์œผ๋กœ ๋‘๊ณ  ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด,

๊ฒฐ๊ณผ์ ์œผ๋กœ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ํ•˜์˜€๋Š”๋ฐ, ๋“œ๋Š” ์‹œ๊ฐ„์ด 100๋ฐฐ ์ด์ƒ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒƒ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(๋ฌผ๋ก , ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์ฐจ์ด๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฐ์‚ฐ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.)

(g++ ์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋‹ˆ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋„ค์š”. ์—ญ์‹œ g++ ์˜ ์ตœ์ ํ™”๋Š” ์—„์ฒญ๋‚œ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.)


์—ฌ๊ธฐ์„œ ํฌ์ธํ„ฐ ๋ฐฐ์—ด์ด ์—†๋”๋ผ๋„ 1์ฐจ์› ๋ฐฐ์—ด์„ 2์ฐจ์›์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด๊ธฐ์—, ์ธ๋ฑ์Šค๋ฅผ ์—ฐ์‚ฐํ•˜์—ฌ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐ™์€ ์›๋ฆฌ๋กœ n์ฐจ ๋ฐฐ์—ด์„ new ์—ฐ์‚ฐ n๋ฒˆ ํ˜ธ์ถœ ํ˜น์€ new ์—ฐ์‚ฐ ๋‹จ ํ•œ๋ฒˆ์˜ ํ˜ธ์ถœ ๋งŒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


1. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์—ฐ์‚ฐ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ํฌ๋‹ค.

   ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œํ•˜์ง€ ๋ง๊ณ , ์žฌ์‚ฌ์šฉ ํ•˜์ž.

   ํ• ๋‹น ์—ฐ์‚ฐ์ž๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ํ•˜๋Š” ์ฝ”๋”ฉ์„ ํ•˜์ž.



Comments