Skip to content

Latest commit

ย 

History

History
336 lines (211 loc) ยท 9.98 KB

File metadata and controls

336 lines (211 loc) ยท 9.98 KB

04. ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„(p.149-162)

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

  • ํŠธ๋ฆฌ
    • ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
    • ์žฌ๊ท€์  ์„ค๋ช…๋ฒ•
      • ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
      • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
      • ๊ทธ ์ž์‹ ๋…ธ๋“œ ๋˜ํ•œ 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ์ด๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ์ •์˜๋œ๋‹ค.
    • ์‚ฌ์ดํด ์กด์žฌ X
    • ๋…ธ๋“œ๋“ค์ด ํŠน์ • ์ˆœ์„œ๋กœ ๋‚˜์—ด O or X
    • ๊ฐ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ์˜ ์—ฐ๊ฒฐ์ด O or X
    • ๊ฐ ๋…ธ๋“œ๋Š” ์–ด๋–ค ์ž๋ฃŒํ˜•์œผ๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.
class Node {
  public String name;
  public Node[] children;
}

ํŠธ๋ฆฌ(tree) vs. ์ด์ง„ ํŠธ๋ฆฌ(binary tree)

๋ชจ๋“  ํŠธ๋ฆฌ๊ฐ€ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์•„๋‹ˆ๋‹ค.

  • ์ด์ง„ ํŠธ๋ฆฌ(binary tree)

    • ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹์„ ๊ฐ–๋Š” ํŠธ๋ฆฌ
  • ์‚ผ์ง„ ํŠธ๋ฆฌ(ternary tree), ..., 10์ฐจ ํŠธ๋ฆฌ(10-ary tree)

์ด์ง„ ํŠธ๋ฆฌ(binary tree) vs. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)

    • ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š” ์†์„ฑ์ด ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ

      ๋ชจ๋“  ์™ผ์ชฝ ์ž์‹๋“ค <= n <= ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ์ž์‹๋“ค (for ๋ชจ๋“  ๋…ธ๋“œ n)

    • ๊ฐ™์€ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์•ฝ๊ฐ„์”ฉ ์ •์˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

    • ๋ถ€๋“ฑ์‹์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ”๋กœ ์•„๋ž˜ ์ž์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‚ด ๋ฐ‘์— ์žˆ๋Š” ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ์ฐธ์ด์–ด์•ผ ํ•œ๋‹ค.

๊ท ํ˜•(balanced) vs. ๋น„๊ท ํ˜•(unbalanced)

  • ๊ท ํ˜•์„ ์žก๋Š”๋‹ค != ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์™„์ „ํžˆ ๊ฐ™๊ฒŒ ํ•œ๋‹ค. (like ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ)
  • O(logN) ์‹œ๊ฐ„์— insert๊ณผ find๋ฅผ ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ๊ท ํ˜•์ด ์ž˜ ์žกํ˜€ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  ๊ผญ ์™„๋ฒฝํ•˜๊ฒŒ ๊ท ํ˜• ์žกํ˜€ ์žˆ์„ ํ•„์š”๋Š” ์—†๋‹ค.
  • ๊ท ํ˜• ํŠธ๋ฆฌ์˜ ์ผ๋ฐ˜์ ์ธ ์œ ํ˜•
    • ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ
    • AVL ํŠธ๋ฆฌ

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(complete binary tree)

  • ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ(complete binary tree)
    • ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋†’์ด์—์„œ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐจ ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
    • ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„(level)๋Š” ๊ฝ‰ ์ฐจ ์žˆ์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ์•ผ ํ•œ๋‹ค.

์ „ ์ด์ง„ ํŠธ๋ฆฌ(full binary tree)

  • ์ „ ์ด์ง„ ํŠธ๋ฆฌ(full binary tree)
    • ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž์‹์ด 0๊ฐœ or 2๊ฐœ
    • ์ž์‹์ด 1๊ฐœ์ธ ๋…ธ๋“œ๋Š” ์กด์žฌํ•˜์ง€ X

ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(perfect binary tree)

  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(perfect binary tree)
    • ์ „ ์ด์ง„ ํŠธ๋ฆฌ(full binary tree) && ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(complete binary tree)
    • ๋ชจ๋“  ๋ง๋‹จ ๋…ธ๋“œ๋Š” ๊ฐ™์€ ๋†’์ด์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ 2^k - 1(k: ํŠธ๋ฆฌ์˜ ๋†’์ด)๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค.

์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ

๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ์ˆœํšŒ ๋ฐฉ์‹์€ ์ค‘์œ„ ์ˆœํšŒ์ด๋‹ค.

์ค‘์œ„ ์ˆœํšŒ(in-order traversal)

  • ์ค‘์œ„ ์ˆœํšŒ(in-order traversal)
    • ์™ผ์ชฝ ๊ฐ€์ง€(branch) -> ํ˜„์žฌ ๋…ธ๋“œ -> ์˜ค๋ฅธ์ชฝ ๊ฐ€์ง€ ์ˆœ์„œ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ
  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ + ์ค‘์œ„ ์ˆœํšŒ: ์˜ค๋ฆ„์ฐจ์ˆœ ๋ฐฉ๋ฌธ

์ „์œ„ ์ˆœํšŒ(pre-order traversal)

  • ์ „์œ„ ์ˆœํšŒ(pre-order traversal)
    • ํ˜„์žฌ ๋…ธ๋“œ -> ์ž์‹ ๋…ธ๋“œ(๋ณดํ†ต ์™ผ์ชฝ ๊ฐ€์ง€ -> ์˜ค๋ฅธ์ชฝ ๊ฐ€์ง€) ์ˆœ์„œ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ
    • ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฌธ: ๋ฃจํŠธ ๋…ธ๋“œ

ํ›„์œ„ ์ˆœํšŒ(post-order traversal)

  • ํ›„์œ„ ์ˆœํšŒ(post-order traversal)
    • ์ž์‹ ๋…ธ๋“œ(๋ณดํ†ต ์™ผ์ชฝ ๊ฐ€์ง€ -> ์˜ค๋ฅธ์ชฝ ๊ฐ€์ง€) -> ํ˜„์žฌ ๋…ธ๋“œ ์ˆœ์„œ๋กœ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ
    • ๋งˆ์ง€๋ง‰ ๋ฐฉ๋ฌธ: ๋ฃจํŠธ ๋…ธ๋“œ

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

  • ์ตœ์†Œํž™(min-heaps)
    • ํŠธ๋ฆฌ์˜ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์„ ๋บ€ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๊ฐ€๋“ ์ฑ„์›Œ์ ธ ์žˆ์Œ -> ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(complete binary tree)
    • ๊ฐ ๋…ธ๋“œ์˜ ์›์†Œ๊ฐ€ ์ž์‹๋“ค์˜ ์›์†Œ๋ณด๋‹ค ์ž‘๋‹ค.
    • ๋ฃจํŠธ: ํŠธ๋ฆฌ ์ „์ฒด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ
  • ์ตœ๋Œ€ํž™(max-heaps)
    • ์ตœ์†Œํž™๊ณผ์˜ ์ฐจ์ด: ์›์†Œ๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋จ

์‚ฝ์ž…(insert)

  • ์ตœ์†Œํž™์— ์ƒˆ๋กœ์šด ์›์†Œ ์‚ฝ์ž… ์‹œ: ํŠธ๋ฆฌ ๋ฐ‘๋ฐ”๋‹ฅ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์œ„์น˜๋กœ ์‚ฝ์ž…
  • ์ƒˆ๋กœ ์‚ฝ์ž…๋œ ์›์†Œ๊ฐ€ ์ œ๋Œ€๋กœ ๋œ ์ž๋ฆฌ๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ๊ตํ™˜ํ•ด ๋‚˜๊ฐ„๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œ ์›์†Œ๋ฅผ ์œ„์ชฝ์œผ๋กœ ์˜ฌ๋ฆฐ๋‹ค.
  • Time complexity: O(logN) (N: ํž™ ๋…ธ๋“œ ๊ฐœ์ˆ˜)

์ตœ์†Œ ์›์†Œ ๋ฝ‘์•„๋‚ด๊ธฐ(extract_min)

  • ์ตœ์†Œํž™์˜ ์ตœ์†Ÿ๊ฐ’: ๋ฃจํŠธ ๋…ธ๋“œ์— ์œ„์น˜

  • ์ตœ์†Ÿ๊ฐ’ ์ œ๊ฑฐ ๋ฐฉ๋ฒ•

    1. ์ตœ์†Œ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ํž™์— ์žˆ๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์›์†Œ(๋ฐ‘๋ฐ”๋‹ฅ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์œ„์น˜ํ•œ ์›์†Œ)์™€ ๊ตํ™˜ํ•œ๋‹ค.

    2. ์ตœ์†Œํž™ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•˜๋„๋ก, ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ž์‹ ๋…ธ๋“œ์™€ ๊ตํ™˜ํ•ด ๋‚˜๊ฐ์œผ๋กœ์จ ๋ฐ‘์œผ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค.

      • ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ค‘ ๋ˆ„๊ตฌ์™€ ๊ตํ™˜ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

        ์ตœ์†Œํž™์˜ ์†์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„  ๋” ์ž‘์€ ์›์†Œ์™€ ๊ตํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

  • Time complexity: O(logN)

ํŠธ๋ผ์ด(์ ‘๋‘์‚ฌ ํŠธ๋ฆฌ)

  • ํŠธ๋ผ์ด(trie) = ์ ‘๋‘์‚ฌ ํŠธ๋ฆฌ(prefix tree)
    • n-์ฐจ ํŠธ๋ฆฌ(n-ary tree)์˜ ๋ณ€์ข…์œผ๋กœ ๊ฐ ๋…ธ๋“œ์— ๋ฌธ์ž๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ํŠน์ง•
    • ํŠธ๋ฆฌ๋ฅผ ์•„๋ž˜์ชฝ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด ๋‹จ์–ด ํ•˜๋‚˜๊ฐ€ ๋‚˜์˜จ๋‹ค.
    • ๊ฐ ๋…ธ๋“œ๋Š” 1๊ฐœ์—์„œ ALPHABET_SIZE + 1๊ฐœ๊นŒ์ง€ ์ž์‹์„ ๊ฐ–๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (* ๋…ธ๋“œ ๋Œ€์‹  ๋ถˆ๋ฆฐ ํ”Œ๋ž˜๊ทธ๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค๋ฉด 0๊ฐœ์—์„œ ALPHABET_SIZE๊นŒ์ง€)
    • ์ ‘๋‘์‚ฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋ณด๊ธฐ ์œ„ํ•œ ์•„์ฃผ ํ”ํ•œ ๋ฐฉ์‹
  • ๋„ ๋…ธ๋“œ(null node)
    • ๋‹จ์–ด์˜ ๋์„ ๋‚˜ํƒ€๋ƒ„
    • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
      • * ๋…ธ๋“œ
      • TrieNode๋ฅผ ์ƒ์†ํ•œ TerminatingTrieNode
      • ๋ถ€๋ชจ TrieNode์— ๋ถˆ๋ฆฐ ํ”Œ๋ž˜๊ทธ

๊ทธ๋ž˜ํ”„

ํŠธ๋ฆฌ(tree)๋Š” ๊ทธ๋ž˜ํ”„(graph)์˜ ํ•œ ์ข…๋ฅ˜๋‹ค. ํŠธ๋ฆฌ๋Š” ์‚ฌ์ดํด(cycle)์ด ์—†๋Š” ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„(connected graph)์ด๋‹ค.

  • ๊ทธ๋ž˜ํ”„

    • ๋…ธ๋“œ์™€ ๊ทธ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)์„ ํ•˜๋‚˜๋กœ ๋ชจ์•„ ๋†“์€ ๊ฒƒ
  • ํŠน์ง•

    • ๋ฐฉํ–ฅ์„ฑ
      • O: ๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(directed graph) -> ์ผ๋ฐฉํ†ตํ–‰ ๋„๋กœ
      • X: ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph) -> ์–‘๋ฐฉํ–ฅ ํ†ตํ–‰ ๋„๋กœ
    • ์—ฐ๊ฒฐ์„ฑ
      • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณ ๋ฆฝ๋œ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„(isolated subgraphs)
      • ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„(connected graph): ๋ชจ๋“  ์ •์  ์Œ(a pair of vertices) ๊ฐ„์— ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„
    • ์‚ฌ์ดํด
      • O: ์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(cyclic graph)
      • X: ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(acyclic graph)
  • ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ๋ฒ•

    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
    • ์ธ์ ‘ ํ–‰๋ ฌ

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ(adjacency list)
    • ๋ชจ๋“  ์ •์ (= ๋…ธ๋“œ)์„ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.
    • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph)์—์„œ (a, b) ๊ฐ„์„ ์€ ๋‘ ๋ฒˆ ์ €์žฅ๋œ๋‹ค.
    • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•
class Node {
  public String name;
  public Node[] children;
}

class Graph {
  public Node[] nodes;
}

์ธ์ ‘ ํ–‰๋ ฌ

  • ์ธ์ ‘ ํ–‰๋ ฌ(adjacency matrix)
    • N*N ๋ถˆ๋ฆฐ ํ–‰๋ ฌ
      • matrix[i][j] == true: i ์—์„œ j ๋กœ์˜ ๊ฐ„์„ ์ด ์žˆ๋‹ค.
    • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์ด ํ–‰๋ ฌ์€ ๋Œ€์นญํ–‰๋ ฌ(symmetric matrix)์ด ๋œ๋‹ค.
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
      • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ: ์–ด๋–ค ๋…ธ๋“œ์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
      • ์ธ์ ‘ ํ–‰๋ ฌ: ์–ด๋–ค ๋…ธ๋“œ์— ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ์ฐจ์ง ์œ„ํ•ด์„œ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ „๋ถ€ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

  • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•
    • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
    • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, depth-first search)

  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰

    • ๋ฃจํŠธ ๋…ธ๋“œ(ํ˜น์€ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋…ธ๋“œ)์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ(branch)๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • a์˜ ์ด์›ƒ์ธ b์˜ ๋ถ„๊ธฐ๋ฅผ ์ „๋ถ€ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•œ ๋’ค์—์•ผ a์˜ ๋‹ค๋ฅธ ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŠน์ง•

    • ๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•  ๋•Œ ๋” ์„ ํ˜ธ๋˜๋Š” ๋ฐฉ๋ฒ•(๋” ๊ฐ„๋‹จ)
    • ์ „์œ„ ์ˆœํšŒ๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ ์ˆœํšŒ๋Š” ๋ชจ๋‘ DFS์˜ ํ•œ ์ข…๋ฅ˜
      • ํŠธ๋ฆฌ ์ˆœํšŒ์™€ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜ ์ฐจ์ด์ : ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์€ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

    • ์žฌ๊ท€ ํ˜ธ์ถœ
    • Stack
void search(Node root) {
  if (root == null) return;
  visit(root);
  root.visited = true; // ๋ฐฉ๋ฌธ ์ฒดํฌ
  for (Node n : root.adjacent) {
    if (n.visited == false) {
      search(n);
    }
  }
}

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS, breadth-first search)

  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰

    • ๋ฃจํŠธ ๋…ธ๋“œ(ํ˜น์€ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋…ธ๋“œ)์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • a ๋…ธ๋“œ์˜ ์ด์›ƒ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•œ ๋‹ค์Œ์— ์ด์›ƒ์˜ ์ด์›ƒ๋“ค์„ ๋ฐฉ๋ฌธํ•œ๋‹ค. ์ฆ‰, a์—์„œ ์‹œ์ž‘ํ•ด์„œ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๋‹จ๊ณ„๋ณ„๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
  • ํŠน์ง•

    • ๋‘ ๋…ธ๋“œ ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ํ˜น์€ ์ž„์˜์˜ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ  ์‹ถ์„ ๋•Œ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•
    • DFS๋Š”?
      • ์ •๋‹ต์—์„œ ๋™๋–จ์–ด์ง„ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ๊ต‰์žฅํžˆ ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ณ  ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

    • Queue
void search(Node root) {
  Queue queue = new LinkedList();
  root.marked = true;
  queue.enqueue(root);
  
  while (!queue.isEmpty()) {
    Node r = queue.dequeue();
    visit(r);
    for (Node n : root.adjacent) {
      if (n.visited == false) {
        n.marked = true; // ๋ฐฉ๋ฌธ ์ฒดํฌ
        queue.enqueue(n);
      }
    }
  }
}

์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰(bidirectional search)

  • ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰
    • ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€ ๋‘ ๋…ธ๋“œ์—์„œ ๋™์‹œ์— ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ ๋’ค, ๋‘ ํƒ์ƒ‰ ์ง€์ ์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹
  • ํŠน์ง•
    • ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€ ์‚ฌ์ด์— ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉ๋จ

์ถ”๊ฐ€๋กœ ์ฝ์„๊ฑฐ๋ฆฌ

์œ„์ƒ์ •๋ ฌ(topological sort)(p.808)

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(dijkstra's algorithm)(p.810)

AVL ํŠธ๋ฆฌ(p.816)

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(p.818)

๋ฉด์ ‘ ๋ฌธ์ œ

  1. ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฒฝ๋กœ
  2. ์ตœ์†Œ ํŠธ๋ฆฌ
  3. ๊นŠ์ด์˜ ๋ฆฌ์ŠคํŠธ
  4. ๊ท ํ˜• ํ™•์ธ
  5. BST ๊ฒ€์ฆ
  6. ํ›„์†์ž
  7. ์ˆœ์„œ ์ •ํ•˜๊ธฐ
  8. ์ฒซ ๋ฒˆ์งธ ๊ณตํ†ต ์กฐ์ƒ
  9. BST ์ˆ˜์—ด
  10. ํ•˜์œ„ ํŠธ๋ฆฌ ํ™•์ธ
  11. ์ž„์˜์˜ ๋…ธ๋“œ
  12. ํ•ฉ์˜ ๊ฒฝ๋กœ