Skip to content

seven05/rbtree-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

23 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Red-Black Tree ๊ตฌํ˜„

Balanced search tree๋กœ ๋งŽ์ด ์“ฐ์ด๋Š” Red-black tree (์ดํ•˜ RB tree)๋ฅผ C ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋Š” ์ถ”์ƒ ์ž๋ฃŒํ˜• (ADT: abstract data type)์€ ordered set, multiset ์ž…๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๋ฒ”์œ„

๋‹ค์Œ ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก RB tree๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  • tree = new_tree(): RB tree ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ

    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ tree๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋‚ด์šฉ๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • delete_tree(tree): RB tree ๊ตฌ์กฐ์ฒด๊ฐ€ ์ฐจ์ง€ํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜

    • ํ•ด๋‹น tree๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ „๋ถ€ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (valgrind๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์•„์•ผ ํ•จ)
  • tree_insert(tree, key): key ์ถ”๊ฐ€

    • ๊ตฌํ˜„ํ•˜๋Š” ADT๊ฐ€ multiset์ด๋ฏ€๋กœ ์ด๋ฏธ ๊ฐ™์€ key์˜ ๊ฐ’์ด ์กด์žฌํ•ด๋„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ ํ•ฉ๋‹ˆ๋‹ค.
  • ptr = tree_find(tree, key)

    • RB tree๋‚ด์— ํ•ด๋‹น key๊ฐ€ ์žˆ๋Š”์ง€ ํƒ์ƒ‰ํ•˜์—ฌ ์žˆ์œผ๋ฉด ํ•ด๋‹น node pointer ๋ฐ˜ํ™˜
    • ํ•ด๋‹นํ•˜๋Š” node๊ฐ€ ์—†์œผ๋ฉด NULL ๋ฐ˜ํ™˜
  • tree_erase(tree, ptr): RB tree ๋‚ด๋ถ€์˜ ptr๋กœ ์ง€์ •๋œ node๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜

  • ptr = tree_min(tree): RB tree ์ค‘ ์ตœ์†Œ ๊ฐ’์„ ๊ฐ€์ง„ node pointer ๋ฐ˜ํ™˜

  • ptr = tree_max(tree): ์ตœ๋Œ€๊ฐ’์„ ๊ฐ€์ง„ node pointer ๋ฐ˜ํ™˜

  • tree_to_array(tree, array, n)

    • RB tree์˜ ๋‚ด์šฉ์„ key ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„ array๋กœ ๋ณ€ํ™˜
    • array์˜ ํฌ๊ธฐ๋Š” n์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ tree์˜ ํฌ๊ธฐ๊ฐ€ n ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” ์ˆœ์„œ๋Œ€๋กœ n๊ฐœ ๊นŒ์ง€๋งŒ ๋ณ€ํ™˜
    • array์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ด ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๋Š” ์ชฝ์—์„œ ์ค€๋น„ํ•˜๊ณ  ๊ทธ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๊ตฌํ˜„ ๊ทœ์น™

  • src/rbtree.c ์ด์™ธ์—๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  test๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • make test๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ Passed All tests!๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜์˜ค๋ฉด ๋ชจ๋“  test๋ฅผ ํ†ต๊ณผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • Sentinel node๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด test/Makefile์—์„œ CFLAGS ๋ณ€์ˆ˜์— -DSENTINEL์ด ์ถ”๊ฐ€๋˜๋„๋ก comment๋ฅผ ์ œ๊ฑฐํ•ด ์ค๋‹ˆ๋‹ค.

๊ณผ์ œ์˜ ์˜๋„ (Motivation)

  • ๋ณต์žกํ•œ ์ž๋ฃŒ๊ตฌ์กฐ(data structure)๋ฅผ ๊ตฌํ˜„ํ•ด ๋ด„์œผ๋กœ์จ ์ž์‹ ๊ฐ ์ƒ์Šน
  • C ์–ธ์–ด, ํŠนํžˆ ํฌ์ธํ„ฐ(pointer)์™€ malloc, free ๋“ฑ์˜ system call์— ์ต์ˆ™ํ•ด์ง.
  • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(dynamic memory allocation)์„ ์ง์ ‘ ์‚ฌ์šฉํ•ด ๋ด„์œผ๋กœ์จ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์˜ ํ•„์š”์„ฑ ์ฒด๊ฐ ๋ฐ data segment์— ๋Œ€ํ•œ ์ดํ•ด๋„ ์ƒ์Šน
  • ๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์„ธ๋ถ€์ ์œผ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒฝํ—˜ํ•จ์œผ๋กœ์จ ๊ณ ๊ธ‰ ์–ธ์–ด ์‚ฌ์šฉ์‹œ์—๋„ ํšจ์œจ์„ฑ ๊ณ ๋ ค

์ฐธ๊ณ ๋ฌธํ—Œ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published