๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋‚˜์˜ ๋ชจ์–‘

024 | Data Structure - Tree, Graph ๋ณธ๋ฌธ

SEB/TIL

024 | Data Structure - Tree, Graph

kexon 2022. 7. 26. 20:49

๐Ÿ’™ Tree

๐Ÿค ๊ฐœ๋…

  • ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋Œ€์ƒ ์ •๋ณด์˜ ๊ฐ ํ•ญ๋ชฉ๋“ค์„ ๊ณ„์ธต์ ์œผ๋กœ ์—ฐ๊ด€๋˜๋„๋ก ๊ตฌ์กฐํ™”์‹œํ‚ค๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋‹จ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

๊นŠ์ด (depth)

  • ๋ฃจํŠธ๋กœ๋ถ€ํ„ฐ ํ•˜์œ„ ๊ณ„์ธต์˜ ํŠน์ • ๋…ธ๋“œ๊นŒ์ง€์˜ ๊นŠ์ด(depth)๋ฅผ ํ‘œํ˜„

๋ ˆ๋ฒจ(Level)

  • ๊ฐ™์€ ๊นŠ์ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋…ธ๋“œ์˜ ๋ฌถ์Œ
  • ํ˜•์ œ ๋…ธ๋“œ(Sibling Node): ๊ฐ™์€ ๋ ˆ๋ฒจ์— ๋‚˜๋ž€ํžˆ ์žˆ๋Š” ๋…ธ๋“œ

๋†’์ด(Height)

  • ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฃจํŠธ๊นŒ์ง€์˜ ๋†’์ด(height)๋ฅผ ํ‘œํ˜„
  • ๋ฆฌํ”„ ๋…ธ๋“œ์™€ ์ง๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ ํ‘œํ˜„
    ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๋†’์€ height ๊ฐ’์— +1ํ•œ ๊ฐ’์„ ๋†’์ด๋กœ ๊ฐ€์ง
  • ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋†’์ด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ์—๋Š” ๊ฐ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋†’์ด๋ฅผ 0์œผ๋กœ ๋†“์Œ

์„œ๋ธŒ ํŠธ๋ฆฌ(Sub tree)

  • ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ root์—์„œ ๋ป—์–ด ๋‚˜์˜ค๋Š” ํฐ ํŠธ๋ฆฌ์˜ ๋‚ด๋ถ€์—, ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ–์ถ˜ ์ž‘์€ ํŠธ๋ฆฌ

๐Ÿค ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์šฉ์–ด

  • ๋…ธ๋“œ(Node): ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ๋ชจ๋“  ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ
  • ๋ฃจํŠธ(Root): ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” ๋…ธ๋“œ
  • ๋ถ€๋ชจ ๋…ธ๋“œ(Parent node): ๋‘ ๋…ธ๋“œ๊ฐ€ ์ƒํ•˜๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฃจํŠธ์—์„œ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ
  • ์ž์‹ ๋…ธ๋“œ(Child node): ๋‘ ๋…ธ๋“œ๊ฐ€ ์ƒํ•˜๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋ฃจํŠธ์—์„œ ๋จผ ๋…ธ๋“œ
  • ๋ฆฌํ”„(Leaf): ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๋ ์ง€์ , ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ

๐Ÿค Tree ์‚ฌ์šฉ ์˜ˆ์ œ

  • ์ปดํ“จํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ
  • ๋ชจ๋“  ํด๋”๋Š” ํ•˜๋‚˜์˜ ํด๋”(๋ฃจํŠธ ํด๋”, /)์—์„œ ์‹œ์ž‘๋˜์–ด, ๊ฐ€์ง€๋ฅผ ๋ป—์–ด๋‚˜๊ฐ
  • ์›”๋“œ์ปต ํ† ๋„ˆ๋จผํŠธ ๋Œ€์ง„ํ‘œ
  • ๊ฐ€๊ณ„๋„(์กฑ๋ณด)

๐Ÿ’™ Graph

๐Ÿค ๊ฐœ๋…

  • ํ•œ ์Œ์˜ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋…ธ๋“œ์˜ ์œ ํ•œ ์ง‘ํ•ฉ๊ณผ ์—ฃ์ง€ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋น„์„ ํ˜• ๋ฐ์ดํ„ฐ๊ตฌ์กฐ
  • ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ฐ์ฒด ๊ฐ„ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ง์ ‘์ ์ธ ๊ด€๊ณ„: ๋‘ ์  ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ์„ 
  • ๊ฐ„์ ‘์ ์ธ ๊ด€๊ณ„: ๋ช‡ ๊ฐœ์˜ ์ ๊ณผ ์„ ์— ๊ฑธ์ณ ์ด์–ด์ง

๐Ÿค ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด

  • ์ •์ (vertex)(= ๋…ธ๋“œ(node)): ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ์›์†Œ
  • ๊ฐ„์„ (edge): ์ •์  ๊ฐ„์˜ ๊ด€๊ณ„. ์ •์ (= ๋…ธ๋“œ) ์—ฐ๊ฒฐ ์„ 
  • ์ธ์ ‘ ์ •์ (adjacent vertex): ํ•˜๋‚˜์˜ ์ •์ ์—์„œ ๊ฐ„์„ ์— ์˜ํ•ด ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ 
    • ์ธ์ ‘(adjacency): ๋‘ ์ •์  ๊ฐ„์— ๊ฐ„์„ ์ด ์ง์ ‘ ์ด์–ด์ ธ ์žˆ๋‹ค๋ฉด ์ด ๋‘ ์ •์ ์€ ์ธ์ ‘ํ•œ ๊ฒƒ
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(weighted Graph): ์—ฐ๊ฒฐ์˜ ๊ฐ•๋„(์ถ”๊ฐ€์ ์ธ ์ •๋ณด)๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€ ์ ํ˜€์ ธ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„
  • ๋น„๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(unweighted Graph): ์—ฐ๊ฒฐ์˜ ๊ฐ•๋„๊ฐ€ ์ ํ˜€์ ธ ์žˆ์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„
  • ๋ฌด(๋ฐฉ)ํ–ฅ ๊ทธ๋ž˜ํ”„(undirected graph): ๋‘ ์ง€์ ์ด ์ผ๋ฐฉํ†ตํ–‰ ๋„๋กœ๋กœ ์ด์–ด์ ธ ์žˆ๋‹ค๋ฉด ๋‹จ๋ฐฉํ–ฅ์ธ ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„
  • ์ง„์ž… ์ฐจ์ˆ˜(in-degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ (= ๋‚ด์ฐจ์ˆ˜)
  • ์ง„์ถœ ์ฐจ์ˆ˜(out-degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ (= ์™ธ์ฐจ์ˆ˜) ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ์žˆ๋Š” ์ •์ ์˜ ์ง„์ž… ์ฐจ์ˆ˜ ๋˜๋Š” ์ง„์ถœ ์ฐจ์ˆ˜์˜ ํ•ฉ = ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ์˜ ์ˆ˜(๋‚ด์ฐจ์ˆ˜ + ์™ธ์ฐจ์ˆ˜)
  • ๊ฒฝ๋กœ ๊ธธ์ด(path length): ๊ฒฝ๋กœ ๊ตฌ์„ฑ์— ์‚ฌ์šฉ๋œ ๊ฐ„์„ ์˜ ์ˆ˜
  • ๋‹จ์ˆœ ๊ฒฝ๋กœ(simple path): ๊ฒฝ๋กœ ์ค‘ ๋ฐ˜๋ณต๋˜๋Š” ์ •์ ์ด ์—†๋Š” ๊ฒฝ์šฐ
  • ์ž๊ธฐ ๋ฃจํ”„(self loop): ์ •์ ์—์„œ ์ง„์ถœํ•˜๋Š” ๊ฐ„์„ ์ด ๊ณง๋ฐ”๋กœ ์ž๊ธฐ ์ž์‹ ์—๊ฒŒ ์ง„์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๊ธฐ ๋ฃจํ”„๋ฅผ ๊ฐ€์กŒ๋‹ค ๋ผ๊ณ  ํ‘œํ˜„ํ•จ. ๋‹ค๋ฅธ ์ •์ ์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•
  • ์‚ฌ์ดํด(cycle): ํ•œ ์ •์ ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๋‹ค์‹œ ํ•ด๋‹น ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

๐Ÿค Graph ํ‘œํ˜„๋ฐฉ์‹

์ธ์ ‘ํ–‰๋ ฌ(Adjacency Matrix)

  • ๋‘ ์ •์ ์„ ๋ฐ”๋กœ ์ด์–ด์ฃผ๋Š” ๊ฐ„์„ 
  • ์„œ๋กœ ๋‹ค๋ฅธ ์ •์ ๋“ค์ด ์ธ์ ‘ํ•œ ์ƒํƒœ์ธ์ง€๋ฅผ ํ‘œ์‹œํ•œ ํ–‰๋ ฌ๋กœ, 2์ฐจ์› ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋ƒ„
  • ์‚ฌ์šฉํ•  ๋•Œ
    • ๋‘ ์ •์  ์‚ฌ์ด์— ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š”์ง€, ์—†๋Š”์ง€ ํ™•์ธ
    • ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ

์ธ์ ‘๋ฆฌ์ŠคํŠธ(Adjacency List)

  • ๊ฐ ์ •์ ์ด ์–ด๋–ค ์ •์ ๊ณผ ์ธ์ ‘ํ•˜๋Š”์ง€๋ฅผ ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„
  • ๊ฐ ์ •์ ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋ฆฌ์ŠคํŠธ๋Š” ์ž์‹ ๊ณผ ์ธ์ ‘ํ•œ ๋‹ค๋ฅธ ์ •์ ์„ ๋‹ด์Œ
  • ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Œ
  • ์‚ฌ์šฉํ•  ๋•Œ
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ

์ธ์ ‘ํ–‰๋ ฌ / ์ธ์ ‘๋ฆฌ์ŠคํŠธ ์„ ํƒ ๋ฐฉ๋ฒ•

  • ์ธ์ ‘ ํ–‰๋ ฌ: ๊ทธ๋ž˜ํ”„์— ๊ฐ„์„ ์ด ๋งŽ์€ ๋ฐ€์ง‘ ๊ทธ๋ž˜ํ”„(Dense Graph)์ผ ๋•Œ
  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ: ๊ทธ๋ž˜ํ”„ ๋‚ด ๊ฐ„์„ ์ด ์ ์€ ์ˆซ์ž๋งŒ์„ ๊ฐ€์ง€๋Š” ํฌ์†Œ ๊ทธ๋ž˜ํ”„(Sparse Graph)์ผ ๋•Œ

๐Ÿค Tree vs Graph

โœ… Ref.

 

[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„(Graph)๋ž€ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

๐Ÿ’™ ๋” ๊ณต๋ถ€ํ•ด๋ณผ ๊ฒƒ

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŠธ๋ฆฌ๊ตฌ์กฐ

'SEB > TIL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

026 | Greedy, Brute-Force, Binary Search Algorithm  (0) 2022.07.29
026 | Time Complexity  (0) 2022.07.28
023 | Data Structure - Stack & Queue  (0) 2022.07.25
019 | Java - I/O, Thread, JVM  (0) 2022.07.19
018 | Java - Enum, Annotation, Lambda, Stream  (0) 2022.07.18
Comments