[Algorithm] R-Tree
R-Tree๋ B-Tree์ ๋ณ์ข
์ด๋ผ๊ณ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ค.
R์ Rectangle์ ์ถ์ฝ์ด๋ค.
์ด๊ฑด ์ง๋ฆฌ์ ์ธ ์ขํ ํ๋ฉด ๊ธฐ๋ฐ์ผ๋ก ๊ทผ์ ํ ์์๋ค์ ์ฐพ๋ ๊ฒ์ ์ต์ ํ๋์ด์๋ค.
์ฝ๊ฒ ์๋ฅผ ๋ค์๋ฉด, "ํ์ฌ ์์น์์ 50km ์ด๋ด์ ์๋น์ ์ ๋ถ ๋น ๋ฅด๊ฒ ์ฐพ์์ค๋" ๊ธฐ๋ฅ ๊ฐ์ ๊ฒ์ ๊ตฌํํ๋ ๋ฐ์ ์ด๋ค.
๊ธฐ๋ณธ ์๋ฆฌ
๊ณต๊ฐ์ ์ต์ ๊ฒฝ๊ณ ์ฌ๊ฐํ(MBR, Minimum Bounding Rectangle)์ด๋ผ๋ ์ฌ๊ฐํ ์์ญ์ ์ ์ํ๊ณ , ์ด๋ฅผ ํตํด ์ธ์ ์์ญ์ ํ๋ณํ๋ค.
๊ฐ๊ฐ์ MBR์ ๋ค๋ฅธ MBR์ ์ํ๊ฑฐ๋ ๊ฒน์น ์ ์๊ณ , ์ด๋ฅผ ํตํด ํฌํจ์ด๋ ๊ต์ฐจ, ์ธ์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค.
์ด๊ฒ๋ ๋ฃจํธ ๋
ธ๋์์ ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด์ ์ผ์นํ๊ฑฐ๋ ๊ฐ๊น์ด ์์ธ ์ขํ ๊ฐ์ ์ฐพ์๊ฐ๋ ํํ๋ก ๋์ํ๋ค.
๊ทธ๋ฆฌ๊ณ B-Tree์ ๋ง์ฐฌ๊ฐ์ง๋ก, Tree level์ ํ์์ ์ํ ์ค๊ฐ ๋จ๊ณ์ผ ๋ฟ์ด๊ณ ๋ชจ๋ ์ค์ ๋ฐ์ดํฐ๋ leaf ๋ ธ๋์๋ง ์์นํ๋ค. ๊ทธ๋์ ์บ์๋ฅผ ์ ํ๋ ํธ์ด๋ค.
B-Tree์ฒ๋ผ ๋ฐธ๋ฐ์ค ๊ด๋ฆฌ๋ ๊ธฐ๋ณธ์ผ๋ก ํด์ผํ๋ค.
๊ทธ๋์ ์ฝ์
/์ญ์ ์๋ง๋ค Split/Merge๊ฐ ๋น๋ฒํ๊ฒ ์ผ์ด๋๋ค.
๋ณต์ก๋
์ ์ด์ ์๊ตฌ์ฌํญ ์์ฒด๊ฐ ๋น๋ํ๋ค๋ณด๋ B-Tree ์ฒ๋ผ ๋น ๋ฅธ ์ฑ๋ฅ (O(log N)) ๋ณด์ฅ์ ์๋๋ค.
ํ์ ์ฑ๋ฅ์ ํ๊ท O(log N), ์ต์
O(N)์ด๋ค. ์ฝ์
๋ ์ต์
O(N)์ด๋ค.
๋ณํ
R-Tree์ ๋จ์ ์ ๊ฐ์ ํ ๋ณํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก R+Tree, R*ํธ๋ฆฌ๊ฐ ์๋ค.
์ด๋ฆ ์ง๋ ๊ผฌ๋ผ์ง๊ฐ ์ ์ด๋ฐ๊ฑด์ง
์ฌ์ฉ์ฌ๋ก
๋ง์ ์ขํ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ๋ค์ด R-Tree๋ R-Trer์ ๋ณํ์ ์ฌ์ฉํ๋ค. GIS ๊ณ์ด๋ค์ ๊ฑฐ์ ๋ค ๊ทธ๋ ๋ค.
์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ณต๊ฐ ๊ธฐ๋ฐ ๊ฒ์์ ์ํด R-Tree ํ์
์ธ๋ฑ์ค๋ฅผ ์ง์ํ๋ค.
PostgreSQL์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค ํ์
์ผ๋ก R-Tree๋ฅผ ์ง์ํ๋ค.
MySQL์ Spatial Index์ ๊ณต๊ฐ ๊ฒ์์ ์ํ R-Tree ๊ธฐ๋ฐ ์ธ๋ฑ์ค๋ค.
๋ํ์ ์ธ ์ขํ ๊ฒ์ ํ๊ฒฝ์ธ PostgreSQL/PostGIS๋ R-Tree ๊ธฐ๋ฐ์ GIS ๊ตฌํ์ฒด๋ค.
์ญ์ฃผ
https://en.m.wikipedia.org/wiki/R-tree
https://www.postgresql.org/docs/8.1/indexes-types.html
https://gis.stackexchange.com/questions/263370/postgis-r-tree-why-does-it-exist-when-postgresql-already-implements-its-r-tree