ํค์ด ํ๋ธ๋ฅด! ๋๋ ๊ธฐ์ฌ์ ๋ฒ์ญ์ ๋น์ ์ ๊ด์ฌ์ ์ ์ํฉ๋๋ค
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ดํด์๋ ๋ญ๊ฐ ๋น ์ก๋ค๊ณ ์๊ฐํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ์ด๋์์๋ ์ฌ์ฉ๋ฉ๋๋ค. ์๊ณ ์ ์ฉํ SQLite๋ถํฐ ๊ฐ๋ ฅํ Teradata๊น์ง ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ ๋ฐฉ์์ ์ค๋ช ํ๋ ๊ธฐ์ฌ๋ ๋ช ๊ฐ๋ฟ์ ๋๋ค. "howdoesarelationaldatabasework"๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๊ฒ์ํ๋ฉด ๊ฒฐ๊ณผ๊ฐ ์ผ๋ง๋ ์ ์์ง ํ์ธํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ด ๊ธ๋ค์ ์งง์ต๋๋ค. ์ต์ ๊ธฐ์ (BigData, NoSQL ๋๋ JavaScript)์ ์ฐพ๊ณ ์๋ค๋ฉด ํด๋น ๊ธฐ์ ์ ์๋ ๋ฐฉ์์ ์ค๋ช ํ๋ ๋ ์์ธํ ๊ธฐ์ฌ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ํ ๊ณผ์ , ์ฐ๊ตฌ ๋ ผ๋ฌธ ๋ฐ ์์ ์ธ๋ถ์์ ์ค๋ช ํ๊ธฐ์๋ ๋๋ฌด ์ค๋๋๊ณ ์ง๋ฃจํฉ๋๊น?
๊ฐ๋ฐ์๋ก์ ์ ๋ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ 40๋ ์ด์ ์ฌ์ฉ๋์๋ค๋ฉด ๋ฐ๋์ ์ด์ ๊ฐ ์์ ๊ฒ์ ๋๋ค. ์๋ ์ ๊ฑธ์ณ ์ ๋ ์ ๊ฐ ๋งค์ผ ์ฌ์ฉํ๋ ์ด ์ด์ํ ๋ธ๋๋ฐ์ค๋ฅผ ์ง์ ์ผ๋ก ์ดํดํ๊ธฐ ์ํด ์๋ฐฑ ์๊ฐ์ ๋ณด๋์ต๋๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ด์ ๋ ๊ทธ๋ค์ด ์ ์ฉํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ดํดํ๋ ๋ฐ ๊ด์ฌ์ด ์์ง๋ง ์ด ๊ด๋ฒ์ํ ์ฃผ์ ๋ฅผ ์์ธํ ์์๋ณผ ์๊ฐ์ด๋ ์ํฅ์ด ์์๋ค๋ฉด ์ด ๊ธฐ์ฌ๋ฅผ ์ฝ์ด ๋ณด์ธ์.
์ด ๊ธ์ ์ ๋ชฉ์ ๋ ธ๊ณจ์ ์ด์ง๋ง, ์ด ๋ฌธ์์ ๋ชฉ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ด ์๋๋๋ค.. ๊ทธ๋ฌ๋ฏ๋ก, ๊ฐ๋จํ ์ฐ๊ฒฐ ์์ฒญ๊ณผ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์๊ณ ์์ด์ผ ํฉ๋๋ค. ํฌ๋ฃจ๋; ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด ๊ธ์ ์ดํดํ์ง ๋ชปํ ์๋ ์์ต๋๋ค. ๋น์ ์ด ์์์ผ ํ ๊ฒ์ ๊ทธ๊ฒ๋ฟ์ ๋๋ค. ๋๋จธ์ง๋ ์ ๊ฐ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋(BigO)์ ๊ฐ์ ๋ช ๊ฐ์ง ์ปดํจํฐ ๊ณผํ ๊ธฐ์ด๋ถํฐ ์์ํ๊ฒ ์ต๋๋ค. ์ฌ๋ฌ๋ถ ์ค ์ผ๋ถ๊ฐ ์ด ๊ฐ๋ ์ ์ซ์ดํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์ด๊ฒ์ด ์์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด๋ถ์ ๋ณต์ก์ฑ์ ์ดํดํ ์ ์์ต๋๋ค. ์๋ ํฐ ์ฃผ์ ์ด๊ธฐ ๋๋ฌธ์, ๋๋ ์ง์คํ ๊ฒ์ด๋ค ๋ด๊ฐ ์ค์ํ๋ค๊ณ ์๊ฐํ๋ ๊ฒ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฒ๋ฆฌ๋๋ ๋ฐฉ์ SQL ์์ฒญ. ๊ทธ๋ฅ ์๊ฐํ ๊ฒ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ ๊ธฐ์ฌ๊ฐ ๋๋๋ฉด ๋ด๋ถ์ ์ผ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์ ์ ์์ต๋๋ค.
์ด ๊ธ์ ๋ง์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํฌํจํ๋ ๊ธธ๊ณ ๊ธฐ์ ์ ์ธ ๊ธ์ด๋ฏ๋ก ์๊ฐ์ ๋ด์ด ๋๊น์ง ์ฝ์ด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. ์ผ๋ถ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๊ฑด๋๋ฐ์ด๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ ๋ง์ ์ง์์ ๊ฐ๊ณ ์๋ ๋ถ๋ค์ ์ํด ์ด ๊ธฐ์ฌ๋ 3๊ฐ ๋ถ๋ถ์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค.
- ํ์ ์์ค ๋ฐ ์์ ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ ์์ ๊ฐ์
- ์ฟผ๋ฆฌ ์ต์ ํ ํ๋ก์ธ์ค ๊ฐ์
- ํธ๋์ญ์ ๋ฐ ๋ฒํผ ํ ๊ด๋ฆฌ ๊ฐ์
๊ธฐ๋ณธ์ผ๋ก ๋์๊ฐ๊ธฐ
๋ช ๋ ์ (๋ฉ๊ณ ๋จผ ์ํ๊ณ์์...) ๊ฐ๋ฐ์๋ ์์ ์ด ์ฝ๋ฉํ๋ ์์ ์๋ฅผ ์ ํํ ์์์ผ ํ์ต๋๋ค. ๊ทธ๋ค์ ๋๋ฆฐ ์ปดํจํฐ์ CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ ์ฌ์ ๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ง์ ์์ผ๋ก ์๊ณ ์์์ต๋๋ค.
์ด ๋ถ๋ถ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ดํดํ๋ ๋ฐ ํ์์ ์ธ ์ด๋ฌํ ๊ฐ๋ ์ค ์ผ๋ถ๋ฅผ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ปจ์ ๋ ์๊ฐํ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค.
O(1) ๋ O(n2)
์์ฆ์๋ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋์ ๊ด์ฌ์ ๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์ ๋ง์ด ๋ง์ต๋๋ค!
๊ทธ๋ฌ๋ ๋ง์ ์์ ๋ฐ์ดํฐ(์์ฒ ๊ฐ๋ฅผ ๋งํ๋ ๊ฒ์ด ์๋๋๋ค)๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์ด๋ ค์์ ๊ฒช๊ณ ์๋ค๋ฉด ์ด ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ๋ถ์ด ์์ํ ์ ์๋ฏ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ๊ฐ์ง ์ํฉ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค! ๋๋ ์์ ์ ์ ๋ฌํ๋ ๋ฐ ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์๊ฐ์ ์๋นํ๊ฒ ๋ง๋ค์ง ์์ ๊ฒ์ ๋๋ค. ์ด๋ ๋์ค์ ๋น์ฉ ๊ธฐ๋ฐ ์ต์ ํ์ ๊ฐ๋ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค(๋น์ฉ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ํ).
๊ฐ๋
์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋ ์ฃผ์ด์ง ์์ ๋ฐ์ดํฐ์ ๋ํด ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฃ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ํ์ธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.. ์ด๋ฌํ ๋ณต์ก์ฑ์ ์ค๋ช ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ big O ์ํ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด ํ๊ธฐ๋ฒ์ ์ฃผ์ด์ง ์ ๋ ฅ ์์ ๋ํด ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ ์์ ์๋ฅผ ์ค๋ช ํ๋ ํจ์์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, "์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ์ O(some_function())์ ๋๋ค"๋ผ๊ณ ๋งํ๋ฉด ํด๋น ์๊ณ ๋ฆฌ์ฆ์ด ํน์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด some_function(a_certain_amount_of_data) ์์ ์ด ํ์ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
์ด ๊ฒฝ์ฐ, ์ค์ํ ๊ฒ์ ๋ฐ์ดํฐ์ ์์ด ์๋๋๋ค**, ๊ทธ๋ ์ง ์์ผ๋ฉด ** ๋ฐ์ดํฐ ์์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์์ ์๊ฐ ์ด๋ป๊ฒ ์ฆ๊ฐํ๋์ง. ์๊ฐ ๋ณต์ก๋๋ ์ ํํ ์์ ์๋ฅผ ์ ๊ณตํ์ง ์์ง๋ง ์คํ ์๊ฐ์ ์ถ์ ํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๊ทธ๋ํ์์๋ ๋ค์ํ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก์ฑ์ ๋ํ ์์ ์์ ์ ๋ ฅ ๋ฐ์ดํฐ ์์ ํ์ธํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ ํ์ํ๊ธฐ ์ํด ๋ก๊ทธ ๋๊ธ์ ์ฌ์ฉํ์ต๋๋ค. ์ฆ, ๋ฐ์ดํฐ์ ์์ด 1์ต์์ 1์ต์ผ๋ก ๋น ๋ฅด๊ฒ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
- O(1) ๋๋ ์์ ๋ณต์ก๋๋ ์ผ์ ํ๊ฒ ์ ์ง๋ฉ๋๋ค(๊ทธ๋ ์ง ์์ผ๋ฉด ์์ ๋ณต์ก๋๋ผ๊ณ ๋ถ๋ฅด์ง ์์ต๋๋ค).
- O(๊ธฐ๋ก(n)) ์์ญ์ต ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์์ด๋ ์ฌ์ ํ ๋ฎ์ ์์ค.
- ์ต์ ์ ๋์ด๋ - O(n2), ์ฐ์ฐ ์๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ ๊ฒฝ์ฐ.
- ๋ค๋ฅธ ๋ ๊ฐ์ง ํฉ๋ณ์ฆ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋น ๋ฅด๊ฒ ์ฆ๊ฐํฉ๋๋ค.
์
๋ฐ์ดํฐ ์์ด ์ ์ ๊ฒฝ์ฐ O(1)๊ณผ โโO(n2)์ ์ฐจ์ด๋ ๋ฌด์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 2000๊ฐ์ ์์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- O(1) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์์ ๋น์ฉ์ด 1ํ ๋ฐ์ํฉ๋๋ค.
- O(log(n)) ์๊ณ ๋ฆฌ์ฆ์๋ 7๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n) ์๊ณ ๋ฆฌ์ฆ์๋ 2๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n*log(n)) ์๊ณ ๋ฆฌ์ฆ์๋ 14๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n2) ์๊ณ ๋ฆฌ์ฆ์๋ 4๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
O(1)๊ณผ โโO(n2)์ ์ฐจ์ด๋ ์ปค ๋ณด์ด์ง๋ง(4๋ง ์ฐ์ฐ) ๋์ ๊น๋ฐ์ผ ์๊ฐ์ธ ์ต๋ 2ms๋ฅผ ์๊ฒ ๋ฉ๋๋ค. ์ค์ ๋ก ์ต์ ํ๋ก์ธ์๋ ๋ค์์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์์ ๋งํ๋ฏ์ด, ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ์ด ๊ฐ๋ ์ ์๋ ๊ฒ์ด ์ฌ์ ํ ์ค์ํฉ๋๋ค. ์ด๋ฒ์ ์๊ณ ๋ฆฌ์ฆ์ด 1๊ฐ์ ์์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ๊ทธ๋ค์ง ๋ง์ง ์์):
- O(1) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์์ ๋น์ฉ์ด 1ํ ๋ฐ์ํฉ๋๋ค.
- O(log(n)) ์๊ณ ๋ฆฌ์ฆ์๋ 14๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n) ์๊ณ ๋ฆฌ์ฆ์๋ 1๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n*log(n)) ์๊ณ ๋ฆฌ์ฆ์๋ 14๊ฐ์ ์์ ๋น์ฉ์ด ๋ญ๋๋ค.
- O(n2) ์๊ณ ๋ฆฌ์ฆ์ 1๋ฒ์ ์์ ๋น์ฉ์ ๋ฐ์์ํต๋๋ค.
๋๋ ๊ณ์ฐ์ ํ์ง ์์์ง๋ง O(n2) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ์ปคํผ๋ฅผ ๋ง์ค ์๊ฐ์ด ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(์ฌ์ง์ด ๋ ์!). ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ 0์ ํ๋ ๋ ์ถ๊ฐํ๋ฉด ๋ฎ์ ์ ์ ์ ์๋ ์๊ฐ์ด ์๊น๋๋ค.
๋ ๊น์ด ๋ค์ด๊ฐ์
๊ทํ์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค
- ์ข์ ํด์ ํ ์ด๋ธ ์กฐํ๋ O(1)์์ ์์๋ฅผ ์ฐพ์ต๋๋ค.
- ๊ท ํ์ด ์ ์กํ ํธ๋ฆฌ๋ฅผ ๊ฒ์ํ๋ฉด O(log(n))์ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ๋ฐฐ์ด์ ๊ฒ์ํ๋ฉด O(n)์ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋ฉ๋๋ค.
- ์ต๊ณ ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ์ O(n*log(n))์ ๋๋ค.
- ์๋ชป๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ์ O(n2)์ ๋๋ค.
์ฐธ๊ณ : ๋ค์ ๋ถ๋ถ์์๋ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๊ณ ๋ฆฌ์ฆ ์๊ฐ ๋ณต์ก๋์๋ ์ฌ๋ฌ ์ ํ์ด ์์ต๋๋ค.
- ํ๊ท ์ฌ๋ก ์๋๋ฆฌ์ค
- ์ต์ ์ ์๋๋ฆฌ์ค
- ๊ทธ๋ฆฌ๊ณ ์ต์ ์ ์๋๋ฆฌ์ค
์๊ฐ ๋ณต์ก์ฑ์ ์ข ์ข ์ต์ ์ ์๋๋ฆฌ์ค์ ๋๋ค.
๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋์ ๋ํด์๋ง ์ด์ผ๊ธฐํ์ง๋ง ๋ณต์ก์ฑ์ ๋ค์์๋ ์ ์ฉ๋ฉ๋๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ๋ชจ๋ฆฌ ์๋น
- ๋์คํฌ I/O ์๋น ์๊ณ ๋ฆฌ์ฆ
๋ฌผ๋ก n2๋ณด๋ค ๋ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- n4: ์ด๊ฑด ์ ๋ง ๋์ฐํด์! ์ธ๊ธ๋ ์๊ณ ๋ฆฌ์ฆ ์ค ์ผ๋ถ๋ ์ด๋ฌํ ๋ณต์ก์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- 3n: ์ด๊ฑด ๋ ์ฌํด์! ์ด ๊ธฐ์ฌ์ ์ค๊ฐ ๋ถ๋ถ์์ ๋ณด๊ฒ ๋ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ ์ด๋ฌํ ๋ณต์ก์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค(์ค์ ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋ฉ๋๋ค).
- ํฉํ ๋ฆฌ์ผ n: ์ ์ ์์ ๋ฐ์ดํฐ๋ก๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
- nn: ์ด๋ฐ ๋ณต์ก์ฑ์ ์ง๋ฉดํ๋ค๋ฉด, ์ด๊ฒ์ด ์ ๋ง๋ก ๋น์ ์ ํ๋ ๋ถ์ผ์ธ์ง ์๋ฌธํด ๋ณด์์ผ ํฉ๋๋ค...
์ฐธ๊ณ : ๋๋ ๋น
O ์ง์ ์ ๋ํ ์ค์ ์ ์๋ฅผ ์ ๊ณตํ์ง ์์์ผ๋ฉฐ ๋จ์ง ์์ด๋์ด๋ง ์ ๊ณตํ์ต๋๋ค. ์ด ๊ธฐ์ฌ๋ ๋ค์์์ ์ฝ์ ์ ์์ต๋๋ค.
๋ณํฉ์ ๋ ฌ
์ปฌ๋ ์ ์ ์ ๋ ฌํด์ผ ํ ๋ ์ด๋ป๊ฒ ํ์๋์? ๋ฌด์? sort() ํจ์๋ฅผ ํธ์ถํฉ๋๋ค... ์ข์์, ์ข์ ๋ต๋ณ์ ๋๋ค... ํ์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ์ด sort() ํจ์๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ดํดํด์ผ ํฉ๋๋ค.
๋ช ๊ฐ์ง ์ข์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์์ผ๋ฏ๋ก ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ์ค์ ์ ๋๊ฒ ์ต๋๋ค. ๋ณํฉ ์ ๋ ฌ. ์ง๊ธ์ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ ์ ์ฉํ์ง ์ดํดํ์ง ๋ชปํ ์๋ ์์ง๋ง ์ฟผ๋ฆฌ ์ต์ ํ ๋ถ๋ถ ์ดํ์ ํด์ผ ํฉ๋๋ค. ๋ํ ๋ณํฉ ์ ๋ ฌ์ ์ดํดํ๋ฉด ๋์ค์ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ธ ์์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ณํฉ ์ด์ธ๋ฆฌ๋ค (ํฉ๋ณ์กฐํฉ).
๋ณํฉ
๋ง์ ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณํฉ ์ ๋ ฌ์ ํธ๋ฆญ์ ์ฌ์ฉํฉ๋๋ค. N/2 ํฌ๊ธฐ์ ์ ๋ ฌ๋ ๋ฐฐ์ด 2๊ฐ๋ฅผ N ์์ ์ ๋ ฌ ๋ฐฐ์ด๋ก ๊ฒฐํฉํ๋ ๋ฐ ๋๋ ์์ ๋น์ฉ์ N๊ฐ๋ฟ์ ๋๋ค. ์ด ์์ ์ ๋ณํฉ์ด๋ผ๊ณ ํฉ๋๋ค.
๊ฐ๋จํ ์๋ฅผ ํตํด ์ด๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด ๊ทธ๋ฆผ์ ์ต์ข ์ ๋ ฌ๋ 8๊ฐ ์์ ๋ฐฐ์ด์ ์์ฑํ๋ ค๋ฉด 2๊ฐ์ 4๊ฐ ์์ ๋ฐฐ์ด์ ํ ๋ฒ๋ง ๋ฐ๋ณตํ๋ฉด ๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. 4๊ฐ ์์๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ด ๋ชจ๋ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก:
- 1) ๋ ๋ฐฐ์ด์ ๋ ํ์ฌ ์์๋ฅผ ๋น๊ตํฉ๋๋ค (์ฒ์์๋ ํ์ฌ = ์ฒซ ๋ฒ์งธ)
- 2) ๊ทธ๋ฐ ๋ค์ ๊ฐ์ฅ ์์ ๊ฒ์ ๊ฐ์ ธ์ 8 ์์ ๋ฐฐ์ด์ ๋ฃ์ต๋๋ค.
- 3) ๊ฐ์ฅ ์์ ์์๋ฅผ ๊ฐ์ ธ์จ ๋ฐฐ์ด์ ๋ค์ ์์๋ก ์ด๋ํฉ๋๋ค.
- ๋ฐฐ์ด ์ค ํ๋์ ๋ง์ง๋ง ์์์ ๋๋ฌํ ๋๊น์ง 1,2,3์ ๋ฐ๋ณตํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ๋ฐฐ์ด์ ๋๋จธ์ง ์์๋ฅผ ๊ฐ์ ธ์์ 8๊ฐ ์์ ๋ฐฐ์ด์ ๋ฃ์ต๋๋ค.
์ด๋ 4๊ฐ ์์ ๋ฐฐ์ด์ด ๋ชจ๋ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก ํด๋น ๋ฐฐ์ด์์ "๋ค๋ก ๋์๊ฐ" ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ํฉ๋๋ค.
์ด์ ์ฐ๋ฆฌ๋ ํธ๋ฆญ์ ์ดํดํ์ผ๋ฏ๋ก ๋ณํฉ์ ์ํ ์์ฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
array mergeSort(array a)
if(length(a)==1)
return a[0];
end if
//recursive calls
[left_array right_array] := split_into_2_equally_sized_arrays(a);
array new_left_array := mergeSort(left_array);
array new_right_array := mergeSort(right_array);
//merging the 2 small ordered arrays into a big one
array result := merge(new_left_array,new_right_array);
return result;
๋ณํฉ ์ ๋ ฌ์ ๋ฌธ์ ๋ฅผ ๋ ์์ ๋ฌธ์ ๋ก ๋๋ ๋ค์ ๋ ์์ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ ์๋ ๋ฌธ์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค(์ฐธ๊ณ : ์ด ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ถํ ์ ๋ณต์ด๋ผ๊ณ ํฉ๋๋ค). ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ๊ฑฑ์ ํ์ง ๋ง์ธ์. ์ฒ์ ๋ดค์ ๋ ์ดํด๊ฐ ์ ๋์ด์. ๋์์ด ๋ ์ ์๋ค๋ฉด ์ด ์๊ณ ๋ฆฌ์ฆ์ XNUMX๋จ๊ณ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ด ๋๋ค.
- ๋ถํ ๋จ๊ณ(์ด๋ ์ด๊ฐ ๋ ์์ ์ด๋ ์ด๋ก ๋ถํ ๋จ)
- ์ ๋ ฌ ๋จ๊ณ์์๋ ์์ ๋ฐฐ์ด์ ๊ฒฐํฉํ์ฌ(union์ ์ฌ์ฉํ์ฌ) ๋ ํฐ ๋ฐฐ์ด์ ํ์ฑํฉ๋๋ค.
๋ถํ ๋จ๊ณ
๋ถํ ๋จ๊ณ์์๋ ๋ฐฐ์ด์ด 3๋จ๊ณ์ ๊ฑธ์ณ ๋จ์ผ ๋ฐฐ์ด๋ก ๋ถํ ๋ฉ๋๋ค. ๊ณต์์ ์ธ ๋จ๊ณ ์๋ log(N)์ ๋๋ค(N=8, log(N) = 3์ด๋ฏ๋ก).
์ด๊ฒ์ ์ด๋ป๊ฒ ์ ์ ์์ต๋๊น?
๋๋ ์ฒ์ฌ๋ค! ํ๋ง๋๋ก - ์ํ. ์์ด๋์ด๋ ๊ฐ ๋จ๊ณ๊ฐ ์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ 2๋ก ๋๋๋ ๊ฒ์ ๋๋ค. ๋จ๊ณ ์๋ ์๋ ๋ฐฐ์ด์ ๋ ๊ฐ๋ก ๋๋ ์ ์๋ ํ์์ ๋๋ค. ์ด๊ฒ์ด ๋ก๊ทธ(๋ฐ 2)์ ์ ํํ ์ ์์ ๋๋ค.
์ ๋ ฌ ๋จ๊ณ
์ ๋ ฌ ๋จ๊ณ์์๋ ๋จ์ผ(๋จ์ผ ์์) ๋ฐฐ์ด๋ก ์์ํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ง๋ค ์ฌ๋ฌ ๋ณํฉ ์์ ์ ์ ์ฉํ๋ฉฐ ์ด ๋น์ฉ์ N = 8 ์์ ์ ๋๋ค.
- ์ฒซ ๋ฒ์งธ ๋จ๊ณ์๋ ๊ฐ๊ฐ 4๊ฐ์ ์์ ์ด ํ์ํ 2๊ฐ์ ๋ณํฉ์ด ์์ต๋๋ค.
- ๋ ๋ฒ์งธ ๋จ๊ณ์๋ ๊ฐ๊ฐ 2๊ฐ์ ์์ ์ด ํ์ํ 4๊ฐ์ ๋ณํฉ์ด ์์ต๋๋ค.
- ์ธ ๋ฒ์งธ ๋จ๊ณ์์๋ 1๊ฐ์ ์์ ์ด ํ์ํ 8๊ฐ์ ๋ณํฉ์ด ์์ต๋๋ค.
log(N) ๋จ๊ณ๊ฐ ์์ผ๋ฏ๋ก, ์ด ๋น์ฉ N * log(N) ์์ .
๋ณํฉ ์ ๋ ฌ์ ์ฅ์
์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ ๊ทธ๋ ๊ฒ ๊ฐ๋ ฅํ๊ฐ์?
์๋ํ๋ฉด :
- ์ ๋ฐฐ์ด์ ์์ฑํ์ง ์๊ณ ์ ๋ ฅ ๋ฐฐ์ด์ ์ง์ ์์ ํ ์ ์๋๋ก ์ด๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๊ณต๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด๋ฌํ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์
- ์๋นํ ๋์คํฌ I/O ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํค์ง ์๊ณ ๋์คํฌ ๊ณต๊ฐ๊ณผ ์๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์์ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ๋ถ๋ถ๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ฒ์ด ์์ด๋์ด์ ๋๋ค. ์ด๋ 100MB ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ง์ผ๋ก ์ ๊ธฐ๊ฐ๋ฐ์ดํธ ํฌ๊ธฐ์ ํ ์ด๋ธ์ ์ ๋ ฌํด์ผ ํ ๋ ์ค์ํฉ๋๋ค.
์ฐธ๊ณ : ์ด๋ฌํ ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์
- ์ฌ๋ฌ ํ๋ก์ธ์ค/์ค๋ ๋/์๋ฒ์์ ์คํ๋๋๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ถ์ฐ ๋ณํฉ ์ ๋ ฌ์ ํต์ฌ ๊ตฌ์ฑ ์์ ์ค ํ๋์
๋๋ค.
- ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฉ์ ๊ธ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค(์ ๋ง์ ๋๋ค!).
์ด ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ถ๋ถ์(์ ๋ถ๋ ์๋์ง๋ง) ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋์ง๋ง ์ ์ผํ ๊ฒ์ ์๋๋๋ค. ๋ ์๊ณ ์ถ๋ค๋ฉด ์ด ๊ธ์ ์ฝ์ด๋ณด์ธ์
๋ฐฐ์ด, ํธ๋ฆฌ ๋ฐ ํด์ ํ ์ด๋ธ
์ด์ ์๊ฐ๋ณต์ก๋์ ์ ๋ ฌ์ ๋ํ ๊ฐ๋ ์ ์ดํดํ์ผ๋, 3๊ฐ์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํด ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด๊ฒ์ด ์ค์ํ ์ด์ ๋ ๊ทธ๋ค์ด ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์ด. ์ปจ์ ๋ ์๊ฐํ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค.
ะะฐััะธะฒ
XNUMX์ฐจ์ ๋ฐฐ์ด์ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ํ ์ด๋ธ์ ๋ฐฐ์ด๋ก ์๊ฐ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
์ด 2์ฐจ์ ๋ฐฐ์ด์ ํ๊ณผ ์ด์ด ์๋ ํ ์ด๋ธ์ ๋๋ค.
- ๊ฐ ์ค์ ์ํฐํฐ๋ฅผ ๋ํ๋ ๋๋ค.
- ์ด์ ์ํฐํฐ๋ฅผ ์ค๋ช ํ๋ ์์ฑ์ ์ ์ฅํฉ๋๋ค.
- ๊ฐ ์ด์ ํน์ ์ ํ(์ ์, ๋ฌธ์์ด, ๋ ์ง...)์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๊ฐํํ๋ ๋ฐ ํธ๋ฆฌํ์ง๋ง ํน์ ๊ฐ์ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ ํฉํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๊ตญ์์ ์ผํ๋ ๋ชจ๋ ๋จ์ฑ์ ์ฐพ์ผ๋ ค๋ฉด ๊ฐ ํ์ ๋ณด๊ณ ํด๋น ํ์ด ์๊ตญ์ ์ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. N๋ฒ์ ๊ฑฐ๋ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค.์ด๋์์ N - ์ค ์, ๋์์ง ์์๋ฐ ๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ด ์์๊น์? ์ด์ ์ฐ๋ฆฌ๊ฐ ๋๋ฌด์ ๋ํด ์์๊ฐ ์๊ฐ์ ๋๋ค.
์ฐธ๊ณ : ๋๋ถ๋ถ์ ์ต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ ์ด๋ธ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ํ ๊ตฌ์ฑ ํ ์ด๋ธ ๋ฐ ์ธ๋ฑ์ค ๊ตฌ์ฑ ํ ์ด๋ธ๊ณผ ๊ฐ์ ํ์ฅ ๋ฐฐ์ด์ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ด ๊ทธ๋ฃน์์ ํน์ ์กฐ๊ฑด์ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊พธ์ง๋ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋ฆฌ ๋ฐ ์ธ๋ฑ์ค
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ํน๋ณํ ์์ฑ์ ๊ฐ์ง ์ด์ง ํธ๋ฆฌ์ ๋๋ค. ๊ฐ ๋ ธ๋์ ํค๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
- ์ผ์ชฝ ํ์ ํธ๋ฆฌ์ ์ ์ฅ๋ ๋ชจ๋ ํค๋ณด๋ค ํผ
- ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ์ ์ ์ฅ๋ ๋ชจ๋ ํค๋ณด๋ค ์์ต๋๋ค.
์ด๊ฒ์ด ์๊ฐ์ ์ผ๋ก ๋ฌด์์ ์๋ฏธํ๋์ง ๋ด ์๋ค
์๊ฐ
์ด ํธ๋ฆฌ์๋ N = 15๊ฐ์ ์์๊ฐ ์์ต๋๋ค. 208์ ์ฐพ๊ณ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ํค๊ฐ 136์ธ ๋ฃจํธ์์ ์์ํฉ๋๋ค. 136<208์ด๋ฏ๋ก ๋ ธ๋ 136์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ด ๋๋ค.
- 398>208 ๋ฐ๋ผ์ ๋ ธ๋ 398์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค.
- 250>208 ๋ฐ๋ผ์ ๋ ธ๋ 250์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค.
- 200<208์ด๋ฏ๋ก ๋ ธ๋ 200์ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค. ํ์ง๋ง 200์๋ ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ฐ์ด ์กด์ฌํ์ง ์์ต๋๋ค (์กด์ฌํ๋ค๋ฉด ์ค๋ฅธ์ชฝ ํ์ ํธ๋ฆฌ 200์ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค).
์ด์ ๋ด๊ฐ 40์ ์ฐพ๊ณ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ํค๊ฐ 136์ธ ๋ฃจํธ์์ ์์ํฉ๋๋ค. 136 > 40์ด๋ฏ๋ก ๋ ธ๋ 136์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ด ๋๋ค.
- 80 > 40์ด๋ฏ๋ก ๋ ธ๋ 80์ ์ผ์ชฝ ํ์ ํธ๋ฆฌ๋ฅผ ๋ณด๊ณ ์์ต๋๋ค.
- 40= 40, ๋ ธ๋๊ฐ ์กด์ฌํฉ๋๋ค. ๋ ธ๋ ๋ด๋ถ์ ํ ID(๊ทธ๋ฆผ์๋ ํ์๋์ง ์์)๋ฅผ ๊ฒ์ํ๊ณ ํ ์ด๋ธ์์ ์ง์ ๋ ํ ID๋ฅผ ์ฐพ์ต๋๋ค.
- ํ ID๋ฅผ ์๋ฉด ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์ด๋์ ์๋์ง ์ ํํ ์ ์ ์์ผ๋ฏ๋ก ์ฆ์ ๊ฒ์ํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ ๊ฒ์ ๋ชจ๋ ํธ๋ฆฌ ๋ด๋ถ์ ์์ค ์๋งํผ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. ๋ณํฉ ์ ๋ ฌ ๋ถ๋ถ์ ์ฃผ์ ๊น๊ฒ ์ฝ์ด๋ณด๋ฉด log(N) ์์ค์ด ์๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฐํ, ๊ฒ์ ๋น์ฉ ๋ก๊ทธ(N), ๋์์ง ์๋ค!
์ฐ๋ฆฌ์ ๋ฌธ์ ๋ก ๋์๊ฐ์
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋งค์ฐ ์ถ์์ ์ด๋ฏ๋ก ๋ฌธ์ ๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ๋จ์ํ ์ ์ ๋์ ์ด์ ํ์ ์๋ ๋๊ตฐ๊ฐ์ ๊ตญ๊ฐ๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ ์์ํด ๋ณด์ธ์. ํ ์ด๋ธ์ "๊ตญ๊ฐ" ํ๋(3์ด)๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ์๊ตญ์์ ์ผํ๋ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ์๊ณ ์ถ๋ค๋ฉด
- ์๊ตญ์ ๋ํ๋ด๋ ๋ ธ๋๋ฅผ ์ป๊ธฐ ์ํด ํธ๋ฆฌ๋ฅผ ๋ด ๋๋ค.
- "UKnode" ๋ด์์ ์๊ตญ ๊ทผ๋ก์ ๊ธฐ๋ก์ ์์น๋ฅผ โโ์ฐพ์ ์ ์์ต๋๋ค.
๋ฐฐ์ด์ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด ๊ฒ์์๋ N ์์ ๋์ log(N) ์์ ์ด ์์๋ฉ๋๋ค. ๋ฐฉ๊ธ ์ ์ํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค.
ํค(์: ํ๋ ๊ทธ๋ฃน)๋ฅผ ๋น๊ตํ๋ ๊ธฐ๋ฅ์ด ์๋ ํ ๋ชจ๋ ํ๋ ๊ทธ๋ฃน(๋ฌธ์์ด, ์ซ์, 2์ค, ์ซ์ ๋ฐ ๋ฌธ์์ด, ๋ ์ง...)์ ๋ํ ์ธ๋ฑ์ค ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค. ์ด์ ์ฌ์ด์์ ์์๋ฅผ ์ ํ์ธ์ (์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๊ธฐ๋ณธ ์ ํ์ ๊ฒฝ์ฐ์ ๋๋ค).
B+ํธ๋ฆฌ์ธ๋ฑ์ค
์ด ํธ๋ฆฌ๋ ํน์ ๊ฐ์ ์ป๋ ๋ฐ๋ ํจ๊ณผ์ ์ด์ง๋ง, ํ์ํ ๊ฒฝ์ฐ์๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ ๊ฐ ์ฌ์ด์ ์ฌ๋ฌ ์์ ๊ฐ์ ธ์ค๊ธฐ. ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ฅผ ์ดํด๋ณด๊ณ ์ด ๋ ๊ฐ ์ฌ์ด์ ์๋์ง ํ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ O(N)์ ๋น์ฉ์ด ๋ญ๋๋ค(์: ํธ๋ฆฌ ์ํ ์์๋ฅผ ์ฌ์ฉํ์ฌ). ๊ฒ๋ค๊ฐ ์ด ์์ ์ ์ ์ฒด ํธ๋ฆฌ๋ฅผ ์ฝ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์คํฌ I/O ์นํ์ ์ด์ง ์์ต๋๋ค. ํจ์จ์ ์ผ๋ก ์คํํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํฉ๋๋ค. ๋ฒ์ ์์ฒญ. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ B+Tree๋ผ๋ ์ด์ ํธ๋ฆฌ์ ์์ ๋ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. B+ํธ๋ฆฌ ํธ๋ฆฌ์์:
- ๊ฐ์ฅ ๋ฎ์ ๋ ธ๋(์)๋ง ๊ฐ๊ฒ ์ ๋ณด (๊ด๋ จ ํ ์ด๋ธ์ ํ ์์น)
- ๋๋จธ์ง ๋ ธ๋๋ ์ฌ๊ธฐ์ ์์ต๋๋ค ๋ผ์ฐํ ์ ์ํด ์ฌ๋ฐ๋ฅธ ๋ ธ๋๋ก ๊ฒ์ ์ค.
๋ณด์๋ค์ํผ ์ฌ๊ธฐ์๋ ๋ ๋ง์ ๋ ธ๋๊ฐ ์์ต๋๋ค(๋ ๋ฒ). ์ค์ ๋ก ์ฌ๋ฐ๋ฅธ ๋ ธ๋(๊ด๋ จ ํ ์ด๋ธ์ ํ ์์น๋ฅผ ์ ์ฅํจ)๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋ ์ถ๊ฐ ๋ ธ๋์ธ "๊ฒฐ์ ๋ ธ๋"๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฒ์ ๋ณต์ก๋๋ ์ฌ์ ํ O(log(N))์ ๋๋ค(ํ ๋จ๊ณ๋ง ๋ ์์). ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ํ์ ์์ค์ ๋ ธ๋๋ ํ์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ฉ๋๋ค..
์ด B+Tree๋ฅผ ์ฌ์ฉํ์ฌ 40์์ 100 ์ฌ์ด์ ๊ฐ์ ์ฐพ๋ ๊ฒฝ์ฐ:
- ์ด์ ํธ๋ฆฌ์์ ํ๋ ๊ฒ์ฒ๋ผ 40(๋๋ 40์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ 40 ์ดํ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ)์ ์ฐพ์ผ๋ฉด ๋ฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ 40๋ช ์ ๋๋ฌํ ๋๊น์ง ์ง์ ์์์ธ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ 100๋ช ์ ์์์ธ์ ์์งํ์ธ์.
M๊ฐ์ ํ์ ํญ๋ชฉ์ ์ฐพ์๊ณ ํธ๋ฆฌ์ N๊ฐ์ ๋ ธ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํน์ ๋ ธ๋๋ฅผ ์ฐพ๋ ๋ฐ๋ ์ด์ ํธ๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก log(N) ๋น์ฉ์ด ๋ญ๋๋ค. ํ์ง๋ง ์ผ๋จ ์ด ๋ ธ๋๋ฅผ ์ป์ผ๋ฉด M๊ฐ์ ์์ ์์ M๊ฐ์ ํ์ ๋ ธ๋๋ฅผ ์ฐธ์กฐํ์ฌ ํด๋น ํ์ ๋ ธ๋๋ฅผ ์ป๊ฒ ๋ฉ๋๋ค. ์ด ๊ฒ์ ๋น์ฉ์ M+log(N)์ ๋๋ค. ์ด์ ํธ๋ฆฌ์ N๊ฐ ์์ ๊ณผ ๋น๊ตํ ์์ ์ ๋๋ค. ๋ํ ์ ์ฒด ํธ๋ฆฌ(M+log(N) ๋ ธ๋๋ง)๋ฅผ ์ฝ์ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋์คํฌ ์ฌ์ฉ๋์ด ์ค์ด๋ญ๋๋ค. M์ด ์๊ณ (์: 200ํ) N์ด ํฌ๋ค๋ฉด(1ํ) ํฐ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ (๋ค์!) ์๋ก์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค(๋ฐ๋ผ์ ์ฐ๊ด๋ B+Tree ์ธ๋ฑ์ค)์์ ํ์ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒฝ์ฐ:
- B+ํธ๋ฆฌ ๋ด๋ถ์ ๋ ธ๋ ์ฌ์ด์ ์์๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๋ ฌ๋์ง ์์ ํธ๋ฆฌ ๋ด๋ถ์ ๋ ธ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- B+Tree์์ ๊ฐ๋ฅํ ์ต์ ์์ค ์๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด O(log(N)) ์๊ฐ ๋ณต์ก๋๋ O(N)์ด ๋ฉ๋๋ค.
์ฆ, B+Tree๋ ์๋ ์ ๋ ฌ๋๊ณ ๊ท ํ์ ์ด๋ฃจ์ด์ผ ํฉ๋๋ค. ๋คํํ ์ด๋ ์ค๋งํธ ์ญ์ ๋ฐ ์ฝ์ ์์ ์ ํตํด ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋น์ฉ์ด ๋ฐ์ํฉ๋๋ค. B+ ํธ๋ฆฌ์ ์ฝ์ ๋ฐ ์ญ์ ๋น์ฉ์ O(log(N))์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ถ ์ค ์ผ๋ถ๋ ๊ทธ๋ฐ ๋ง์ ๋ค์์ต๋๋ค. ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ์ ๋ง, ํ ์ด๋ธ์์ ํ์ ๋น ๋ฅธ ์ฝ์ /์ ๋ฐ์ดํธ/์ญ์ ์๋๊ฐ ๋๋ ค์ง๊ณ ์์ต๋๋ค.๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ ์ธ๋ฑ์ค์ ๋ํด ๋น์ฉ์ด ๋ง์ด ๋๋ O(log(N)) ์์ ์ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฒ๋ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์์ ๋ถํ๊ฐ ๋ ์ปค์ง๋๋ค. ๊ฑฐ๋ ๊ด๋ฆฌ์ (๊ธ ๋ง์ง๋ง ๋ถ๋ถ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค).
์์ธํ ๋ด์ฉ์ Wikipedia ๊ธฐ์ฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฐธ๊ณ : ํ ๋ ์๋ ์ ์์ค ์ต์ ํ๋ก ์ธํด B+ ํธ๋ฆฌ๊ฐ ์์ ํ ๊ท ํ์ ์ด๋ฃจ์ด์ผ ํ๋ค๊ณ ๋งํ์ต๋๋ค.
ํด์ํ ์ด๋ธ
๋ง์ง๋ง์ผ๋ก ์ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ํด์ ํ ์ด๋ธ์ ๋๋ค. ์ด๋ ๊ฐ์ ๋น ๋ฅด๊ฒ ์กฐํํ๋ ค๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋์ฑ์ด ํด์ ํ ์ด๋ธ์ ์ดํดํ๋ฉด ๋์ค์ ํด์ ์กฐ์ธ์ด๋ผ๊ณ ํ๋ ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ธ ์์ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ํด์ ์กฐ์ธ). ์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ผ๋ถ ๋ด๋ถ ํญ๋ชฉ(์: ์ ๊ธ ํ ์ด๋ธ ๋๋ ๋ฒํผ ํ, ๋์ค์ ์ด ๋ ๊ฐ๋ ์ ๋ชจ๋ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํด์ ํ ์ด๋ธ์ ํค๋ก ์์๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ํด์ ํ ์ด๋ธ์ ์์ฑํ๋ ค๋ฉด ๋ค์์ ์ ์ํด์ผ ํฉ๋๋ค.
- ะบะปัั ๋น์ ์ ์์์ ๋ํ
- ํด์ ํจ์ ์ด์ ์ฉ. ๊ณ์ฐ๋ ํค ํด์๋ ์์์ ์์น๋ฅผ โโ์ ๊ณตํฉ๋๋ค( ์ธ๊ทธ๋จผํธ ).
- ํค ๋น๊ต ๊ธฐ๋ฅ. ์ฌ๋ฐ๋ฅธ ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐพ์์ผ๋ฉด ์ด ๋น๊ต๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๊ทธ๋จผํธ ๋ด์์ ์ฐพ๊ณ ์๋ ์์๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.
๊ฐ๋จํ ์
๋ช ํํ ์๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์ด ํด์ ํ ์ด๋ธ์๋ 10๊ฐ์ ์ธ๊ทธ๋จผํธ๊ฐ ์์ต๋๋ค. ์ ๊ฐ ๊ฒ์๋ฌ์ 5๊ฐ ๋ถ๋ถ๋ง ์ฐ์๋๋ฐ, ๋น์ ์ด ๋๋ํ๋ค๋ ๊ฑธ ์๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง 5๊ฐ ๋ถ๋ถ์ ์ง์ ๊ทธ๋ ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋๋ ํค์ ๋ชจ๋๋ก 10 ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ฆ, ํด๋น ์ธ๊ทธ๋จผํธ๋ฅผ ์ฐพ๊ธฐ ์ํด ์์ ํค์ ๋ง์ง๋ง ์ซ์๋ง ์ ์ฅํฉ๋๋ค.
- ๋ง์ง๋ง ์ซ์๊ฐ 0์ด๋ฉด ์์๋ ์ธ๊ทธ๋จผํธ 0์ ์ํฉ๋๋ค.
- ๋ง์ง๋ง ์ซ์๊ฐ 1์ด๋ฉด ์์๋ ์ธ๊ทธ๋จผํธ 1์ ์ํฉ๋๋ค.
- ๋ง์ง๋ง ์ซ์๊ฐ 2์ด๋ฉด ์์๋ ์์ญ 2์ ์ํฉ๋๋ค.
- ...
๋ด๊ฐ ์ฌ์ฉํ ๋น๊ต ํจ์๋ ๋จ์ํ ๋ ์ ์ ์ฌ์ด์ ๋์ผ์ฑ์ ๋๋ค.
์์ 78์ ์ป๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ํด์ ํ ์ด๋ธ์ 78์ ํด์ ์ฝ๋์ธ 8์ ๊ณ์ฐํฉ๋๋ค.
- ํด์ ํ ์ด๋ธ์ ์ธ๊ทธ๋จผํธ 8์ ๋ณด๊ณ ์ฒซ ๋ฒ์งธ๋ก ์ฐพ์ ์์๋ 78์ ๋๋ค.
- ๊ทธ๋ ๋ ํญ๋ชฉ 78์ ๋น์ ์๊ฒ ๋๋ ค์ค๋๋ค.
- ๊ฒ์ ๋น์ฉ์ 2๊ฐ ์์ ๋ฟ์ ๋๋ค. (ํ๋๋ ํด์ ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํ ๊ฒ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ์ธ๊ทธ๋จผํธ ๋ด์ ์์๋ฅผ ์กฐํํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค).
์ด์ ์์ 59๋ฅผ ์ป๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ํด์ ํ ์ด๋ธ์ 59์ ํด์ ์ฝ๋์ธ 9์ ๊ณ์ฐํฉ๋๋ค.
- ํด์ ํ ์ด๋ธ์ ์ธ๊ทธ๋จผํธ 9์์ ๊ฒ์ํ๋ฉฐ ๋ฐ๊ฒฌ๋ ์ฒซ ๋ฒ์งธ ์์๋ 99์ ๋๋ค. 99!=59์ด๋ฏ๋ก ์์ 99๋ ์ ํจํ ์์๊ฐ ์๋๋๋ค.
- ๋์ผํ ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ฒ์งธ ์์(9), ์ธ ๋ฒ์งธ ์์(79), ..., ๋ง์ง๋ง ์์(29)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
- ๊ฒ์์๋ 7๊ฐ์ ์์ ์ด ์์๋ฉ๋๋ค..
์ข์ ํด์ ํจ์
๋ณด์๋ค์ํผ, ์ฐพ๊ณ ์๋ ๊ฐ์น์ ๋ฐ๋ผ ๋น์ฉ์ด ๋์ผํ์ง ์์ต๋๋ค!
์ด์ ํค์ ํด์ ํจ์ ๋ชจ๋๋ก 1์ ๋ณ๊ฒฝํ๋ฉด(์ฆ, ๋ง์ง๋ง 000์๋ฆฌ ์ฌ์ฉ) ์ธ๊ทธ๋จผํธ 000์ ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์งธ ์กฐํ์๋ 6๋ฒ์ ์์ ๋ง ์ํ๋ฉ๋๋ค. ์ง์ง ๊ณผ์ ๋ ๋งค์ฐ ์ ์ ์์ ์์๋ฅผ ํฌํจํ๋ ๋ฒํท์ ์์ฑํ ์ข์ ํด์ ํจ์๋ฅผ ์ฐพ๋ ๊ฒ์ ๋๋ค..
๋ด ์์์๋ ์ข์ ํด์ ํจ์๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ฝ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๊ฐ๋จํ ์์ด๋ฉฐ ํค๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ ์ข์ ํด์ ํจ์๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ ์ด๋ ต์ต๋๋ค.
- ๋ฌธ์์ด(์: ์ฑ)
- 2์ค(์: ์ฑ ๋ฐ ์ด๋ฆ)
- 2์ค ๋ฐ ๋ ์ง(์: ์ฑ, ์ด๋ฆ, ์๋ ์์ผ)
- ...
์ข์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํด์ ํ ์ด๋ธ ์กฐํ ๋น์ฉ์ด O(1).
๋ฐฐ์ด๊ณผ ํด์ ํ ์ด๋ธ
์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์์ต๋๊น?
ํ , ์ข์ ์ง๋ฌธ์ด๋ค์.
- ํด์ ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ถ์ ์ผ๋ก ๋ก๋๋จ, ๋๋จธ์ง ์ธ๊ทธ๋จผํธ๋ ๋์คํฌ์ ๋จ์ ์์ ์ ์์ต๋๋ค.
- ๋ฐฐ์ด์ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ฐ์์ ์ธ ๊ณต๊ฐ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํฐ ํ ์ด๋ธ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ ์ถฉ๋ถํ ์ฐ์ ๊ณต๊ฐ์ ์ฐพ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต์ต๋๋ค..
- ํด์ ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์ํ๋ ํค(์: ๊ตญ๊ฐ ๋ฐ ์ฌ๋์ ์ฑ)๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ๋ค์ ๊ธฐ์ฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ถ์ฒ : habr.com