ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป๐ป ๊ธ์น์ด ํํฐ๋ง ๊ธฐ๋ฅ์ ๋ถ์ํ๊ณ ๋ฆฌํฉํ ๋ง ํด๋ณด์! (1) - Trie ์๋ฃ๊ตฌ์กฐ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ๋ถ์
junojuno 2024. 5. 15. 01:12๐ Overview
Space club ํ๋ก์ ํธ๋ฅผ ์งํํ ๋น์, ๊ฐ ํด๋ฝ ๋ณ ๊ฒ์๊ธ์ ์์ฑํ๊ฑฐ๋ ๊ณต์ง, ๋๊ธ๋ฑ์ ์์ฑํ ๋ ๊ธ์น์ด๊ฐ ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์์ฑ์ ์คํจํ๋ค๋ ๋ชจ๋ฌ์ ๋ณด์ฌ์ฃผ๋ฉฐ ์์ฑ์ ์คํจํ๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ์๋ค.
์ด๋, ์ ๋ ฅ๋ฐ๋ ๊ฐ์ ๊ธ์น์ด๋ฅผ ์ฐพ๋ ๊ณผ์ ์ ์์ด์ Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ๋์ ์๊ฐํ๋ก์ธ์ค๋ฅผ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํ๋ค.
๋ํ, ํ์ฌ ํ๋ก์ ํธ ์ฝ๋๋ ๋ฒจ์์์ ๋ฌธ์ ์ ์ ์๋์ง ๊ณ ์ณ ๋ณด๋ ค ํ๋ค.
๐ญ ์๋ฃ๊ตฌ์กฐ / ์๊ณ ๋ฆฌ์ฆ ์ ํํ๊ธฐ!
๋จผ์ ์ฐ๋ฆฌ๋ ์ง๊ธ ๊ตฌํํด์ผํ๋๊ฒ์ด ํน์ ๋ฌธ์์ด์ด ์ฃผ์ด์ก์ ๋, ํด๋น ๋ฌธ์์ด์ ๊ธ์น์ด๊ฐ ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์ถ๋ค.
๋จผ์ , ๊ธ์น์ด๋ฅผ List ์๋ฃ๊ตฌ์กฐ๋ก ์ ์ฅํด ๋๊ณ ๋น๊ต๋ฅผ ํ๋ค๋ฉด, ๊ธ์น์ด List ํฌ๊ธฐ๊ฐ N์ด๊ณ , ์ ๋ ฅ๋ฐ๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ M์ผ๋,
์๊ฐ๋ณต์ก๋๋ O(MN)์ด ๋๋ค.
์ด๋, ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ์์์ง ๊ณ ๋ฏผํ๋ค.
๋ฌธ์์ด ๊ด๋ จ ์๊ฐ๋ณต์ก๋..? ์๊ณ ๋ฆฌ์ฆ?
๋จผ์ ๋จธ๋ฆฌ์์ ๋ ์ค๋ฅธ๊ฑด ์๊ณ ๋ฆฌ์ฆ ํ์ต ์ ํ์ตํ๋ KMP ์๊ณ ๋ฆฌ์ฆ์ด์๋ค.
๋คํํ KMP ์๊ณ ๋ฆฌ์ฆ์ ์์ ์ ์๊ณ ๋ฆฌ์ฆ์ ํ์ตํ๋ฉฐ ์ ๋ฆฌํด ๋์ ๊ธ์ด ์์ด [์ฌ๊ธฐ]๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค!
[KMP ์๊ณ ๋ฆฌ์ฆ์ ํ๊ณ]
ํ์ง๋ง ์ด KMP ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ๊ธด ํจํด์ ๋๋์ ํ ์คํธ์์ ๊ฒ์ํ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์ด๋ค.
๋ฌธ์์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํด์ ๋ ์ฌ๋ ค๋ดค์ง๋ง, KMP ์๊ณ ๋ฆฌ์ฆ์
์ฐ๋ฆฌ๊ฐ ๊ธ์น์ด ๊ฐ์๊ฐ N์ผ๊ฒฝ์ฐ, N๋ง๋ค O(M+ P)์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฌ๊ธฐ์ (P๋ ๊ธ์น์ด์ ๊ธธ์ด) ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ ๋๋ต์ ์ผ๋ก O(MN)์ด ๋๋ค. โก ํจ๊ณผ ์์
[ํด๊ฒฐ์ฑ : ๊ฒ์ํ์!]
๊ทธ๋์ ๋๋ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ๋์ง ์ฐพ์๋ณด์๊ณ , Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์์ด ๊ฒ์์ ํจ์จ์ ์ธ ๊ฒ์ ์ ์ ์์๋ค.
์ถ๊ฐ๋ก, ์ํธ์ฝ๋ผ์(Aho-Corasick) ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ๊ฒ์ ์๊ฒ๋์๊ณ , ์ด๋ฒ์ ๊ณต์ ํด ๋ณด๊ณ ์ ํ๋ค.
๐ณ Trie ์๋ฃ ๊ตฌ์กฐ๋
ํธ๋ผ์ด๋ ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ฐ ๋ ธ๋๋ ๋ฌธ์ ํ๋์ ๋ฌธ์์ด ์์ฑ ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ฉฐ, ํธ๋ผ์ด๋ฅผ ์ด๋ค ๊ฒฝ๋ก๋ก ํ๊ณ ๋ด๋ ค๊ฐ๋์ง์ ๋ฐ๋ผ ๋ฌธ์์ด์ด ์กฐํฉ๋๋ค.
์ Tree์๋ฃ๊ตฌ์กฐ์์ ์ด์ง ๊ฒ์์ผ๋ก ํน์ ๋ ธ๋๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ O(logN)์ ์๊ฐ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฐ๋ค.
ํ์ง๋ง ์ ์๊ฐ ์๋ ๋ฌธ์์ด์ ๊ฒ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
๋ ธ๋์ ์๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ M์ผ๋, ์๊ฐ๋ณต์ก๋๋ O(MlogN)์ด ๋๋ค. (์ ๋ ฌ๋ ๋ฌธ์๋ฅผ ์ฐพ๊ณ , ๋ฌธ์์ด์ ์ํํด์ผ ํ๊ธฐ ๋๋ฌธ์)
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ Trie๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์ ์๋๋ฐ,
Trie ์๋ฃ๊ตฌ์กฐ๋ ํ๋์ ๋ ธ๋๊ฐ 26๊ฐ(์ํ๋ฒณ)*2(๋์๋ฌธ์) + ์ซ์ (0~9) ์ด 62๊ฐ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์ ์ฅํด๋๋๋ค๋ฉด, ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ M์ผ๋, ๊ฒ์์ O(M + K)์ ์๊ฐ์ผ๋ก ์ฐพ์ ์ ์๋ค. (K๋ ์ ๋ ฅ ๋ฌธ์์ด์ ํฌํจ๋ ๊ธ์น์ด ์ด ๊ธธ์ด)
์ด Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ๋ค์์ ๊ธ์น์ด๋ฅผ ํ๋ฒ์ ์ ๋ ฅ ๋ฌธ์์ด ์ค์บ๋ง์ผ๋ก ๊ฒ์ฌ์ ํ ์ ์๋ค!
๋ฐ๋ผ์ ์ด๋ฌํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ฐ๋ฆฌ ์๋น์ค์ ๊ธ์น์ด ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋์ ํ๋ค.
๐ค ์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ด๋? (Aho-Corasick Algorithm)
์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ญ์ง ์ฐพ์๋ณด๋, KMP ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋์ผ ๋ฌธ์์ด ํจํด ๋งค์นญ ์๊ณ ๋ฆฌ์ฆ์ด์๋ค๋ฉด, ์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ผ๋๋ค ๋ฌธ์์ด ํจํด๋งค์นญ์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ KMP ์๊ณ ๋ฆฌ์ฆ์ ํ์ฅ์ด๋ฉฐ, ๋ฉ์ปค๋์ฆ์ ๋น์ทํ๋ค๊ณ ํ๋ค.
KMP ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌธ์์ด๊ณผ ๋ฌธ์์ด๊ฐ์ ๋งค์นญ์ด๋ผ๋ฉด, ์ํธ ์ฝ๋ผ์์ ๋ฌธ์์ด๊ณผ ํธ๋ผ์ด ๊ฐ์ ๋งค์นญ์ด๋ค.
์๋ฆฌ๋, ๋ค์๊ณผ ๊ฐ์ ํธ๋ผ์ด๊ฐ ์์ ๋, (S๋ ์ ๋ ฅ๋ฐ๋ ๋ฌธ์์ด, W๊ฐ ๊ธ์น์ด ๋ชฉ๋ก๋ค์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค)
์๋์ ๊ฐ์ด ๋ฌธ์์ด S๋ฅผ ๋๋ฉด์ ๊ธ์น์ด ์ฌ๋ถ๋ฅผ ํ๋ณํ๋๋ฐ, ๋งค์นญ์ ์คํจ ํ์ ๊ฒฝ์ฐ ํฌ์ธํฐ๋ฅผ ์คํจํ ๋ฌธ์ ์ ๊น์ง์ ์ผ์นํ ๋ฌธ์์ด์ ๋ํด ์ ๋์ฌ์ ์ ๋ฏธ์ฌ๊ฐ ๊ฐ์ ์ง์ ์ผ๋ก ์ด๋์ํจ๋ค.
์ ๊ฒฝ์ฐ ๋งค์นญ์ด ์คํจ ํ์ ๊ฒฝ์ฐ ๊ฐ๋ฆฌํค๋ ์ง์ ์ ์ด๋์ํค๋ fail ํจ์๋ฅผ ํตํด ํฌ์ธํฐ๋ฅผ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ๊ฐ ๊ฐ์ ์ง์ ์ธ a (5๋ฒ ์ธ๋ฑ์ค)๋ก ์ด๋์ํจ๋ค.
์๊ฐ๋ณต์ก๋๋ฅผ ๋ฐ์ ธ๋ณด์๋ฉด, Trie๊ฐ ๋ง๋ค์ด์ ธ ์๋ ์ํฉ์์, ์ ๋ ฅ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ M์ด๊ณ , ๋ฌธ์์ด์์ ๋ฐ๊ฒฌ๋ ํจํด(๊ธ์น์ด) ๋ฐ์ ํ์๊ฐ Z์ผ๋, ์๊ฐ๋ณต์ก๋๋ O(M+Z)๊ฐ ๋๋ค.
๐ฅธ Trie ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํํ๊ธฐ
์ ๊ทธ๋ผ ์ด๊ฑธ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์.
์ฐพ์๋ณด๋, ์๋ฐ์์๋ Trie์ ๋ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ์ง ์๋๋ค. (Python ๊ฒฝ์ฐ ์ ๊ณตํ๋ค๊ณ ํ๋ค)
์ด๊ฑธ ๊ตฌํํ ์๋ ์๊ฒ ์ผ๋ ๋งค์ฐ ํจ์จ์ด ๋ฎ์ ๊ฒ์ด๋ค. ๊ทธ๋์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ๋ง๋ค์ด ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ฉด ๋๋ค๊ณ ํ๋จํ๋ค.
๋จผ์ ํ์์ด ํ๋ก์ ํธ ์งํ ๋น์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
https://github.com/npgall/concurrent-trees
GitHub - npgall/concurrent-trees: Concurrent Radix and Suffix Trees for Java
Concurrent Radix and Suffix Trees for Java. Contribute to npgall/concurrent-trees development by creating an account on GitHub.
github.com
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Concurrent Radix Tree์ Concurrent Suffix Tree๋ฅผ ์ ๊ณตํ๋ค.
README์ document๋ฅผ ๋ณด๋ ์ฐ๊ธฐ์์ ์ ๋ํด์๋ lock ๊ฑธ๊ธฐ์ thread์ blocking์ด ์ผ์ด๋์ง๋ง, ์ฝ๊ธฐ์์ ์ ๋ํด์๋ lock์ ๊ฑธ์ง์๋๋ค๊ณ ํ๋ค.
์ด๋ ๊ฒ Trie ๊ตฌ์กฐ์ ๋ํด์ ์ถ๊ฐํ ๋ ๊ตฌ์กฐ๋ฅผ ์์์ ๋ฐ๊ฟ์ฃผ๊ณ , ๋์์ฑ๊น์ง ๋ณด์ฅํด์ค๋ค๋ ๋์ ์ผ๋ก ์ด์์ค์ธ ํธ๋ผ์ด์ ๊ธ์น์ด๋ฅผ ์ถ๊ฐ ํ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
๊ทธ๋ผ Radix Tree์ Suffix Tree๋ ๋์ฒด ๋ญ๊น?๐ง
๐ฒ Radix Tree์ ๋ํด์
Radix Tree๋ ์ ๊ทธ๋ฆผ ์ฒ๋ผ, ๊ณตํต ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ๋ ํค๋ค์ ํ๋์ ๊ฒฝ๋ก๋ก ์์ถํด ์ ์ฅํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์จ์ ์ค์ธ๋ค.
Node์ ๊น์ด๊ฐ ์์์ง๊ธฐ์, ๊ฒ์ ๊ฒฝ๋ก๊ฐ ์งง์์ง๊ณ ๊ฒ์ ์๊ฐ์ด ๋จ์ถ๋๋ค.
์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ๋ณด๋ฉด, Radix Tree๋ Radix Tree, Reveresed Radix Tree, Inverted Radix Tree๋ก ๋๋๋๋ฐ
์ฌ์ฉ ์์์ document๋ฅผ ๋ณด๊ณ ์ด๋ ๊ฒฝ์ฐ์ ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์์ง ์ ์ ์์๋ค.
Radix Tree๋ key์ ์ ํํ ์ผ์นํ๋์ง, ๊ทธ๋ฆฌ๊ณ ํน์ ํค๋ก ์์ํ๋ ๋จ์ด๋ฅผ ์ฐพ์๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
Reversed Radix Tree๋ ๋ฐ๋๋ก ์ด๋ค ํค๋ก ๋๋๋์ง ์๊ณ ์ถ์๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
Inverted Radix Tree๋ ์ธ๋ถ ๋ฌธ์์์ ํฌํจ๋ ํน์ ํค์๋๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ฐ๋ผ์ ๋ด๊ฐ ์ฌ์ฉํ๋ ์ ๋ ฅ ๋ฐ์ ๋ฌธ์์ด์ ํฌํจ๋ ๊ธ์น์ด๋ค์ ์ฐพ์ผ๋ ค ํ๋ค๋ฉด, Inverted Radix Tree๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. (docs์ ์ ์์๊ฐ ๋์์๋ค)
๐ฒ Suffix Tree์ ๋ํด์
Suffix Tree๋ ์์๊ฐ์ด ๋จ์ด์ ๋ชจ๋ ์ ๋ฏธ์ฌ๋ฅผ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ Radix Tree์ ๋นํด ์๋์ ์ผ๋ก ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. (๋จ์ )
๊ทธ๋ฌ๋ฉด ์ ์ด๋ ๊ฒ ๋ชจ๋ ๋จ์ด์ ๊ฒฝ์ฐ์์(์ ๋ฏธ์ฌ)๋ฅผ ์ ์ฅํ ๊น?
์ด์ ๋ ๋ฌธ์์ด์ ๋ํ ๊ฒ์ ์ ํ์ํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ๊ธฐ๋ณธ Radix Tree ์๋ฃ๊ตฌ์กฐ์ ์ TOAST ๋ฌธ์์ด์์ TO, TOA๋ก๋ฅผ TOAST๋ฅผ ์ฐพ์ ์ ์์ง๋ง, OA, OAS ๊ฐ์ ๋ฌธ์๋ก๋ TOAST๋ฅผ ์ฐพ์ ์ ์๋๋ฐ, ์ด ๋ฌธ์ ๋ฅผ Suffix Tree๋ฅผ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์๋ค.
๋ฐ๋ผ์ Suffix Tree๋ ํน์ ๋ถ๋ถ ๋ฌธ์์ด์ด ํฌํจ๋ ๋ฌธ์๋ค์ ๊ตฌํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค. (์ฅ์ )
๐ง ํ์์ด ์ง ๋์ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ๊ณ ์ณ๋ณด์!
private final InvertedRadixTree<String> TRIE = new ConcurrentInvertedRadixTree<>(new DefaultCharSequenceNodeFactory());
์ InvertedRadixTree์ ๊ธ์น์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๋์ PostConstruct๋ฅผ ๋ฉ์๋์์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ก๋ ํ → ๋ฌธ์์ด ์ ๋ ฅ์ containํ๋์ง ๊ฒ์ฆํ๋ค.
์๋ ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, DefaultCharSequenceNodeFactory๋ suffix tree ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋ํ ์ค ์ ์๋ค๊ณ ํ๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ๋ Inverted Radix Tree๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ถ์ฒ๋๋ SmartArrayBasedNodeFactory๋ก ๋ฐ๊ฟ์ฃผ์.
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํ ๋ด ๊ท์น์ผ๋ก ํ์ตํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ๋ ธ์ ์ผ๋ก ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฌธ์ํ๋ฅผ ์งํํด ํ์๋ค์๊ฒ ์ฌ์ฉํ ์๋๋ฅผ ๋ฉ๋์ํค๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
๐ค๐ป ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ต์ ์ผ๊น..?
์ง๊ธ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Trie ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ด๋ List์ ๋น๊ตํ๋ฉด ์๊ฐ๋ณต์ก๋๋ฅผ ์ค์ผ ์๋ ์์ง๋ง, ์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๋ ์ข์ง ์์๊น?
2ํธ์์ ๊ณ์
๋งํฌ : ๐จ๐ป๐ป๊ธ์น์ด ํํฐ๋ง ๊ธฐ๋ฅ์ ๋ถ์ํ๊ณ ๋ฆฌํฉํ ๋ง ํด๋ณด์! - (2) ์ค์ ์ฑ๋ฅ์ ์ธก์ ํด๋ณด์!
Reference
์ํธ ์ฝ๋ผ์ ์๊ณ ๋ฆฌ์ฆ : https://pangtrue.tistory.com/305
ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ : https://www.youtube.com/watch?v=TohdsR58i3Q
Suffix Tree / Radix Tree:
https://www.youtube.com/watch?v=N70NPX6xgsA
https://cd4761.blogspot.com/2017/02/suffix-tree.html
'Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday