[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ํƒ์ƒ‰ - BST

BST

BST(Binary Search Tree)๋Š” ํŠธ๋ฆฌ์˜ ํ•œ ์ข…๋ฅ˜์ด์ž ์ด์ง„ํƒ์ƒ‰์„ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

๊ณผ์ •

BST๋ฅผ ์ด์šฉํ•œ ํƒ์ƒ‰์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๋งŒ๋“ค๊ธฐ (์ƒ์„ฑ)
  2. ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์›ํ•˜๋Š” ์š”์†Œ ์ฐพ๊ธฐ (ํƒ์ƒ‰)
  3. ์‚ญ์ œ ๋ฐ ์‚ฝ์ž… ํ•˜๊ธฐ (์‚ญ์ œ / ์‚ฝ์ž…)

 

์˜ˆ์‹œ

๋จผ์ € ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

 

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

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚˜์˜จ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒํ•˜๋ฉด ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋œ๋‹ค.

 

 ๊ทธ ๋‹ค์Œ์—๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ๊ณ  ์‚ญ์ œํ•ด๋ณด์ž. ์›ํ•˜๋Š” ์š”์†Œ๋Š” 6์ด๋‹ค.

 

์™ผ์ชฝ ๊ทธ๋ฆผ์—์„œ ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ์œผ๋กœ์˜ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด์„œ 6์„ ์ฐพ์•„๋‚ธ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  6์„ ์‚ญ์ œํ•œ๋‹ค.

 

์—ฐ์‚ฐ

์œ„์—์„œ ์˜ˆ์‹œ๋กœ ์‚ดํŽด๋ดค๋“ฏ BST์—๋Š” ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๋ผ๋Š” 3๊ฐ€์ง€ ์ฃผ์š”ํ•œ ์—ฐ์‚ฐ์ด ์กด์žฌํ•œ๋‹ค.

์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ 9๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  4, 2, 5๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ณผ์ •์„ ๋ณด๋ฉด์„œ ๊ฐ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ์—ฐ์‚ฐ์„ ์‚ดํŽด๋ณด์ž.

 

ํƒ์ƒ‰

(9 ์œ„์น˜ ํƒ์ƒ‰)

ํƒ์ƒ‰ ์—ฐ์‚ฐ์€ ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š”์ง€, ์กด์žฌํ•œ๋‹ค๋ฉด ์–ด๋–ค ์œ„์น˜์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋Œ€์†Œ ๊ด€๊ณ„์— ๋”ฐ๋ผ ๊ฐ’์„ ํ™•์ •์ง“๊ฑฐ๋‚˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค.

9๋Š” ํ™•์ธํ•œ ์œ„์น˜(8 ๋…ธ๋“œ)์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ์‚ฝ์ž…๋˜๋ฉด ๋œ๋‹ค.

 

์‚ฝ์ž…

(9 ์‚ฝ์ž…)

ํƒ์ƒ‰ ์—ฐ์‚ฐ์œผ๋กœ ํ™•์ธํ•œ ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ํ•ด๋‹น ์œ„์น˜์˜ ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ๋…ธ๋“œ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ํฌ์ธํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ ์žํ•˜๋Š” ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋กœ ํ• ๋‹นํ•ด์ค€๋‹ค.

 

์‚ญ์ œ

์‚ญ์ œ ์—ฐ์‚ฐ์€ ํŠธ๋ฆฌ์˜ ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•  ๊ฒƒ์ธ์ง€์— ๋”ฐ๋ผ ๋ณต์žกํ•ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

  1. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„ ๋…ธ๋“œ์ผ ๊ฒฝ์šฐ

(4 ์‚ญ์ œ)

์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋ฆฌํ”„ ๋…ธ๋“œ์ด๋ฉด ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‹จ์ˆœ ์‚ญ์ œํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์‚ญ์ œํ•˜๊ณ ์‹ถ์€ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„์„œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๋Š” ํฌ์ธํ„ฐ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

  1. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ

(2 ์‚ญ์ œ)

์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ํ•œ์ชฝ์—๋งŒ ์„œ๋ธŒ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋ถ™์ด๋ฉด ๋œ๋‹ค. ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ์— ์ €์žฅ๋œ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ์†Œ ๊ฐ’ ๋Œ€์‹  ์„œ๋ธŒํŠธ๋ฆฌ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  1. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ 2๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง„ ๊ฒฝ์šฐ

(5 ์‚ญ์ œ)

์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋‘์ชฝ ๋ชจ๋‘ ์„œ๋ธŒ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ์„ ํ–‰์ž ๋˜๋Š” ํ›„๊ณ„์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ ์œ„์น˜๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

์„ ํ–‰์ž / ํ›„๊ณ„์ž๋Š” ์ค‘์œ„ ํƒ์ƒ‰์˜ ์‹œ์ ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ ๋ฐ”๋กœ ์ด์ „, ๋ฐ”๋กœ ์ดํ›„์— ์žˆ๋Š” ๋…ธ๋“œ์ด๋‹ค.

 

๋ถ„์„

๊ทธ๋ ‡๋‹ค๋ฉด ์ฒ˜์Œ์— ๋งํ–ˆ๋“ฏ BST๋Š” ๊ทธ๋ƒฅ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์ง„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•ด์„œ ์™œ ์‚ฝ์ž… / ์‚ญ์ œ๊ฐ€ ์‰ฌ์šธ๊นŒ?

 BST์—์„œ๋Š” ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜(์š”์†Œ์˜ ๊ฐฏ์ˆ˜)๊ฐ€ n์ด๋ผ๊ณ  ํ•  ๋•Œ, ํŠธ๋ฆฌ์˜ ๋†’์ด h๋Š” ์ตœ์†Œ lgn, ์ตœ๋Œ€ n์ด๋‹ค. ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์„ ๋•Œ lgn์ด ๋˜๊ณ , ํ•œ ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํ˜•ํƒœ์˜ ํŠธ๋ฆฌ๋Š” n์˜ ๋†’์ด๊นŒ์ง€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 ๋”ฐ๋ผ์„œ ๊ท ํ˜•์ ์œผ๋กœ ์ž˜ ์ƒ์„ฑ๋œ BST์˜ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์ตœ๋Œ€ ๋ฆฌํ”„๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์ง„ํ–‰๋˜๋ฏ€๋กœ ๋ชจ๋‘ O(lgn)์ด๋‹ค.

  BST ์ด์ง„ ํƒ์ƒ‰ (๋ฐฐ์—ด)
ํƒ์ƒ‰ O(lgn) O(lgn)
์‚ฝ์ž… O(lgn) O(n)
์‚ญ์ œ O(lgn) O(n)

 

AVL ํŠธ๋ฆฌ

 BST๋Š” ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํŠธ๋ฆฌ๋กœ ๋งŒ๋“ค์–ด์งˆ ๊ฒฝ์šฐ, ์ˆœ์ฐจ ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ํšจ์œจ์„ ๋‚ด๋ฏ€๋กœ ํŠธ๋ฆฌ๋ฅผ ์ž˜ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. ํšจ์œจ์ ์ธ BST๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” AVL ํŠธ๋ฆฌ์ด๋‹ค.

 

 AVL ํŠธ๋ฆฌ๋Š” Adelson-Velskii์™€ Landis๊ฐ€ 1962๋…„์— ์ œ์•ˆํ•œ ํŠธ๋ฆฌ๋กœ, ๋ชจ๋“  ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด ์ฐจ(๊ท ํ˜• ์ธ์ˆ˜)์˜ ์ ˆ๋Œ“๊ฐ’์ด 1์ดํ•˜์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค. ๋”ฐ๋ผ์„œ BST๊ฐ€ ์น˜์šฐ์นจ ์—†์ด ๋งŒ๋“ค์–ด์ง€๋ฏ€๋กœ ํ‰๊ท , ์ตœ์„ , ์ตœ์•…์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋ชจ๋‘ O(lgn)๋‹ค.

 

 AVL ํŠธ๋ฆฌ๋Š” ์‚ฝ์ž… ์‚ญ์ œ ์—ฐ์‚ฐ ์‹œ ์กฐ๊ฑด์ด ๊นจ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด BST์™€ ๋˜‘๊ฐ™์ด ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์กฐ๊ฑด์„ ํšŒ๋ณตํ•˜๊ธฐ ์œ„ํ•ด ํšŒ์ „์„ ์‚ฌ์šฉํ•œ๋‹ค. LL, RR, LR, RL ๋“ฑ์˜ ํšŒ์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์„ ํšŒ๋ณตํ•œ๋‹ค.

 


์ฐธ๊ณ  : https://ratsgo.github.io/data%20structure&algorithm/2017/10/22/bst/

๋ฐ˜์‘ํ˜•