Algorithm

    [Algorithm | Python] HeavyLight Decomposition (HLD)

    ใ…Žใ„นใ„ท ์˜ฌ๋ ค์•ผ์ง€, ์˜ฌ๋ ค์•ผ์ง€ ํ•˜๊ณ  ํ•˜๋˜ ๊ฑธ ์ด์ œ์•ผ ์ •๋ฆฌ. ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์•˜๋‹ค HeavyLight Decomposition (HLD)๋Š” ํŠธ๋ฆฌ์—์„œ์˜ ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ํ…Œํฌ๋‹‰์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. 1. ํŠธ๋ฆฌ์˜ ์ •์  $u$ ์—์„œ $v$ ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€์ง„ ์ •์ ์„ ์ฐพ๋Š” ์ฟผ๋ฆฌ 2. ์ •์ ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ์ฟผ๋ฆฌ ๋ฐฐ์—ด์—์„œ ์œ„ ์ฟผ๋ฆฌ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋‚˜ ํŽœ์œ… ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด $O(QlogN)$์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฐฐ์—ด์ด ์„ ํ˜•์ธ ์ ์„ ํ™œ์šฉํ•œ ํ’€์ด๋ฒ•์ด๊ธฐ์—, ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํŠธ๋ฆฌ์—๋Š” ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ํŠธ๋ฆฌ๋ฅผ ์ ๋‹นํžˆ ๋‚˜๋ˆ ์„œ, ๋‚˜๋ˆˆ ๊ตฌ๊ฐ„์„ ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์–ด๋–จ๊นŒ? ๋ผ๋Š” ๋ฐœ์ƒ์—์„œ ๋‚˜์˜จ ๊ฒŒ ์˜ค๋Š˜ ๋‹ค๋ฃฐ HeavyLight Decompos..

    [ํŒŒ์ด์ฌ | Python] ํŠธ๋ผ์ด (Trie) ์ž๋ฃŒ๊ตฌ์กฐ

    ๋ฌธ์ž์—ด์€ ํ•ญ์ƒ ์–ด๋ ต๋‹ค. KMP๋„ ๊ทธ๋ ‡๊ณ , digit์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ๋„ ๊ทธ๋ ‡๊ณ , ์•Œ๋ฉด ์•Œ์ˆ˜๋ก ๋จธ๋ฆฌ์•„ํŒŒ์ง€๋Š” ๋ถ„์•ผ. ๊ทธ๋งŒํผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๋ฉด ํ›จ์”ฌ ์–ด๋ ต๊ฒŒ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ๊ฒ ์ง€. ์˜ค๋Š˜์€ ํŠธ๋ผ์ด๋ฅผ ๊ณต๋ถ€ํ–ˆ๋‹ค. Radix tree / Prefix tree ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ, ํ•œ ๋‹จ์–ด์˜ ์ ‘๋‘์‚ฌ(์ ‘๋‘์–ด)๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. (ํ•ด๋‹น ๋‹จ์–ด์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€์˜ ๋ฌธ์ž๋“ค์„ ์ €์žฅํ•œ๋‹ค) donghoon ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด๋ฉด, dong ๋„ ์ ‘๋‘์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , do ๋„ ์ ‘๋‘์‚ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ํŠธ๋ผ์ด์—์„œ๋Š” ์ด ๋‹จ์–ด๋“ค์ด ์„œ๋กœ ํฌํ•จ๊ด€๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค. ํŠธ๋ผ์ด์— "app", "ant", "apple"์ด๋ผ๋Š” ๋‹จ์–ด๋“ค์„ ์ €์žฅํ•œ๋‹ค๊ณ  ํ•˜์ž. ํŠธ๋ผ์ด์—๋Š” ์ง€๊ธˆ๊นŒ์ง€์˜ ๋ชจ๋“  ๋‹จ์–ด์˜ ์ž์ทจ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‹จ์–ด์˜ ๊ฐ ๊ธ€์ž๋งˆ๋‹ค, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒˆ..