1. Segment Tree
๋ถ๋ถํฉ ๋ฌธ์ ์์ ์์ฉ ๊ฐ๋ฅ
์์ฑ ์ฝ๋
2. ํฉ์ ๊ตฌํ๋ ์ฝ๋
[start, end]์ ํฉ์ ๊ตฌํ๋ ค๋ฉด ๋ฃจํธ๋ถํฐ ์์ํ์ฌ ๋ค์์ ์ ๊ฒํ๋ค. ๋ ธ๋๊ฐ ๋ํ๋ด๋ ๊ตฌ๊ฐ์ด [left, right]๋ผ๋ฉด ๋ค์์ 4๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฐ ๊ฒฝ์ฐ๋ง๋ค ์ฒ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
(1) [start, end]์ [left, right]๊ฐ ๊ฒน์น์ง ์์
-> ํ ์ผ์ด ์๋ค
(2) [start, end]๊ฐ [left, right]๋ฅผ ํฌํจ
-> ๋ฏธ๋ฆฌ ๊ตฌํด๋ [left, right]์ ํฉ์ ์ฌ์ฉํ๋ค.
(3) [start, end]๋ฅผ [left, right]๊ฐ ํฌํจ
-> ๋ ์์ ๋ ธ๋์ ๋ํด์ ์ ํํ ์ด๋ ๋ ธ๋๊ฐ [left, right]๋ฅผ ํฌํจํ๋์ง ์ฐพ๋๋ค.
(4) [start, end]๊ฐ [left, right]์ ํฌํจ๊ด๊ณ๋ ์์ง๋ง ๊ฒน์นจ
-> ๋ ์์ ๋ ธ๋์ ๋ํด์ ์ ํํ ์ด๋ ๋ ธ๋๊ฐ [left, right]๋ฅผ ํฌํจํ๋์ง ์ฐพ๋๋ค.
์์ ) Sum(2,8) = ?
3. ๊ฐฑ์ (update)
index์์น์ ์๋ฅผ diff๋งํผ ๋ฐ๊พธ์๋ค๋ฉด ํธ๋ฆฌ๋ Top-down ํ์์ผ๋ก ๊ฐฑ์ ํ๋ค.
๋ฃจํธ์์ node=1์ด๊ณ , ์ด ๋ ธ๋๋ [start, end] ๊ตฌ๊ฐ์ ํฉ์ ์ ์ฅํ๋ค.
index๊ฐ [start, end] ๋ฒ์ ์์ ์๋ค๋ฉด ๊ณ ๋ คํ ํ์๊ฐ ์๊ณ ,
๋ฒ์์ ์๋ค๋ฉด ์ด ๋ ธ๋์ ์ ์ฅ๋ ๊ฐ์ diff๋งํผ ๋๋ฆฌ๊ณ , ๋๊ฐ์ ๊ณผ์ ์ ์ผ์ชฝ/์ค๋ฅธ์ชฝ ์์์ ๋ฐ๋ณตํ๋ค.
4. ์ ์์ ์ ๋ถ ์ ์ธ๊ธฐ
๊ตฌ๊ฐ [0,N] ์์ ์ ๋ถ n๊ฐ๊ฐ ์ฃผ์ด์ง๊ณ , ๊ฐ์ฅ ๋ง์ด ์ค๋ณต๋๋ ์ ๋ถ์ ์๋ฅผ ์ฐพ๋ ๋ฌธ์
(1) brute force -> ๊ฐ ์ ๋ง๋ค ์์ ์๋ฅผ ์ง๋๋ ์ ๋ถ์ ์ ์ธ๊ธฐ : O(Nn)
(2) line sweeping -> O(n log n)
๊ตฌ๊ฐ์ ๋๋ง๋ค ์ ๋ถ์ด ์์ํ๋ฉด +1, ๋๋๋ฉด -1์ ํด์ค๋ค
2 : +1
5 : +1
11 : -1
11 : -1
...
72 : +1
85 : +1
์ด๋ ๊ฒ ์ํ๋ฅผ ํด์ฃผ๋ฉด ๊ฐ ๊ตฌ๊ฐ์ ๋ถ๋ถํฉ์ด ๊ตฌํด์ง๋ค. ์ด ๊ฐ์ด ๊ฐ์ฅ ํฐ ๊ตฌ๊ฐ์ด ๊ฐ์ฅ ๋ง์ ์ ๋ถ์ด ์ค๋ณต๋๋ ๊ตฌ๊ฐ์ด๋ค.
๋ผ์ธ์ค์ํ ์ ์ ๋ ฌํ๋๋ฐ O(n log n), start์ +1์ ํ๊ณ end์์ -1์ ํด์ฃผ๋๋ฐ 2๋ฒ ์ํํ๋ฏ๋ก O(2n).
์ด O(n log n) ์์.
(3) ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ : O(n log n)
๊ตฌ๊ฐ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๊ณ , ๊ตฌ๊ฐ ์ฌ์ด ์ ๋ถ์ ๊ฐ์๋ฅผ ๋ฌป๋๋ค๋ฉด?
๋ชจ๋ ์ ๋ถ์ ํ์ํ๊ธฐ ์ํด ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ์ด์ฉํจ.
๋ ธ๋๋ฅผ ๊ตฌ๊ฐ์ผ๋ก ์ก์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ง๋ค๊ณ , ์ ๋ถ์ ์ ์ฅํ๋ค
set์ ์ฐ๋ ์ด์ ๋ ์ค๋ณต ์ ๊ฑฐ๊ฐ ๋๋ฏ๋ก ๊ฐ์ ๊ตฌ๊ฐ์ด ๊ฒน์น๋คํด๋ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๊ธฐ ๋๋ฌธ.
inserting์ ํ ๋๋ ํด๋น ์ ๋ถ์ ๋ฑ ๋ง๊ฒ ํฌํจํ๋ ๋ง์ง๋ง ๊ตฌ๊ฐ๊น์ง ๋ด๋ ค๊ฐ๋ฉด์ ํ์ํ๋ฉด ๋๋ค
ํด๋น ์ ๋ถ์ ํฌํจํ์ง ์๋ ์์์๋ ์ง์ํ์ง ์๋๋ค.
์ค๊ฐ์ ๊ตฌ๊ฐ์ด ๋๋ ์๋ ์๋๋ฐ, ๊ทธ๋ผ ๋ ๊ตฌ๊ฐ์ ๋ชจ๋ ์ ์ฅํ๋ค.
O(n log n) = ํธ๋ฆฌ ์์ฑ ์๊ฐ
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ ํ์ํ๋ฉด์ ์ง๋๊ฐ ์ ๋ถ ์๋ฅผ ์ธ๋๋ฐ์ O(n), ์ด O(n log n)
5. ๋๋ค๋ฅธ ๋ฌธ์ : ์ ์์ ๊ฐ์ฅ ๊ธด ์ ๋ถ
abs(์ผ์ชฝ๊ฐ - ์ค๋ฅธ์ชฝ๊ฐ)์ผ๋ก ์ ๋ถ์ ๊ธธ์ด๋ฅผ ๊ตฌํ ์ ์๋ค.
ex: ์ 24 ์์ ๊ฐ์ฅ ๊ธด ์ ๋ถ?
-> 24๋ฅผ ํฌํจํ๋ ๊ตฌ๊ฐ์ธ 23,25 ์์ ๊ฐ์ฅ ๊ธด ์ ๋ถ์ด ๋ต์ด ๋๋ค.
๊ตฌ๊ฐ์ ํฌํจ๋๋ ์ ๋ถ์ 2๊ฐ์ธ๋ฐ, abs(17-31) < abs(23-53) ์ด๋ฏ๋ก [23, 53]์ด ์ต์ฅ์ ๋ถ์ด๋ค.
์ ๋ถ์ด n๊ฐ ์์ผ๋ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ leaves = O(n)
๋ ธ๋ ์ = O(n)
๋์ด = O(log n)
ํ๋์ ์ ๋ถ์ ์ต๋ O(log n)๊ฐ์ ๋ ธ๋์ ์ ์ฅ
์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ = O(n log n) = ํธ๋ฆฌ ์์ฑ ์๊ฐ
์ ์ ์ฐพ๋๋ฐ์ O(log n), ์ด O(n log n)
'๐ ์ ๊ณต ๊ณต๋ถ > ๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 8. ์๋ก์์ธ ์งํฉ์ ํํ (Disjoint Sets) (0) | 2023.06.16 |
---|---|
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 7. ์ด๋ถ ํ์ (0) | 2023.04.19 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 5. ์์ฌ์์ด ๊ธฐ๋ฒ (0) | 2023.04.17 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 4. ์๋ฃ๊ตฌ์กฐ2 (0) | 2023.04.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 3. ์๋ฃ๊ตฌ์กฐ1 (0) | 2023.04.16 |