๋ฉฐ์น ์ ์ ์ผ์ด๋ ์ผ
์ด๊ฒ์ ํ ์คํธ ์์ฑ์๊ฐ Kontur ์คํ ๋์์ ์์ ์ ๋ถ์ํ ๊ฒ์๋ฌผ์ ๋๋ค. Hydra์ ์์๋ ์ฌ๋ - ์ด๊ฒ์ ์ฆ๊ฑฐ์ด ๊ฒฝํ์ ๊ธฐ์ตํ๋ ์ด์ ์ ๋๋ค. ๊ทธ๋ ์ง ์์ ์ฌ๋์ ๋๋ฅผ ์คํธ๋ ์นญํ ๊ธฐํ์ ๋๋ค. ํฐ O-ํ๊ธฐ๋ฒ.
ํ๋ฆฝ์ฐจํธ๋ฅผ ๋ถํดํ์ฌ ์ฌ๋ผ์ด๋๋ก ๋ง๋ค์ด ์์ ์ ๊ฒฐ์ ์ ์ ๋ ์ฐธ๊ฐ์๋ ์์์ต๋๋ค. ๋๋ด์ด ์๋๋๋ค. ๊ทธ๋ค์ ํ์ธ์ ์ํด ์ด ์ข ์ด ๋ญ์น๋ฅผ ๊ฑด๋ค์ฃผ์์ต๋๋ค.
์ด ์ธ ๊ฐ์ง ์์ ์ด ์์์ต๋๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํด ๊ฐ์ค์น๋ก ๋ณต์ ๋ณธ ์ ํ ์ ๋ณด
- ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ ๋ ฌ ์ ๋ณด
- ๋ง ํ ํด๋ก์ง๊ฐ ์๋ ๋ถ์ฐ ์์คํ ์ ์ํ ์ ์ก ์
์์ 1. ClusterClient
๋ถ์ฐ ์์คํ ์ N๊ฐ์ ๊ฐ์ค ๋ณต์ ๋ณธ์์ K๋ฅผ ํจ์จ์ ์ผ๋ก ์ ํํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ๋ ๊ฒ์ด ํ์ํ์ต๋๋ค.
๊ทํ์ ํ์ N ๋ ธ๋์ ๋๊ท๋ชจ ๋ถ์ฐ ํด๋ฌ์คํฐ๋ฅผ ์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ๋ ์๋ฌด๋ฅผ ๋งก๊ณ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ธ๋์ ๊ด๋ จ๋ ๋ค์ํ ๋ฉํ๋ฐ์ดํฐ(์: ๋๊ธฐ ์๊ฐ, 4xx/5xx ์๋ต ์๋ ๋ฑ)๋ฅผ ์ถ์ ํ๊ณ ๋ถ๋ ์์์ ๊ฐ์ค์น W1..WN์ ํ ๋นํฉ๋๋ค. ๋์ ์คํ ์ ๋ต์ ์ง์ํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ N/N ๋ ธ๋ ์ค K๋ฅผ ๋ฌด์์๋ก ์ ํํ ์ ์์ด์ผ ํฉ๋๋ค. ์ ํ๋ ํ๋ฅ ์ ๋ ธ๋์ ๊ฐ์ค์น์ ๋น๋กํด์ผ ํฉ๋๋ค.
๋ ธ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํฉ๋๋ค. Big O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ์ถ์ ํฉ๋๋ค.
์ ๋ชจ๋ ๊ฒ์ด ์์ด๋ก ๋์ด ์์ต๋๊น?
์ด ํํ๋ก ํ์ ์ฐธ๊ฐ์๋ค์ด ๊ทธ๋ค๊ณผ ์ธ์ ๊ณ ์์ด๊ฐ Hydra์ ๊ณต์ ์ธ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ ์ ๋ค์๊ณผ ๊ฐ์ด ์๊ฒผ์ต๋๋ค.
์ข ์ด์ ์ฐํ์ ๊ฐ์ง๊ณ ์๊ฐํ๊ณ ์คํฌ์ผ๋ฌ๋ฅผ ์ฆ์ ์ด์ง ๋ง์ญ์์ค ๐
์๋ฃจ์ ๋ถ์(๋น๋์ค)
5๋ถ 53์ด๋ถํฐ ๋จ 4๋ถ๋ง:
๋ค์์ ํ๋ฆฝ ์ฐจํธ๋ฅผ ๊ฐ์ง ์ฌ๋๋ค์ด ํด๊ฒฐ์ฑ ์ ์ ์ํ ๋ฐฉ๋ฒ์ ๋๋ค.
์๋ฃจ์ ๋ถ์(ํ ์คํธ)
๋ค์ ์๋ฃจ์ ์ ํ๋ฉด์ ์์ต๋๋ค. ๋ชจ๋ ๋ณต์ ๋ณธ์ ๊ฐ์ค์น๋ฅผ ํฉ์ฐํ๊ณ , 0์์ ๋ชจ๋ ๊ฐ์ค์น์ ํฉ๊น์ง ๋์๋ฅผ ์์ฑํ ๋ค์, ๋ณต์ ๋ณธ ๊ฐ์ค์น์ ํฉ์ด 0์์ (i-1)๋ฒ์งธ๊ฐ ๋๋๋ก i-๋ ํ๋ฆฌ์นด๋ฅผ ์ ํํฉ๋๋ค. ์์์ ์ซ์๋ณด๋ค ์๊ณ 0์์ i๋ฒ์งธ๊น์ง ๋ณต์ ๋ณธ ๊ฐ์ค์น์ ํฉ์ด ๊ทธ๋ณด๋ค ํฝ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ๋ณต์ ๋ณธ์ ์ ํํ๊ณ ๋ค์ ๋ณต์ ๋ณธ์ ์ ํํ๋ ค๋ฉด ์ ํํ ๋ณต์ ๋ณธ์ ๊ณ ๋ คํ์ง ์๊ณ ์ ์ฒด ์ ์ฐจ๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์์ ํ๋์ ๋ณต์ ๋ณธ์ ์ ํํ๋ ๋ณต์ก๋๋ O(N)์ด๊ณ K๊ฐ ๋ณต์ ๋ณธ์ ์ ํํ๋ ๋ณต์ก๋๋ O(NยทK) ~ O(N2)์ ๋๋ค.
XNUMX์ฐจ ๋ณต์ก๋๋ ์ข์ง ์์ง๋ง ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ๊ตฌ์ถํ ๊ฒ์
๋๋ค.
ํนํ ํฐ K์ ๊ฒฝ์ฐ ์ ํ ๋ก๊ทธ ๋ณต์ก๋๊ฐ XNUMX์ฐจ ๋ณต์ก๋๋ณด๋ค ์ข์ต๋๋ค.
๋ฐ๋ก ์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ค
์์ 2. ์ผ๋ฃฉ๋ง
์์์ ์์ธํ๋์ง ์์ ํ๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ฌธ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ ฌํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํด์ผ ํ์ต๋๋ค.
๊ทํ์ ํ์ ์ค๋ฉ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐ๋ฐํ๋ ์๋ฌด๋ฅผ ๋งก๊ณ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ์ํฌ๋ก๋๋ ํฌ๊ธฐ M(๋ณดํต N < 100 << M)์ ์ปฌ๋ ์ ์์ ์์์(์ธ๋ฑ์ฑ๋์ง ์์) ์ซ์ ํ๋๋ก ์ ๋ ฌ๋ ์์ N๊ฐ์ ๋ฌธ์๋ฅผ ์ ํํ๋ ๊ฒ์ ๋๋ค. ์ฝ๊ฐ ๋ ์ผ๋ฐ์ ์ธ ์ํฌ๋ก๋๋ ์์ S ๋ฌธ์(S ~ N)๋ฅผ ๊ฑด๋๋ด ํ ์์ N์ ์ ํํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์คํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ์ญ์์ค. ํ๊ท ์ ์ธ ๊ฒฝ์ฐ์ ์ต์ ์ ๊ฒฝ์ฐ ์๋๋ฆฌ์ค์์ Big O ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ๋ณต์ก๋๋ฅผ ์ถ์ ํฉ๋๋ค.
์๋ฃจ์ ๋ถ์(๋น๋์ค)
34:50๋ถํฐ ๋จ 6๋ถ:
์๋ฃจ์ ๋ถ์(ํ ์คํธ)
ํ๋ฉด ์๋ฃจ์
: ๋ชจ๋ ๋ฌธ์ ์ ๋ ฌ(์:
๋ชจ๋ M ๋ฌธ์๋ฅผ ์ ๋ ฌํ ๋ค์ ๊ทธ ์ค ์ผ๋ถ๋ง ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋นํจ์จ์ ์์ด ๋ถ๋ช
ํฉ๋๋ค. ๋ชจ๋ ๋ฌธ์๋ฅผ ์ ๋ ฌํ์ง ์์ผ๋ ค๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ์ ํฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ญ์์ค.
๊ทธ๋ฌ๋ ํ ์คํธ๋ฆฌ๋ฐ์ ์ค์ ๋ก ๋ฃจํธ ์์์ ํ ๋ฒ ๋น๊ตํ ํ ํ์ ๋ค์ ๋น๋ํ์ง ์๊ณ ๋๋ถ๋ถ์ ๋ฌธ์๋ฅผ ๋ฒ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ๋ ํจ์จ์ ์ธ ๊ฒ์ผ๋ก ํ๋ช ๋์์ต๋๋ค. ์ด๋ฌํ ์ ๋ ฌ์ Kontur์์ ๊ฐ๋ฐ ๋ฐ ์ฌ์ฉ๋๋ Zebra ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ตฌํ๋ฉ๋๋ค.
๊ณผ์ 3. ์ํ ๊ตํ
์ํ ์ด๋์ ์ํ ๊ฐ์ฅ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํ๋ ๊ฒ์ด ํ์ํ์ต๋๋ค.
๊ทํ์ ํ์ N ๋ ธ๋์ ๋ถ์ฐ ํด๋ฌ์คํฐ๋ฅผ ์ํ ๋ฉ์ง ์ํ ๊ตํ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ฐํ๋ ์๋ฌด๋ฅผ ๋งก๊ณ ์์ต๋๋ค. i๋ฒ์งธ ๋ ธ๋์ ์ํ๋ (i+1)๋ฒ์งธ ๋ ธ๋๋ก, N๋ฒ์งธ ๋ ธ๋์ ์ํ๋ ์ฒซ๋ฒ์งธ ๋ ธ๋๋ก ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค. ์ ์ผํ๊ฒ ์ง์๋๋ ์์ ์ ๋ ๋ ธ๋๊ฐ ์์์ ์ผ๋ก ์ํ๋ฅผ ๊ตํํ ๋ ์ํ ๊ตํ์ ๋๋ค. ์ํ ๊ตํ์๋ M๋ฐ๋ฆฌ์ด๊ฐ ์์๋๋ ๊ฒ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค. ๋ชจ๋ ๋ ธ๋๋ ์ฃผ์ด์ง ์๊ฐ์ ๋จ์ผ ์ํ ๊ตํ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
ํด๋ฌ์คํฐ์ ์๋ ๋ชจ๋ ๋ ธ๋์ ์ํ๋ฅผ ์ ์กํ๋ ๋ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฝ๋๊น?
์๋ฃจ์ ๋ถ์(ํ ์คํธ)
ํ๋ฉด ์๋ฃจ์ : ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ ์์์ ์ํ๋ฅผ ๊ตํํ ๋ค์ ์ฒซ ๋ฒ์งธ์ ์ธ ๋ฒ์งธ, ์ฒซ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋ฑ์ ์ํ๋ฅผ ๊ตํํฉ๋๋ค. ๊ฐ๊ฐ์ ๊ตํ ํ ํ ์์์ ์ํ๋ ์ํ๋ ์์น์ ์๊ฒ ๋ฉ๋๋ค. O(N) ์์ด์ ๋ง๋ค๊ณ O(N M) ์๊ฐ์ ์๋นํด์ผ ํฉ๋๋ค.
์ ํ ์๊ฐ์ ๊ธธ๊ธฐ ๋๋ฌธ์ ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ, ์ธ ๋ฒ์งธ์ ๋ค ๋ฒ์งธ ๋ฑ ์์ผ๋ก ์์์ ์ํ๋ฅผ ๊ตํํ ์ ์์ต๋๋ค. ๊ฐ ์ํ ๊ตํ ํ ๋ชจ๋ ๋ ๋ฒ์งธ ์์๊ฐ ์ฌ๋ฐ๋ฅธ ์์น์ ์๊ฒ ๋ฉ๋๋ค. O(lg N) ์์ด์ ๋ง๋ค๊ณ O(M lg N) ์๊ฐ์ ๋ณด๋ด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ ํ์ด ์๋๋ผ ์ผ์ ํ ์๊ฐ์ ํจ์ฌ ๋ ํจ์จ์ ์ผ๋ก ๋ณ์์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒํ๋ ค๋ฉด ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ์ฒซ ๋ฒ์งธ ์์์ ์ํ๋ฅผ ๋ง์ง๋ง ์์๋ก, ๋ ๋ฒ์งธ ์์๋ฅผ ๋์์ ๋ ๋ฒ์งธ ์์๋ก ๊ตํํด์ผ ํฉ๋๋ค. ๋ง์ง๋ง ์์์ ์ํ๋ ์ฌ๋ฐ๋ฅธ ์์น์ ์๊ฒ ๋ฉ๋๋ค. ์ด์ ๋ ๋ฒ์งธ ์์์ ์ํ๋ฅผ ๋ง์ง๋ง ์์์ ๊ตํํ๊ณ ์ธ ๋ฒ์งธ ์์๋ฅผ ๋ ๋ฒ์งธ ์์์ ๊ตํํด์ผ ํฉ๋๋ค. ์ด ๊ตํ ๋ผ์ด๋ ํ์ ๋ชจ๋ ์์์ ์ํ๊ฐ ์ฌ๋ฐ๋ฅธ ์์น์ ์๊ฒ ๋ฉ๋๋ค. ์ด O(2M) ~ O(1) ์์ด์ด ์์ต๋๋ค.
๊ทธ๋ฌํ ํด๊ฒฐ์ฑ ์ ํ์ ์ด ๋ ๊ฐ์ ์ถ ๋์นญ์ ๊ตฌ์ฑ์ด๋ผ๋ ๊ฒ์ ์ฌ์ ํ ๊ธฐ์ตํ๋ ์ํ์์๊ฒ๋ ์ ํ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๊ทธ๊ฒ์ ํ๋๊ฐ ์๋๋ผ K < N ์์น๋ก ์ด๋ํ๋ ๊ฒ์ ๋ํด ์ฌ์ํ๊ฒ ์ผ๋ฐํ๋ฉ๋๋ค. (์ ํํ ๋๊ธ์ ์ ์ด์ฃผ์ธ์.)
ํผ์ฆ์ ์ข์ํ์ต๋๊น? ๋ค๋ฅธ ์๋ฃจ์ ์ ์๊ณ ๊ณ์ญ๋๊น? ์๊ฒฌ์ ๊ณต์ ํ์ญ์์ค.
๋ง์ง๋ง์ผ๋ก ๋ช ๊ฐ์ง ์ ์ฉํ ๋งํฌ๊ฐ ์์ต๋๋ค.
- ์์ธํ ์์๋ณด๊ธฐ
์ธํ๋ผ ๊ฐ๋ฐ ์ค๊ณฝ์ - ๋ด๋ถ ๊ธฐ๋ก ์ฐธ์กฐ
๋ณด๊ณ ์๊ฐ ์๋ ์ ๋จ์ง ๋ถ์ฐ ์์คํ ์ ๋ณด - ๋น๋์ค ๊ฐ์ ์๋ฆฌ์ฆ ๋ณด๊ธฐ
ํ๋ฒํ ์ฌ๋๋ค์ ์ํ ํน์ดํ ์๊ณ ๋ฆฌ์ฆ ยป - ์ฐ๋ฆฌ์ ๊ตฌ๋
์ ๋ณด์ ์ฑ๋
์ถ์ฒ : habr.com