Range Sum (๊ตฌ๊ฐ ํฉ)
๊ฐ๋
ํฉ ๋ฐฐ์ด์ ์ด์ฉํด ์๊ฐ ๋ณต์ก๋๋ฅผ **O(N) โ O(1)**๋ก ์ค์ด๋ ์๊ณ ๋ฆฌ์ฆ
ํต์ฌ ์ด๋ก
1. ํฉ ๋ฐฐ์ด S ์ ์
S[i] = A[0] + A[1] + A[2] + ... + A[i] // A[0]๋ถํฐ A[i]๊น์ง์ ๋์ ํฉ
2. ํฉ ๋ฐฐ์ด ์์ฑ ๊ณต์
S[i] = S[i-1] + A[i]
3. ๊ตฌ๊ฐ ํฉ ๊ณ์ฐ ๊ณต์
A[i]๋ถํฐ A[j]๊น์ง์ ํฉ = S[j] - S[i-1]
์์
์๋ณธ ๋ฐฐ์ด
A = [3, 6, 5, 10, 4]
ํฉ ๋ฐฐ์ด ์์ฑ
S[0] = 3
S[1] = 3 + 6 = 9
S[2] = 9 + 5 = 14
S[3] = 14 + 10 = 24
S[4] = 24 + 4 = 28
๊ฒฐ๊ณผ: S = [3, 9, 14, 24, 28]
๊ตฌ๊ฐ ํฉ ๊ณ์ฐ ์์
A[2]๋ถํฐ A[4]๊น์ง์ ํฉ์ ๊ตฌํ๋ ค๋ฉด:
- ์ง์ ๊ณ์ฐ: 5 + 10 + 4 = 19
- ๊ตฌ๊ฐ ํฉ ํ์ฉ:
S[4] - S[1] = 28 - 9 = 19
์ฅ์
- ์๊ฐ ๋ณต์ก๋: O(1)๋ก ๋น ๋ฅธ ๊ณ์ฐ
- ํจ์จ์ฑ: ์ฌ๋ฌ ๊ตฌ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋ณต ์ฒ๋ฆฌํ ๋ ์ ์ฉ
- ์ ์ฒ๋ฆฌ: ํ ๋ฒ๋ง ํฉ ๋ฐฐ์ด์ ์์ฑํ๋ฉด ๋จ
ํต์ฌ ์์ด๋์ด
ํฐ ๊ตฌ๊ฐ์ ๋์ ํฉ์์ ์์ ๊ตฌ๊ฐ์ ๋์ ํฉ์ ๋นผ๋ฉด ํน์ ๊ตฌ๊ฐ์ ํฉ์ ๊ตฌํ ์ ์๋ค.
Q ๋ฐฐ์ด์ ๊ฐ์ด ์์ฃผ ๋ฐ๋๋ฉด?
๊ตฌ๊ฐ ํฉ์ ํ๊ณ
๋ฐฐ์ด ๊ฐ์ด ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ:
- ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ํฉ ๋ฐฐ์ด S๋ฅผ ์ ์ฒด ์ฌ๊ณ์ฐ ํด์ผ ํจ
- ์๊ฐ ๋ณต์ก๋: O(N) (๋นํจ์จ์ )
ํด๊ฒฐ์ฑ
1. Segment Tree (์ธ๊ทธ๋จผํธ ํธ๋ฆฌ)
- ๊ตฌ์กฐ: ์์ ์ด์ง ํธ๋ฆฌ
- ์ ๋ฐ์ดํธ: O(log N)
- ๊ตฌ๊ฐ ํฉ ์ฟผ๋ฆฌ: O(log N)
- ํน์ง: ๊ตฌ๊ฐ ํฉ๋ฟ๋ง ์๋๋ผ ์ต์๊ฐ, ์ต๋๊ฐ ๋ฑ ๋ค์ํ ์ฐ์ฐ ์ง์
2. Index Tree (์ธ๋ฑ์ค ํธ๋ฆฌ) = Fenwick Tree
- ๊ตฌ์กฐ: ๋ฐฐ์ด ๊ธฐ๋ฐ์ ํธ๋ฆฌ ๊ตฌ์กฐ
- ์ ๋ฐ์ดํธ: O(log N)
- ๊ตฌ๊ฐ ํฉ ์ฟผ๋ฆฌ: O(log N)
- ํน์ง: ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ , ๊ตฌํ์ด ๊ฐ๋จ