[์ž๋ฃŒ๊ตฌ์กฐ] 11๊ฐ• - BST, Splay, AVL, BB

2025. 11. 20. 11:47ยท๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต/๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ

โœ… 1. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

(1) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ๊ฐœ๋…

  • ํŠน์ • ๋ฐ์ดํ„ฐ์˜ ํšจ๊ณผ์ ์ธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์ œํ•œ์ ์„ ๊ฐ€์ง€๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.
  • ํŠน์ • ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰๊ณผ ๋…ธ๋“œ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์ฒ˜๋ฆฌ์— ํšจ๊ณผ์ ์ธ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.
  • BST: ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ๋ฐ์ดํ„ฐ์˜ ํƒ์ƒ‰์„ ๊ณ ๋ คํ•˜์—ฌ ๊ตฌ์„ฑ(์„ค๊ณ„)ํ•˜๋ฏ€๋กœ ํƒ์ƒ‰์— ์ตœ์ ํ™”๋œ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.
  • ํ‚ค: ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์—์„œ ๋น„๊ต์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฐ’์ด๋‹ค.
  • ( ์ฆ‰, ์ด์ง„ ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’, ํ˜น์€ ๋…ธ๋“œ๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’ ex.์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ ๋“ฑ )

(2) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ์ œํ•œ์  ๋˜๋Š” ํŠน์ง•

  • ๋ชจ๋“  ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ํฐ ๊ฐ’์ด ๋“ค์–ด๊ฐ€๋Š” ์ œํ•œ์ ์„ ๊ฐ€์ง.

(3) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ์ค‘์œ„์ˆœํšŒ

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ์ค‘์œ„ ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด ์ •๋ ฌ๋œ ์ˆœ์„œ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์„œ ํšจ์œจ์ ์ž„.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ = ์ž‘์€ ๊ฐ’, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ = ํฐ ๊ฐ’์˜ ๊ฒฝ์šฐ ์ค‘์œ„์ˆœํšŒ๋ฅผ ๋Œ๋ฆฌ๋ฉด ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•œ ๋’ค ๋ฃจํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๊ฒƒ์ด ๊ฒฐ๊ตญ ์ž‘์€๊ฐ’ -> ์ค‘๊ฐ„๊ฐ’ -> ํฐ ๊ฐ’ ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ๋กœ ์ถœ๋ ฅ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(4) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ์ˆœํšŒ ์—ฐ์‚ฐ

[ BST - ๋…ธ๋“œ ์ •์˜ ]

  • ์œ„์˜ key ๊ฐ’์€ uniqueํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉฐ, ๋ฐ์ดํ„ฐ ํ•„๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ํ•„๋“œ์ž„.

[ BST - ์ค‘์œ„ ์ˆœํšŒ ์—ฐ์‚ฐ ]

  • (1) root ๋ถ€ํ„ฐ left ๊ฐ€ null ์ผ ๋•Œ ๊นŒ์ง€ left ์˜ ์žŽ ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ.
  • (2) left ์˜ ์žŽ ๋…ธ๋“œ๊ฐ€ null ์ธ ๊ฒฝ์šฐ ์žฌ๊ท€๋กœ ๋Œ์•„์™€ printf() ๋ฅผ ํ†ตํ•ด "1" ์ด ์ˆ˜ํ–‰ ๋จ.
  • (3) ์ดํ›„, right ๋…ธ๋“œ๋กœ ๋‚ด๋ ค๊ฐ”๋Š”๋ฐ, null ์ธ ๊ฒฝ์šฐ ์ด์ „ ์žฌ๊ท€์ธ "2" ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • (4) ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋ฉด 1 -> 2 -> 3 -> 5 -> 4 -> 6 -> 7 -> 8 -> 9 ์˜ ์ˆ˜ํ–‰ ์ˆœ์„œ๊ฐ€ ๋  ๊ฒƒ์ž„.

(5) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ํƒ์ƒ‰ ์—ฐ์‚ฐ ( ํŠน์ • ๊ฐ’ ์ฐพ๊ธฐ )

  • (1) searchBST(): ํ˜•์‹ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ root , key (๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ‚ค) ๋ฅผ ๊ฐ™์ด ๋„˜๊น€.
  • (2) if(root == NULL): root ๊ฐ€ ๋งŒ์•ฝ null ์ธ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด ๊ฐ’๋„ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์˜ˆ์™ธ์ฒ˜๋ฆฌ
  • (3) if(key == root -> key): root(ํ˜„์žฌ์œ„์น˜) ์™€ key ๊ฐ™์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด๋ฏ€๋กœ ๋ฐ”๋กœ ๋ฆฌํ„ด์„ ํ•ด์ฃผ๋ฉด ๋จ.
  • (4) else if(key < root -> key): ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹ ๊ฒฝ์šฐ, key ๊ฐ’๊ณผ root(ํ˜„์žฌ ์œ„์น˜) ๊ฐ’๊ณผ ๋น„๊ต๋ฅผ ํ•˜๊ณ  ๋งŒ์•ฝ ๋‚ด๊ฐ€ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋” ์ž‘๋‹ค๋ฉด, searchBST() ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ ํ˜ธ์ถœ ํ›„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ left ๋…ธ๋“œ ํฌ์ธํ„ฐ์™€ key ๊ฐ’์„ ๊ฐ™์ด๋„˜๊น€.
  • (5) else if(key > root -> key): ๋งŒ์•ฝ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹ ๊ฒฝ์šฐ, key ๊ฐ’๊ณผ root(ํ˜„์žฌ ์œ„์น˜) ๊ฐ’๊ณผ ๋น„๊ต ํ›„ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋” ํฌ๋‹ค๋ฉด, ์ด๋ฒˆ์—” right ํฌ์ธํ„ฐ์™€ key ๊ฐ’์„ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๋„˜๊น€.
  • ํ•ต์‹ฌ์€ ํ•ด๋‹น ๊ณผ์ •์ด ๋ฐ˜๋ณต์ด ๋˜๋ฉด, ํฐ ์ˆ˜ ์ž‘์€ ์ˆ˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ์„ ๋•Œ ๊นŒ์ง€ ๋‚ด๋ ค๊ฐˆ ์ˆ˜ ์žˆ์Œ.

(6) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ์‚ฝ์ž… ์—ฐ์‚ฐ

  • (1) insertBST(BSTnode* root, char key): root ์™€ ๋‚ด๊ฐ€ ์‚ฝ์ž…ํ•˜๊ณ ์ž ํ•˜๋Š” key ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋จ.
  • (2) BSTnode* newNode = (BSTnode*)malloc(sizeof(BSTnode)): BSTnode(์‹ค์ œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ rootNode) ์™€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๋„๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์„œ newNode์— ํ• ๋‹นํ•˜๋Š” ์ž‘์—…์ž„. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š”, ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ํ•ด๋‹น ๋…ธ๋“œ์— ๋‚ด๊ฐ€ ์ฐพ๋Š” key ๋ฅผ ๋„ฃ๊ฒŒ ๋˜๋ฉฐ, ํ•ด๋‹น newNode ๋Š” ์‚ฝ์ž… ๋ฐ ๋น„๊ต ๋Œ€์ƒ์œผ๋กœ ์‹ค์ œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์™€ ๋น„๊ต ํ›„ ์‚ฝ์ž…์ด ๋  ์˜ˆ์ •์ž„.
  • (3) newNode -> key = key, newNode -> left = newNode -> right = NULL: ์ƒˆ๋กœ์šด ๋น„๊ต ๋ฐ ์‚ฝ์ž… ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ.
  • (4) if(root == NULL): ๋งŒ์•ฝ root ๊ฐ€ NULL์ธ ๊ฒฝ์šฐ root ์—๋Š” ์ƒˆ๋กœ์šด newNode ๋ฅผ ๋„ฃ์œผ๋ฉด ๋์ž„. ( ์–ด์ฐจํ”ผ ์‚ฝ์ž… ๋  ๋…ธ๋“œ๊ธฐ ๋•Œ๋ฌธ )
  • (5) ptr = root: BSTnode* ptr; ์— root ๋ฅผ ๋„ฃ์–ด์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ptr(์‹ค์ œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ)์™€ newNode๊ฐ€ ๋น„๊ต๊ฐ€๋จ.
  • (6) while(ptr): ptr(์‹ค์ œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ์œ„์น˜) ์ด NULL ์ด ์•„๋‹ ๋•Œ๊นŒ์ง€(์ฆ‰, ์œ ํšจํ•œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ๊นŒ์ง€) ๋ฐ˜๋ณต๋ฌธ ์ˆ˜ํ–‰
  • (7) if(key == ptr -> key): ์‚ฝ์ž…ํ•  ํ‚ค๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ํ‚ค์™€ ๊ฐ™์œผ๋ฉด, BST์—์„œ ์ค‘๋ณต๋œ ํ‚ค๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์‚ฝ์ž…์„ ์ทจ์†Œํ•˜๊ณ  ํ˜„์žฌ ๋ฃจํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.( ๋™์ผํ•œ ํ‚ค๊ฐ’์ด ์กด์žฌํ•˜๋ฉด ์‚ฝ์ž…ํ•˜๋Š”๋ฐ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ ์ค‘๋ณตํ—ˆ์šฉ์„ ์•ˆํ•จ. )
  • (8) else if(key < ptr -> key): newNode์˜ key ์ฆ‰, ์ฐพ๊ณ ์ž ํ•˜๋Š” ํ‚ค๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘์œผ๋ฉด, BST ๊ทœ์น™์— ๋”ฐ๋ผ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋กœ ์ด๋™์„ ์‹œํ‚ด.
  • (9) if(ptr -> left == NULL): ๋งŒ์•ฝ ptr ์˜ left ๊ฐ€ NULL ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜์— newNode ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  return ๋ฐ˜๋ณต ์ข…๋ฃŒ
  • (10) else { ptr = ptr -> left }: ์•„๋‹ ๊ฒฝ์šฐ ptr ์˜ left ๋กœ ์ด๋™
  • (11) else: 8 ๋ฒˆ์˜ else if ์ฆ‰, newNode key ๊ฐ€ ํ˜„์žฌ key ๋ณด๋‹ค ์ž‘์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š”, ํฐ ๊ฒฝ์šฐ๋‹ˆ๊นŒ ptr ์˜ right ๊ฐ€ NULL ์ธ์ง€ ํ™•์ธ ํ•˜๊ณ , NULL ์ด๋ฉด ํ•ด๋‹น right ์— newNode ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , NULL ์ด ์•„๋‹ˆ๋ฉด ptr ์˜ right ๋กœ ์ด๋™์„ ์‹œํ‚ด.

  • ํ•ต์‹ฌ: ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ root ๋…ธ๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ, ์ด ๋…ธ๋“œ๋Š” ์‚ฝ์ž…ํ•  ๋Œ€์ƒ์˜ ๋…ธ๋“œ๊ฐ€ ๋˜๊ณ , ์ดํ›„ ๋ฐ˜๋ณต ์ž‘์—…์„ ํ†ตํ•ด ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ root ๋…ธ๋“œ์™€ ๋น„๊ต(ํฌ๊ณ  ์ž‘๊ณ )ํ•˜๋ฉด์„œ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์ž„.

(7) ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) - ์‚ญ์ œ ์—ฐ์‚ฐ

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์— ๊ด€ํ•œ ๋‚ด์šฉ์ž„.
  • (1) ์‚ญ์ œ ๋  key ๋ฅผ ๋ฐ›์•„์„œ root ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ์ด์ง„ ํƒ์ƒ‰์˜ ๊ทœ์น™์— ๋งž๊ฒŒ ํƒ์ƒ‰์„ ํ•˜๊ฒŒ ๋จ.
  • (2) ์‚ญ์ œ ๋  key ์™€ ๋™์ผํ•œ key ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ๋Š์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ์‚ญ์ œ๊ฐ€ ๋œ ์ƒํƒœ๊ฐ€ ๋จ.
  • (3) ์ดํ›„, ์‚ญ์ œ ๋œ ๋…ธ๋“œ์˜ ์œ„์น˜๊ฐ€ leafNode ์ธ ๊ฒฝ์šฐ ๋” ์ด์ƒ์˜ ์—ฐ์‚ฐ์€ ์—†์Œ.
  • (4) ํ•˜์ง€๋งŒ, leftNode ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์ด๋ฉฐ, ์ด๋•Œ๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ์™€ 2๊ฐœ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๋งŒ์•ฝ 1๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ๋‹จ์ˆœํžˆ ์‚ญ์ œ ํ›„ ์‚ญ์ œ ๋œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ์™€ ์ž์‹์„ ์—ฐ๊ฒฐํ•˜๋ฉด ๋๋‚˜์ง€๋งŒ, 2๊ฐœ์ธ ๊ฒฝ์šฐ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๊ธฐ์ค€์„ ์ •ํ•ด์„œ ํ•ด๋‹น ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ์— ์ฑ„์›Œ์ค˜์•ผ ํ•œ๋‹ค.
  • (5) ํ•ด๋‹น ๊ธฐ์ค€์€ ์‚ญ์ œ ๋œ ๋…ธ๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋‘ ๊ฐ€์ง€์˜ ๊ธฐ์ค€์ด ์žˆ์Œ.
  • ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ธฐ์ค€: ์‚ญ์ œ ๋œ ๋…ธ๋“œ ์œ„์น˜๋กœ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
  • ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ธฐ์ค€: ์‚ญ์ œ ๋œ ๋…ธ๋“œ ์œ„์น˜๋กœ  ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
  • ์ด๋Ÿฌํ•œ ๊ธฐ์ค€์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ ํ•  ๋•Œ ์ •ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.

[ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ - ์‚ญ์ œ ์—ฐ์‚ฐ ( ์‹ค์ œ ๊ตฌํ˜„ ) ]

  • (1) ์ž์‹ ๋…ธ๋“œ๊ฐ€ 0๊ฐœ์ธ ๊ฒฝ์šฐ: ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๊ฐ€ 0๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์žŽ ๋…ธ๋“œ ์ด๋ฏ€๋กœ, ์กฐ๊ฑด๋ฌธ์„ ๋ณด๋ฉด ์‚ญ์ œ ๋˜๋Š” ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค์ด NULL ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ์„ ๋Š๊ฒŒ ๋จ. ( ๋งค์šฐ ๊ฐ„๋‹จํ•จ )
  • (2) ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ์ธ ๊ฒฝ์šฐ: ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด, ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ๋กœ ์˜ฌ๋ฆฌ๋ฉด ๋๋‚˜๊ณ  ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์‚ญ์ œ๋˜๋Š” ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ฃผ๋ฉด ํ•ด๊ฒฐ์ด ๋œ๋‹ค. ์ดํ›„, ๋…ธ๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋ฉด ๊ทธ ์ž๋ฆฌ๋Š” ๋น„์–ด์ง„ ์ž๋ฆฌ๊ฐ€ ๋˜๋ฏ€๋กœ ์˜ฌ๋ผ๊ฐ„ ๊ธฐ์กด ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  • (3) ์ž์‹ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ: ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•œ ๋’ค ์‚ญ์ œ ๋œ ๋…ธ๋“œ์˜ ๊ธฐ์กด ์ž์‹ ๋…ธ๋“œ์™€ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ•˜๋ฉด ๋จ.

โœ… 2. ๋ณ€ํ˜• BST - Splay, AVL, BB

  • Splay, VAL, BB ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด์ง€๋งŒ, ์„ฑ๋Šฅ์„ ์œ„ํ•ด ๊ฐ์ž ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ž๊ธฐ ๊ท ํ˜•์„ ๋งŒ๋“œ๋Š” ๋ณ€ํ˜•๋“ค์ด๋‹ค. ์ฆ‰, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) ์˜ ํƒ์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ ๋“ฑ ์„ฑ๋Šฅ์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„๊ฒƒ์ž„.
  • ์ž์„ธํ•˜๊ฒŒ๋Š”, BST๋Š” ์ž…๋ ฅ๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ตฌ์กฐ๊ฐ€ ๋žœ๋คํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง€๊ณ , ์šด ๋‚˜์˜๋ฉด ํƒ์ƒ‰์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด AVL, RB, Splay ๊ฐ™์€ ๊ท ํ˜• ํŠธ๋ฆฌ๋“ค์€ ‘๊ตฌ์กฐ๊ฐ€ ๋‚˜๋น ์ง€์ง€ ์•Š๋„๋ก ๊ฐ•์ œ๋กœ ์กฐ์ •ํ•˜๋Š” ํ™•์ • ํŠธ๋ฆฌ'๋‹ค.
  • ์ฆ‰, BST ์˜ ๊ท ํ˜•์ด ์ž˜ ๋งž๋Š”๋‹ค๋Š”๊ฑด, ํŠธ๋ฆฌ ๋‚ด๋ถ€์˜ ๋…ธ๋“œ๋“ค์ด ํƒ์ƒ‰์— ์œ ๋ฆฌํ•˜๊ฒŒ ์œ„์น˜ํ•ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํ•ด์„.

(1) Splay ํŠธ๋ฆฌ

  • ์ž์ฃผ ํƒ์ƒ‰ํ•˜๋Š” ํ‚ค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ์— ์œ„์น˜ํ•˜๋„๋ก ๊ตฌ์„ฑํ•œ BS ํŠธ๋ฆฌ ( ์ž์ฃผ ํƒ์ƒ‰ํ•˜๋Š” ํ‚ค๋ฅผ ์œ„๋กœ ์˜ฌ๋ฆฌ๋Š” ๋А๋‚Œ์ž„. )
  • ์ฆ‰, ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
  • ๋˜ํ•œ, ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ํ›„ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ Splay ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ์žฌ์ •๋ ฌํ•จ.
  • Splay ์—ฐ์‚ฐ: ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์˜ˆ์ƒํ•˜์—ฌ ๋ฃจํŠธ๋กœ ์˜ฌ๋ ค์ฃผ๋Š” ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Splay ์—ฐ์‚ฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • Splay ํŠธ๋ฆฌ: Splay ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๊ณ  ์ ์šฉํ•˜์—ฌ ์žฌ๊ตฌ์„ฑ๋˜์–ด ์ƒ์„ฑ๋œ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

(2) Splay ํŠธ๋ฆฌ - ์—ฐ์‚ฐ

  • Splay ํŠธ๋ฆฌ ์—ฐ์‚ฐ์€ ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋Š” ๋‹ค์‹œ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์˜ˆ์ƒํ•˜์—ฌ ๋ฃจํŠธ๋กœ ์˜ฌ๋ ค์ฃผ๋Š” ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•จ.
  • Splay ์—ฐ์‚ฐ์˜ 3๊ฐ€์ง€ ํŒจํ„ด: Zig , Zig-Zig , Zig-Zag ์„ธ ๊ฐ€์ง€ ํŒจํ„ด์ด ์กด์žฌํ•จ.
  • ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ ๋ชจ๋‘ ๊ธฐ๋ณธ์œผ๋กœ ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๊นŒ์ง€ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ํšŒ์ „ํ•˜๋ฉฐ ํŠธ๋ฆฌ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•จ.
  • ์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋…ธ๋“œ ๊ธฐ์ค€: ๊ฒ€์ƒ‰(์ฐพ์œผ๋ ค๋Š” ๊ฐ’์˜ ๋…ธ๋“œ), ์‚ฝ์ž…(์ƒˆ๋กœ ๋„ฃ๋Š” ๋…ธ๋“œ), ์‚ญ์ œ(์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ) ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋…ธ๋“œ๊ฐ€ ๋ฐ”๋กœ "์ตœ๊ทผ์— ์ ‘๊ทผํ•œ ๋…ธ๋“œ" ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ***์ฆ‰, ๊ฒ€์ƒ‰ / ์‚ฝ์ž… / ์‚ญ์ œ ์ดํ›„ ๋ฐ”๋กœ Splay ์—ฐ์‚ฐ ์„ ํ†ตํ•ด ์žฌ๊ตฌ์„ฑ์„ ํ•˜๋Š” ํŠธ๋ฆฌ๋ผ๊ณ  ๋ณด๋ฉด ๋  ๋“ฏ.***
  • ***๊ฒฐ๋ก ์€ ๊ฒ€์ƒ‰ / ์‚ฝ์ž… / ์‚ญ์ œ ์—ฐ์‚ฐ ํ›„ Zig, Zig-Zig, Zig-Zag ์—ฐ์‚ฐ ํŒจํ„ด์„ ๊ณจ๋ผ์„œ ํ™œ์šฉํ•˜๋Š” ๋А๋‚Œ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ๋ ๋“ฏ.***
  • ํšŒ์ „์ด๋ž€? - ๋‹จ์ˆœํžˆ ๋…ธ๋“œ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ์ž‘์—…์œผ๋กœ, BST ์„ฑ์งˆ ์œ ์ง€ + ๋ฃจํŠธ๋กœ ์˜ฌ๋ฆฌ๋Š” ๋ชฉ์ ์„ ๊ฐ€์ง.

[ Zig ํŒจํ„ด(์—ฐ์‚ฐ) ]

  • Splay Tree ์—์„œ ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ๋ฃจํŠธ์ผ ๋•Œ ์ˆ˜ํ–‰๋˜๋Š” ๋‹จ์ผ ํšŒ์ „์„ ํ•˜๋Š” ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์‰ฝ๊ฒŒ๋งํ•ด, ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋ฅผ x๋ผ๊ณ  ํ•˜๋ฉด, x ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋ฐ”๋กœ ์˜ฌ๋ ค๋ฒ„๋ฆฌ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • ์ดํ›„, ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค ๋˜ํ•œ, ์žฌ๊ตฌ์„ฑ์ด ๋  ์ˆ˜ ์žˆ์Œ.
  • ๋˜ํ•œ, Zig ํŒจํ„ด์€ Splay ์—ฐ์‚ฐ์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • ์ตœ์ข…์ ์œผ๋กœ ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ x๊ฐ€ ๋ฃจํŠธ๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ํšŒ์ „ ๋‹จ๊ณ„ ์ค‘ ํ•˜๋‚˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

[ Zig-Zig ํŒจํ„ด(์—ฐ์‚ฐ) ]

  • ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ๋ฃจํŠธ๋กœ ์˜ฌ๋ฆฌ๊ณ  ์ž๊ธฐ๊ฐ€ ๋ฃจํŠธ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ์—ฐ์‚ฐ์ด๋‹ค. ( ๋‘๊ฐœ์˜ ๋‹จ์ผ ํšŒ์ „ )
  • ์œ„์˜ ์ด๋ฏธ์ง€์—์„œ (1), (2), (3), (4) ์‚ผ๊ฐํ˜•์€ ์„œ๋ธŒํŠธ๋ฆฌ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋งŽ์€ ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ์œ„์™€๊ฐ™์ด ์ ์€ ๋…ธ๋“œ๋งŒ ์˜ฎ๊ฒจ์„œ ๊ตฌ์กฐ๋ฅผ ์žฌ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ์ง€ ์•Š๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ.

[ Zig-Zag ํŒจํ„ด(์—ฐ์‚ฐ) ]

  • ์ตœ๊ทผ ์ ‘๊ทผํ•œ ๋…ธ๋“œ๋ฅผ x๋กœ ๋ณผ ๋•Œ x ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฃจํŠธ๋…ธ๋“œ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ณผ์ •์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.

(3) Splay ํŠธ๋ฆฌ - ์—ฐ์‚ฐ ์˜ˆ์ œ

  • ์™ผ์ชฝ ํŠธ๋ฆฌ์— ๋Œ€ํ•ด 7์ด ๋ฃจํŠธ๊ฐ€ ๋˜๋„๋ก Splay ์—ฐ์‚ฐ์„ ์ ์šฉํ•œ ์˜ˆ์ œ์ž„.

(4) Splay ํŠธ๋ฆฌ - ์ •๋ฆฌ

  • ์ตœ๊ทผ ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฃจํŠธ๋กœ ์˜ฌ๋ฆฌ๋Š” ์žฌ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์ตœ๊ทผ ์‚ฌ์šฉ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•จ.
  • ์ฆ‰, Splay ํŠธ๋ฆฌ์˜ ํ•ต์‹ฌ์€ ์žฌ๊ตฌ์„ฑ์„ ํ†ตํ•œ ์ •๋ ฌ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.

(5) AVL ํŠธ๋ฆฌ

  • ์ผ๋ฐ˜์ ์œผ๋กœ BST๋Š” ๋‹จ์ˆœํžˆ ์ด์ง„ ํŠธ๋ฆฌ์˜ ๊ทœ์น™๊ณผ ์™ผ์ชฝ < ํ˜„์žฌ < ์˜ค๋ฅธ์ชฝ ๊ทœ์น™๋งŒ ๋”ฐ๋ฅด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์ˆœ์„œ์— ๋”ฐ๋ผ ํŠธ๋ฆฌ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์น  ์ˆ˜ ์žˆ์Œ. ์ฆ‰, ํŽธํ–ฅ ํŠธ๋ฆฌ๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž„.
  • ์ฆ‰, ์ด๋Ÿฌํ•œ ํŽธํ–ฅ ํŠธ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ๊ฒƒ์ด AVL ํŠธ๋ฆฌ์ด๋‹ค.
  • BST ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ท ํ˜•์„ ๋งž์ถ”๋ ค๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋†’์ด ๊ท ํ˜• ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์ž๋Š” ๊ฐœ๋…์œผ๋กœ AVL ํŠธ๋ฆฌ๊ฐ€ ๋“ฑ์žฅ ํ•œ ๊ฒƒ์œผ๋กœ๋„ ๋ด„. ( ๋†’์ด์ฐจ์ด๋Š” 1์ฐจ์ด ์ •๋„๋กœ ๋ด„ )

(6) AVL ํŠธ๋ฆฌ - ํŠน์ง•

  • AVL ํŠธ๋ฆฌ์˜ ํŠน์ง•: ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ BF(x) = { -1, 0, 1 } ์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง.
  • BF(balance factor): ์ž„์˜์˜ ๋…ธ๋“œ x์˜ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด ์ฐจ์ด๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ x์˜ balance factor ๋ผํ•จ.
  • BF(x) = { -1, 0, 1 }: ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ -1 , 0 , 1 ๋ฐธ๋Ÿฐ์Šค ํŒฉํ„ฐ๋ฅผ ๊ฐ€์ง€๋Š” ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST) ๋ฅผ ์˜๋ฏธํ•จ.
  • ์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด - ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด ๋ฅผ ์ง„ํ–‰ ํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ -1, 0, 1 ์„ ์–ป์–ด์•ผ ๋ฐธ๋Ÿฐ์Šค(๊ท ํ˜•)์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จ์„ ํ•˜๊ณ , ๋งŒ์•ฝ ํ•ด๋‹น ์ˆ˜์— ํฌํ•จ์ด ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ์œ„์น˜ ์กฐ์ •์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์œผ๋กœ ํŒ๋‹จํ•ด ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๊ฒŒ ๋จ.
  • ํŠธ๋ฆฌ์˜ ๋†’์ด: ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ๋ถ€ํ„ฐ ์žŽ ๋…ธ๋“œ๊นŒ์ง€์˜ ์ฐจ์ˆ˜๋ฅผ ๋†’์ด๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ. ์ฆ‰, ๋…ธ๋“œ๊ฐ€ 3๊ฐœ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฑด ๋†’์ด๊ฐ€ 2์ž„.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ balance factor ๋ฅผ ํ†ตํ•ด ๊ท ํ˜•์„ ์œ ์ง€ํ•จ.

(7) AVL ํŠธ๋ฆฌ - balance factor ์˜ˆ์‹œ

  • ๋งŒ์•ฝ 50์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค๋ฉด, 50์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๋†’์ด๊ฐ€ 1์ด ๋  ๊ฒƒ์ด๊ณ , ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” 2๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด(1) - ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋†’์ด(2) ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, -1 ๋†’์ด์ฐจ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ ๊ฒฐ๊ณผ -1, 0, 1 ์— ํฌํ•จ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท ํ˜•์ด ๋งž๋‹ค๊ณ  ํŒ๋‹จํ•ด ํ•ด๋‹น 50 ๋…ธ๋“œ๋Š” ์กฐ์ •์ด ํ•„์š”์—†๋‹ค ํŒ๋‹จ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ***์ฆ‰, AVL ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋ฐธ๋Ÿฐ์Šค ํŒฉํ„ฐ๋ฅผ ๊ตฌํ•ด๊ฐ€์ง€๊ณ  ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ๋‹ค๋ฉด ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๊ฐ€ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ•ด ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ์ž‘์—…์ธ ์œ„์น˜ ์กฐ์ •์„ ํ•˜๋Š” ๊ทธ๋Ÿฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.***
  • ***์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ์กฐํšŒ๋ฅผ ์ œ์™ธํ•œ ๋งค๋ฒˆ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ๊ณผ์ •์—์„œ ๋ฐธ๋Ÿฐ์Šค ํŒฉํ„ฐ๋ฅผ ํ™•์ธํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•จ.***

(8) AVL ํŠธ๋ฆฌ - ๋™์ž‘ ์˜ˆ์‹œ

  • ์œ„์™€ ๊ฐ™์ด 90์„ ์‚ฝ์ž… ํ•œ ๋’ค ์‚ฝ์ž… ์—ฐ์‚ฐ์ด ์ด๋ค„์กŒ์œผ๋ฏ€๋กœ, BF(balance factor) ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ 50์„ ๋ณด๋ฉด 1, 0, -1 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท ํ˜•์ด ๋งž์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จ์„ ํ•˜๊ฒŒ ๋จ.
  • ๋˜ํ•œ, ํ•ด๋‹น ๊ตฌ์กฐ๋Š” 50์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ท ํ˜•์ด ๊นจ์ง„ ์ƒํƒœ๋กœ ์˜ค๋ฅธ์ชฝ ํŽธํ–ฅ ํŠธ๋ฆฌ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • ์ด์ œ ๊ท ํ˜•์„ ์žก์•„์ค˜์•ผํ•˜๋Š”๋ฐ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผํ•˜๋ฉฐ, ์œ„์˜ ์˜ค๋ฅธ์ชฝ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋ชจ์Šต์œผ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋จ.
  • ์ฆ‰, ๊ฒฐ๊ณผ์ ์œผ๋กœ AVL ํŠธ๋ฆฌ์˜ ํŠน์ง•(๋†’์ด์ฐจ 1, 0 ,-1) ์„ ๋งŒ์กฑํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

(9) BB ํŠธ๋ฆฌ

