๐ŸŒฒ Tree

hyukimยท2020๋…„ 5์›” 5์ผ
0

Tree

ํŠธ๋ฆฌ์˜ ๊ฐœ๋…

  • ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
  • ์ž์‹ ๋…ธ๋“œ๋“ค ๋˜ํ•œ 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ , ๋ฐ˜๋ณต์ ์œผ๋กœ ์ •์˜๋œ๋‹ค.
  • ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ(node)๋“ค๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  • ํŠธ๋ฆฌ์—๋Š” ์‚ฌ์ดํด(cycle)์ด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.
  • ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜ (Acyclic Connected Graph / Directed Acyclic Graph)์ด๋‹ค.

๊ด€๋ จ ์šฉ์–ด

  • ๋ฃจํŠธ ๋…ธ๋“œ (root node) : ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ, ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ๋‹จ๋ง ๋…ธ๋“œ (leaf node) : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ, ๋ง๋‹จ ๋…ธ๋“œ, ์žŽ ๋…ธ๋“œ, ๋ฆฌํ”„ ๋…ธ๋“œ ๋“ฑ์œผ๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๋‚ด๋ถ€ ๋…ธ๋“œ (internal node) : ๋‹จ๋ง ๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ
  • ๊ฐ„์„  (edge) : ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ , link, branch๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ํ˜•์ œ (sibling) : ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ
  • ๋…ธ๋“œ์˜ ํฌ๊ธฐ (size) : ์ž์‹ ์„ ํฌํ•จํ•œ ์ž์‹ ์˜ ๋ชจ๋“  ์ž์† ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
  • ๋…ธ๋“œ์˜ ๊นŠ์ด (depth) : ๋ฃจํŠธ์—์„œ ์–ด๋–ค ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
  • ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ (level) : ํŠธ๋ฆฌ์˜ ํŠน์ • ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ์˜ ์ง‘ํ•ฉ
  • ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜ (degree) : ํ•˜์œ„ ํŠธ๋ฆฌ ๊ฐœ์ˆ˜ || ๊ฐ„์„  ์ˆ˜ = ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ง€๋‹Œ ๊ฐ€์ง€์˜ ์ˆ˜
  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜ (degree of tree) : ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜
  • ํŠธ๋ฆฌ์˜ ๋†’์ด(height) : ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ๊นŠ์ˆ™ํžˆ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊นŠ์ด (= ์ตœ๋Œ€ ๋ ˆ๋ฒจ)

ํŠธ๋ฆฌ์˜ ํŠน์ง•

  • ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. '์ตœ์†Œ ์—ฐ๊ฒฐ ํŠธ๋ฆฌ'๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
  • ๊ณ„์ธต์  ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค.
  • ํŠธ๋ฆฌ๋Š” DAG(Directed Acyclic Graph)์˜ ํ•œ ์ข…๋ฅ˜์ด๋‹ค. (์‚ฌ์ดํด์ด ์—†๋‹ค.)
  • ๋…ธ๋“œ๊ฐ€ N๊ฐœ์ธ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ N-1๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ–๋Š”๋‹ค.
  • ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์–ด๋–ค ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•œ๋‹ค
  • ํ•œ ๊ฐœ์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์ด ์กด์žฌํ•˜๋ฉฐ ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ํ•œ ๊ฐœ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.
  • ์ˆœํšŒ๋Š” pre-order, in-order, post-order๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ด 3๊ฐ€์ง€ ๋ชจ๋‘ DFS / BFS ์•ˆ์— ์žˆ๋‹ค.
  • ํŠธ๋ฆฌ๋Š” ์ด์ง„ํŠธ๋ฆฌ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, ๊ท ํ˜• ํŠธ๋ฆฌ(AVL ํŠธ๋ฆฌ, red-black ํŠธ๋ฆฌ), ์ด์ง„ ํž™(์ตœ๋Œ€ํž™, ์ตœ์†Œํž™) ๋“ฑ์ด ์žˆ๋‹ค.

ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜

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

  • ์ด์ง„ ํŠธ๋ฆฌ
    • ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 0 ~ 2๊ฐœ์ธ ํŠธ๋ฆฌ
    • Binary Tree ์ฐธ์กฐ
  • ํŠธ๋ฆฌ
    • ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์— ์ œํ•œ์ด ์—†๋Š” ํŠธ๋ฆฌ

์ด์ง„ ํŠธ๋ฆฌ vs ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (Binary Search Tree)
    • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ํŠน์ • ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” ์†์„ฑ์ด ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
    • ๋ชจ๋“  ์™ผ์ชฝ ์ž์‹๋“ค โ‰ค n < ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ์ž์‹๋“ค

๊ท ํ˜• ํŠธ๋ฆฌ vs ๋น„ ๊ท ํ˜• ํŠธ๋ฆฌ

  • ๊ท ํ˜• ํŠธ๋ฆฌ
    • O(logN) ์‹œ๊ฐ„์— insert์™€ find๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€ ์žˆ๋Š” ํŠธ๋ฆฌ
    • ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ, AVL ํŠธ๋ฆฌ

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ vs ์ „ ์ด์ง„ ํŠธ๋ฆฌ vs ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ

  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (Complete BT)
    • ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋†’์ด์—์„œ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ. ์ฆ‰, ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ์™„์ „ํžˆ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค.
  • ์ „ ์ด์ง„ ํŠธ๋ฆฌ (Full BT / Strictly BT)
    • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 0๊ฐœ ๋˜๋Š” 2๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ํŠธ๋ฆฌ
  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ (Perfect BT)
    - ์ „ ์ด์ง„ํŠธ๋ฆฌ์ด๋ฉด์„œ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ์ธ ๊ฒฝ์šฐ
    ์ž์„ธํ•œ ๋‚ด์šฉ์€ Binary Tree ์ฐธ์กฐ

์ด์ง„ ํž™(์ตœ์†Œํž™, ์ตœ๋Œ€ํž™)

  • ์ตœ์†Œ ํž™(Min Heap)
    • ํŠธ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์„ ๋บ€ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๊ฐ€๋“ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋ฉฐ, ๊ฐ ๋…ธ๋“œ์˜ ์›์†Œ๊ฐ€ ์ž์‹๋“ค์˜ ์›์†Œ๋ณด๋‹ค ์ž‘๋‹ค.
    • ์ฆ‰, key(๋ถ€๋ชจ ๋…ธ๋“œ) โ‰ค key(์ž์‹ ๋…ธ๋“œ)์ธ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
    • ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์€ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋‹ค.
    • N๊ฐœ๊ฐ€ ํž™์— ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฉด ๋†’์ด๋Š” log(N)์ด๋‹ค.
  • ์ตœ๋Œ€ ํž™(Max Heap)
    • ์›์†Œ๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์—์„œ๋งŒ ์ตœ์†Œํž™๊ณผ ๋‹ค๋ฅด๋‹ค.
    • ๊ฐ ๋…ธ๋“œ์˜ ์›์†Œ๊ฐ€ ์ž์‹์˜ ์›์†Œ๋ณด๋‹ค ํฌ๋‹ค.
  • ๋‚˜์ค‘์— ๋”ฐ๋กœ ์ •๋ฆฌํ•  ์˜ˆ์ •

ํŠธ๋ผ์ด (trie / ์ ‘๋‘์‚ฌ ํŠธ๋ฆฌ; Prefix Tree)

  • n-์ฐจ ํŠธ๋ฆฌ(n-ary Tree)์˜ ๋ณ€ํ˜•
  • ๊ฐ ๋…ธ๋“œ์— ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋”ฐ๋ผ์„œ ํŠธ๋ฆฌ๋ฅผ ์•„๋ž˜์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด ๋‹จ์–ด ํ•˜๋‚˜๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • ์ ‘๋‘์‚ฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋ณด๊ธฐ ์œ„ํ•œ ํ”ํ•œ ๋ฐฉ์‹์œผ๋กœ, ๋ชจ๋“  ์–ธ์–ด๋ฅผ ํŠธ๋ผ์ด์— ์ €์žฅํ•ด ๋†“๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค.
  • ์œ ํšจํ•œ ๋‹จ์–ด ์ง‘ํ•ฉ์„ ์ด์šฉํ•˜๋Š” ๋งŽ์€ ๋ฌธ์ œ๋“ค์€ ํŠธ๋ผ์ด๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™” ๊ฐ€๋Šฅํ•˜๋‹ค.

ํŠธ๋ฆฌ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

ํŠธ๋ฆฌ๋Š” ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜์ด๋ฏ€๋กœ ๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ธ์ ‘ ๋ฐฐ์—ด ์ด์šฉ

  • 1์ฐจ์› ๋ฐฐ์—ด์— ์ž์‹ ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ 0๊ฐœ ๋˜๋Š” 1๊ฐœ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ
    • ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ 0๊ฐœ : ๋ฃจํŠธ ๋…ธ๋“œ
  • ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ฒฝ์šฐ, 2์ฐจ์› ๋ฐฐ์—ด์— ์ž์‹ ๋…ธ๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹์„ ๊ฐ–๋Š” ํŠธ๋ฆฌ์ด๊ธฐ์— ๊ฐ€๋Šฅ
    • ex) A[i][0] โ†’ left, A[i][1] โ†’ right

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์ด์šฉ

  • ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ โ†’ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๋ณ€ํ˜•
  • ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ โ†’ ๊ฐ€์ค‘์น˜ ๊ฐ’ ์ถ”๊ฐ€

Reference

profile
๐Ÿ’ช ๐Ÿฅฉ ๐Ÿบ โœˆ ๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€