[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ์ž๋ฃŒ๊ตฌ์กฐ - ํŠธ๋ฆฌ

ํŠธ๋ฆฌ

  1. ์šฉ๋„

  2. ์šฉ์–ด ์ •๋ฆฌ

  3. ์ข…๋ฅ˜

    1. ์ด์ง„ ํŠธ๋ฆฌ

    2. ์ผ๋ฐ˜ ํŠธ๋ฆฌ

    3. ์Šค๋ ˆ๋“œ ์ด์ง„ ํŠธ๋ฆฌ

  4. ๊ตฌํ˜„

    1. ๋ฐฐ์—ด ํ‘œํ˜„๋ฒ•

    2. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„๋ฒ•

  5. ํŠธ๋ฆฌ ํ™œ์šฉ

    1. ํƒ์ƒ‰

    2. ์ง‘ํ•ฉ ํ‘œํ˜„

    3. ํ—ˆํ”„๋งŒ ์ฝ”๋“œ

 

ํŠธ๋ฆฌ

ํŠธ๋ฆฌ๋ž€ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜๋กœ ๋ฌด๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(Connected Undirected Acyclic Graph)์ด๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ in-degree๊ฐ€ 1์ธ ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋ฏ€๋กœ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์— ์†ํ•œ๋‹ค.

 

์šฉ๋„

๊ณ„์ธต์ ์ธ ์กฐ์ง์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜, ์ปดํ“จํ„ฐ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ / ์ธ๊ณต์ง€๋Šฅ์˜ decision tree ๋“ฑ์— ์ด์šฉ๋œ๋‹ค. ๋˜ํ•œ ์ž๋ฃŒ์˜ ํƒ์ƒ‰ / ์ •๋ ฌ / DB ๊ตฌ์„ฑ์ด๋‚˜ ๋ถ„์ž๊ตฌ์กฐ์‹ ์„ค๊ณ„ ๋“ฑ์—์„œ๋„ ๋‹ค์–‘ํ•˜๊ฒŒ ์ด์šฉ๋œ๋‹ค.

(๊ฒฐ์ •ํŠธ๋ฆฌ)(์ด์ง„ํƒ์ƒ‰)

 

์šฉ์–ด ์ •๋ฆฌ

  • ๋…ธ๋“œ (node) : ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค. ๊ทธ๋ž˜ํ”„๋กœ ๋”ฐ์ง€์ž๋ฉด ์ •์ (vertex)์— ํ•ด๋‹นํ•œ๋‹ค.
  • ๋ฃจํŠธ (root) : ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ์ด๋‹ค.
  • ์„œ๋ธŒํŠธ๋ฆฌ (subtree) : ํ•˜๋‚˜์˜ ๋…ธ๋“œ์™€ ์ž์†๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.
  • ๋‹จ๋ง ๋…ธ๋“œ (leaf node) : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ์ด๋‹ค.
  • ๋ ˆ๋ฒจ (level) : ํŠธ๋ฆฌ์˜ ๊ฐ ์ธต์„ ๋‚˜ํƒ€๋‚ด๋Š” index์ด๋‹ค. ๋ฃจํŠธ๋…ธ๋“œ๋Š” 0๋ ˆ๋ฒจ์ด๋ฉฐ ์ž์†์œผ๋กœ ๋‚ด๋ ค๊ฐˆ ์ˆ˜๋ก 1์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.
  • ๋†’์ด (height) : ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋ ˆ๋ฒจ์ด๋‹ค. ํŠธ๋ฆฌ์˜ ์†์„ฑ์ด ์•„๋‹Œ ์ค‘๊ฐ„ ๋…ธ๋“œ์˜ height๋ฅผ ๊ตฌํ•˜๋ ค๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๋˜๋Š” ์„œ๋ธŒํŠธ๋ฆฌ์˜ height๋ฅผ ์ธก์ •ํ•˜๋ฉด ๋œ๋‹ค.
  • ์ฐจ์ˆ˜ (degree) : ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜์ด๋‹ค.
  • ํฌ๋ฆฌ์ŠคํŠธ (forest) : ์„œ๋ธŒํŠธ๋ฆฌ๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

 

์ข…๋ฅ˜

์ด์ง„ํŠธ๋ฆฌ

๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ์ด๋‹ค.

 

<์„ฑ์งˆ>

๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜ ๊ฐ„์„ ์˜ ๊ฐฏ์ˆ˜ ๋ ˆ๋ฒจ i์—์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”
์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜
๋†’์ด k์ธ ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”
์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜
n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š”
์ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด
n n-1 2^(i-1) 2^k-1 ์ตœ์†Œ ceil(log2(n+1))
์ตœ๋Œ€ n

 

๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ n๊ฐœ๋ผ๊ณ  ํ•˜๋ฉด ์กด์žฌํ•˜๋Š” ๊ฐ„์„ ์˜ ๊ฐฏ์ˆ˜๋Š” ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ n-1๊ฐœ์ด๋‹ค. (๋…ธ๋“œ๋งˆ๋‹ค ๊ฐ„์„ ์ด ํ•˜๋‚˜์”ฉ ์œ„๋กœ๋ถ€ํ„ฐ ๋‚ด๋ ค์˜ค๊ธฐ ๋–„๋ฌธ์ด๋‹ค.)

 

<์ข…๋ฅ˜>

  • ํฌํ™” ์ด์ง„ํŠธ๋ฆฌ : ๋ ˆ๋ฒจ l๊นŒ์ง€ ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์ ธ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
  • ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ : ๋ ˆ๋ฒจ l-1 ๊นŒ์ง€๋Š” ๋…ธ๋“œ๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์ ธ์žˆ๊ณ  ๋ ˆ๋ฒจ l์—์„œ๋Š” ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋…ธ๋“œ๊ฐ€ ์ฑ„์›Œ์ ธ์žˆ๋Š” ์ด์ง„ํŠธ๋ฆฌ
  • ํŽธํ–ฅ ์ด์ง„ํŠธ๋ฆฌ : ๋†’์ด๊ฐ€ h์ผ ๋•Œ h๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ฐ€์ง€๋Š” ์ด์ง„ํŠธ๋ฆฌ

 

์ผ๋ฐ˜ ํŠธ๋ฆฌ

์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŠธ๋ฆฌ์ด๋‹ค.

์ฐธ๊ณ  : ์ผ๋ฐ˜ ํŠธ๋ฆฌ๋ฅผ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ผ๋ฐ˜ ํŠธ๋ฆฌ A์˜ ์ฒซ๋ฒˆ์งธ ์ž์‹ ๋…ธ๋“œ ๊ฐ„์„ ๋งŒ์„ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€ ๊ฐ„์„ ์„ ์ œ๊ฑฐํ•œ๋‹ค.
  2. ํ˜•์ œ ๋…ธ๋“œ๋“ค์„ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.
  3. ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ 45๋„ ํšŒ์ „ํ•˜์—ฌ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

์Šค๋ ˆ๋“œ ์ด์ง„ ํŠธ๋ฆฌ

 

๊ตฌํ˜„

๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐฐ์—ด ํ‘œํ˜„๋ฒ•

ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ , ๋…ธ๋“œ์— index๋ฅผ ๋ถ™์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ธ๋ฑ์Šค๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค๋ฅผ floor(i/2)๋ผ๊ณ  ํ•  ๋•Œ, ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๋Š” 2*i, ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ๋Š” 2*i+1์ด๋‹ค.

 

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„๋ฒ•

ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

ํŠธ๋ฆฌ ํ™œ์šฉ

 

ํƒ์ƒ‰

ํƒ์ƒ‰(== ์ˆœํšŒ)์€ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋“ค์„ ๋น ๋œจ๋ฆฌ๊ฑฐ๋‚˜ ์ค‘๋ณตํ•˜์ง€ ์•Š๊ณ  ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค. ํŠธ๋ฆฌ์˜ ๊ธฐ๋ณธ์ ์ธ ์ˆœํšŒ ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ์˜ ์ˆœํšŒ๋Š” ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋งŒ ์กด์žฌํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ˆœํšŒ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์ „์œ„ ์ˆœํšŒ (preorder)

    VLR ์ˆœ์œผ๋กœ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋จผ์ € ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์ค‘์œ„ ์ˆœํšŒ (inorder)

    LVR ์ˆœ์œผ๋กœ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ์ค‘๊ฐ„์— ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ํ›„์œ„ ์ˆœํšŒ (postorder)

    LRV ์ˆœ์œผ๋กœ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ๋งˆ์ง€๋ง‰์— ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ˆ˜์‹ํŠธ๋ฆฌ ๊ณ„์‚ฐ ์‹œ ์‚ฌ์šฉ๋œ๋‹ค.

    (์ˆ˜์‹ํŠธ๋ฆฌ)

 

ํŠน์ดํ•œ ์ˆœํšŒ๋กœ๋Š” ๋ ˆ๋ฒจ ์ˆœํšŒ๊ฐ€ ์žˆ๋‹ค.

  • ๋ ˆ๋ฒจ ์ˆœํšŒ (levelorder)

    ๋ ˆ๋ฒจ ๋ณ„๋กœ 1->2->3->4->5->6 ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค.

 

๊ทธ๋ž˜ํ”„์—์„œ ๋ดค๋˜ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ธ DFS์™€ BFS๋ฅผ ํŠธ๋ฆฌ์—์„œ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • DFS

    ํŠธ๋ฆฌ์—์„œ๋Š” ์ „์œ„ํƒ์ƒ‰ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™๋‹ค.

  • BFS

    ํŠธ๋ฆฌ์—์„œ๋Š” ๋ ˆ๋ฒจ์šฐ์„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™๋‹ค.

 

์ง‘ํ•ฉ ํ‘œํ˜„

์ง‘ํ•ฉ ํ‘œํ˜„์— ๊ด€๋ จ๋œ Union-Find ๋ฌธ์ œ๋Š” ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

(Union-Find ๋ฌธ์ œ)

 

ํ—ˆํ”„๋งŒ ์ฝ”๋“œ

(ํ—ˆํ”„๋งŒ ์ฝ”๋“œ)

๋ฐ˜์‘ํ˜•