[ BB ํŠธ๋ฆฌ ( Bounded-Balanced Tree ]

  • BB ํŠธ๋ฆฌ์˜ "Bounded-Balanced Tree" ์˜ ๋œป์€ "๊ฒฝ๊ณ„๊ฐ€ ์„ค์ •๋œ ๊ท ํ˜• ํŠธ๋ฆฌ" ๋˜๋Š” " ๊ท ํ˜•์ด ์ผ์ • ๋ฒ”์œ„(ํ•œ๊ณ„) ์•ˆ์—์„œ ์œ ์ง€๋˜๋Š” ํŠธ๋ฆฌ" ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์‰ฝ๊ฒŒ๋งํ•ด, AVL ํŠธ๋ฆฌ ์ฒ˜๋Ÿผ ์™„๋ฒฝํ•œ ๊ท ํ˜•์„ ์žก๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ—ˆ์šฉ๋œ ๋ฒ”์œ„ ์•ˆ์—์„œ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ํŠธ๋ฆฌ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฆ‰, ํ—ˆ์šฉ ์˜ค์ฐจ ๋‚ด์—์„œ ๊ท ํ˜•์„ ์œ ์ง€ํ•ด์ฃผ๋ฉฐ, ๊ท ํ˜• ์กฐ๊ฑด์ด ์‹ฌํ•˜์ง€ ์•Š์ง€๋งŒ, ๋„ˆ๋ฌด ํํŠธ๋Ÿฌ์ง€์ง€ ์•Š๊ฒŒ ์ œํ•œ๋œ ๊ท ํ˜• ํŠธ๋ฆฌ์ž„.
  • ***๊ทธ๋ฆฌ๊ณ  ํ•ต์‹ฌ์€ ํ•ด๋‹น BB ํŠธ๋ฆฌ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ท ํ˜•์€ ๋ฌด๊ฒŒ ๊ธฐ๋ฐ˜ ๊ท ํ˜•์„ ์˜๋ฏธํ•œ๋‹ค.***
  • ๊ฒฐ๋ก ์€ ํ•ด๋‹น ํŠธ๋ฆฌ๋Š” ๋†’์ด๊ฐ€ ์•„๋‹Œ **์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜(ํฌ๊ธฐ/๋ฌด๊ฒŒ)**๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ท ํ˜•์„ ์žก๋Š”๋‹ค.

[ ๊ท ํ˜• ์กฐ๊ฑด: β (๋ฒ ํƒ€) ]

  • BB ํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ์ •๋„๋Š” **๊ท ํ˜• ์ธ์ˆ˜ β(๋ฒ ํƒ€)** ๋ผ๋Š” ๊ฐ’์œผ๋กœ ์ œ์–ด๊ฐ€ ๋œ๋‹ค.

[ β ๊ฐ’์— ๋”ฐ๋ฅธ ๊ตฐํ˜• ์ •๋„ ]

  • ๐Ÿ“Œ ์ฐธ๊ณ : β๊ฐ€ 1/2์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ท ํ˜•์€ ์—„๊ฒฉํ•ด์ง€์ง€๋งŒ, ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ์žฌ์กฐ์ • (Rebalancing) ์ž‘์—…์ด ๋” ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.

[ ๊ฒฐ๋ก  ]

  • ๊ฒฐ๋ก ์ ์œผ๋กœ, BB ํŠธ๋ฆฌ๋Š” β ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฐ„์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜ ๋น„์œจ์„ ์ œํ•œํ•จ์œผ๋กœ์จ "๋„ˆ๋ฌด ๊ธฐ์šธ์–ด์ง€์ง€ ์•Š๋„๋ก" ๊ทœํ˜„์„ ์œ ์ง€ํ•˜๋Š” ํšจ์œจ์ ์ธ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ.
  • AVL ํŠธ๋ฆฌ๋Š” ๋†’์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ , BB ํŠธ๋ฆฌ๋Š” ๋ฌด๊ฒŒ(๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ท ํ˜•์„ ์žก๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์ž„.

'๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต > ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] 13๊ฐ• - ๋ฉ€ํ‹ฐ์›จ์ด ํƒ์ƒ‰ ํŠธ๋ฆฌ(2)  (0) 2025.12.05
[์ž๋ฃŒ๊ตฌ์กฐ] 12๊ฐ• - ๋ฉ€ํ‹ฐ์›จ์ด ํƒ์ƒ‰ ํŠธ๋ฆฌ(1)  (0) 2025.11.22
[์ž๋ฃŒ๊ตฌ์กฐ] 9๊ฐ• - ํž™  (0) 2025.11.13
[์ž๋ฃŒ๊ตฌ์กฐ] 8๊ฐ• - ์Šค๋ ˆ๋“œํŠธ๋ฆฌ  (0) 2025.10.23
[์ž๋ฃŒ๊ตฌ์กฐ] 7๊ฐ• - ํŠธ๋ฆฌ  (0) 2025.10.14
'๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต/๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์ž๋ฃŒ๊ตฌ์กฐ] 13๊ฐ• - ๋ฉ€ํ‹ฐ์›จ์ด ํƒ์ƒ‰ ํŠธ๋ฆฌ(2)
  • [์ž๋ฃŒ๊ตฌ์กฐ] 12๊ฐ• - ๋ฉ€ํ‹ฐ์›จ์ด ํƒ์ƒ‰ ํŠธ๋ฆฌ(1)
  • [์ž๋ฃŒ๊ตฌ์กฐ] 9๊ฐ• - ํž™
  • [์ž๋ฃŒ๊ตฌ์กฐ] 8๊ฐ• - ์Šค๋ ˆ๋“œํŠธ๋ฆฌ
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด๋ณด๊ธฐ (195) N
      • ๐ŸŽ“๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต (51) N
        • โš™๏ธ์ปดํ“จํ„ฐ์˜ ์ดํ•ด (11)
        • ๐Ÿ’ป์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก  (15)
        • ๐Ÿ”ข์ž๋ฃŒ๊ตฌ์กฐ (13) N
        • ๐ŸŒ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ… (11)
        • ๐Ÿ–ฅ๏ธ์ปดํ“จํ„ฐ๊ณผํ•™๊ณผ (1)
      • ๐Ÿ› ๏ธBackend (68)
        • ๐Ÿ“š๋ฐฑ์—”๋“œ ๊ณต๋ถ€ (4)
        • โ˜•Java (23)
        • ๐ŸŒณSpring (13)
        • โš™๏ธC (12)
        • โšกPython (13)
        • JavaScript (1)
        • ๐Ÿ›ข๏ธDatabase (0)
        • Algorithm Problem Solving (2)
      • ๐ŸŒ Network (7)
        • ๐Ÿ“œHTTP (7)
      • ๐Ÿš€DevOps (1)
      • โ›บ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ (64)
      • ์ •๋ณด (2)
      • ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ธ€ (2)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

    • GitHub
  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ปดํ“จํ„ฐ์˜ ์ดํ•ด
    spring
    ์ž๋ฃŒ๊ตฌ์กฐ
    Python
    ์ž…์ถœ๋ ฅ
    ๋ฐฉํ†ต๋Œ€
    ์ปดํ“จํ„ฐ๊ณผํ•™ ๊ฐœ๋ก 
    ์ž๋ฐ”
    ์œ ๋น„์ฟผํ„ฐ์Šค ์ปดํ“จํŒ…๊ฐœ๋ก 
    ์ปดํŒŒ์ผ๋Ÿฌ
    ๋ฐฉ์†กํ†ต์‹ ๋Œ€ํ•™๊ต
    ๋ฐฉ์†ก๋Œ€
    C์–ธ์–ด
    C
    Java
    ๋ฐฐ์—ด
    C ์–ธ์–ด
    ํŒŒ์ด์ฌ
    ์œ ๋น„์ฟผํ„ฐ์Šค
    ํ•จ์ˆ˜
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
junbin2
[์ž๋ฃŒ๊ตฌ์กฐ] 11๊ฐ• - BST, Splay, AVL, BB
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”