Data Structure

๐Ÿ“Œ ์งˆ๋ฌธ์€ WeareSoft๋‹˜์˜ tech-interview๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์œผ๋ฉฐ, ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ ์ง์ ‘ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Table of Contents


#1

linked list

linked list๋Š” ์„œ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•จ์œผ๋กœ์จ ์ด์–ด์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. linked list๋Š” ๊ตฌ์กฐ์ฒด๊ฐ€ ์ด์–ด์ง„ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋ฉฐ, ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ๋…ธ๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋…ธ๋“œ๋Š” ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ๋‹ค์Œ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋งํฌ ํ•„๋“œ(ํฌ์ธํ„ฐ)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ •ํ™•ํžˆ๋Š”, ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค์Œ ๊ตฌ์กฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ๋ณดํ†ต, linked list์˜ ๋งจ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” head ํฌ์ธํ„ฐ์™€ ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” tail ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด, ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•œ๋‹ค. linked list๋Š” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ, single linked list์™€ double linked list, circular linked list ๋“ฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Array vs. Linked list

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

Time Complexity ๋น„๊ต

๊ตฌ๋ถ„ArrayLinked List

insert

$O(n)$

$O(1)$

delete

$O(n)$

$O(1)$

find

$O(1)$

$O(n)$

์‚ฝ์ž…, ์‚ญ์ œ, ์ ‘๊ทผ ๋ฐฉ๋ฒ•

  • ์ ‘๊ทผ: ์›ํ•˜๋Š” ์›์†Œ๊ฐ€ ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๋งํฌ ํ•„๋“œ(ํฌ์ธํ„ฐ, ๋‹ค์Œ ๋…ธ๋“œ)๋ฅผ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ์‚ฝ์ž…: ์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ next์— ํ˜„์žฌ ์œ„์น˜์˜ next๋ฅผ ์—ฐ๊ฒฐํ•œ ํ›„, ํ˜„์žฌ ์œ„์น˜์˜ next์— ์‚ฝ์ž…ํ•  ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

  • ์‚ญ์ œ: ์‚ญ์ œํ•  ๋…ธ๋“œ์˜ next๋ฅผ ์•ž์„  ๋…ธ๋“œ์˜ next์— ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

๊ธฐ๋ณธ์ ์ธ linked list ๊ตฌ์กฐ (=Single linked list ๊ตฌ์กฐ)


#1-1

single linked list

#1 Linked list์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘ Single linked list์— ํ•ด๋‹นํ•œ๋‹ค. Single linked list๋Š” linked list ์ค‘์—์„œ๋„ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ, head์—์„œ tail๊นŒ์ง€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํฌ์ธํ„ฐ๊ฐ€ ์ด์–ด์ ธ ์žˆ์œผ๋ฏ€๋กœ N ๋ฒˆ์งธ ๋…ธ๋“œ์—์„œ N-1 ๋ฒˆ์งธ ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋Œ€์‹ , ๋‹ค์‹œ head๋กœ๋ถ€ํ„ฐ N-1 ๋ฒˆ์˜ ํƒ์ƒ‰์„ ํ†ตํ•ด ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

References


#1-2

double linked list

#1-1 Single linked list์€ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋ฉด, ์ด์ „ ๋…ธ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Double linked list๋Š” ๋’ค์˜ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ด์ „ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๋„ ๋‹ด๊ณ  ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์™€ ๋‘ ๊ฐœ์˜ ๋งํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ๋งํฌ๋ฅผ prev์™€ next๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด next ๋งํฌ๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋˜๊ณ , ์ด์ „์˜ ๋…ธ๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด prev ๋งํฌ๊ฐ€ ๊ฐ€์ง€๋Š” ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

References


#1-3

circular linked list

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ linked list ์œ ํ˜•๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, tail์ด ๋‹ค์‹œ head๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, tail ๋…ธ๋“œ์˜ next์—๋Š” NULL์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๋Œ€์‹ , head์˜ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

References


#2

hash table

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด(๋ฒ„ํ‚ท)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๊ฐ๊ฐ์˜ Key๊ฐ’์— ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ๋ฐฐ์—ด์˜ ๊ณ ์œ ํ•œ index๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด index๋ฅผ ํ™œ์šฉํ•ด ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ์žฅ์†Œ๋ฅผ ๋ฒ„ํ‚ท ๋˜๋Š” ์Šฌ๋กฏ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, (Key, Value)์Œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ ("John Smith", "521-1234")๋ฅผ ํฌ๊ธฐ๊ฐ€ 16์ธ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•œ๋‹ค๊ณ  ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ๋จผ์ € index = hash_function("John Smith") % 16 ์—ฐ์‚ฐ์„ ํ†ตํ•ด index ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  array[index] = "521-1234" ๋กœ value๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด Key๊ฐ’์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ 1๋ฒˆ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ/์‚ญ์ œ/์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

ํ•ด์‹œ(Hash)๊ฐ’์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ

๋งŒ์•ฝ "John Smith"๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค ๋‚˜์˜จ ๊ฐ’๊ณผ "Sandra Dee"๋ฅผ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๋Œ๋ ค ๋‚˜์˜จ ๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 1: Separate Chaining(๋ถ„๋ฆฌ ์—ฐ๊ฒฐ๋ฒ•)

๋™์ผํ•œ ๋ฒ„ํ‚ท์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋™์ผํ•œ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๋ฉด, ๋™์ผํ•œ ๋ฒ„ํ‚ท ์•ˆ์— ์—”ํŠธ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ค˜์•ผํ•œ๋‹ค. ์ด ๋•Œ, ๋ฒ„ํ‚ท ๋‚ด๋ถ€์˜ ์—”ํŠธ๋ฆฌ ๊ฐ’๋“ค์€ linked list ํ˜•ํƒœ๋กœ ์ด์–ด์ค€๋‹ค. ์ด๋Ÿฌํ•œ Chaining ๋ฐฉ์‹์€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ™•์žฅ์ด ํ•„์š”์—†๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์†์‰ฝ๊ฒŒ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋™์ผํ•œ ๋ฒ„ํ‚ท์— chaining๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉฐ ๊ทธ์— ๋”ฐ๋ผ ์บ์‹œ์˜ ํšจ์œจ์„ฑ์ด ๊ฐ์†Œํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 2: Open Addressing(๊ฐœ๋ฐฉ์ฃผ์†Œ๋ฒ•)

Open Addressing์ด๋ž€ ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Chaining ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋น„์–ด์žˆ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. Open Addressing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.

  • Linear Probing: ํ˜„์žฌ์˜ ๋ฒ„ํ‚ท index๋กœ๋ถ€ํ„ฐ ๊ณ ์ •ํญ ๋งŒํผ์”ฉ ์ด๋™ํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰ํ•ด ๋น„์–ด ์žˆ๋Š” ๋ฒ„ํ‚ท์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • Quadratic Probing: ํ•ด์‹œ์˜ ์ €์žฅ์ˆœ์„œ ํญ์„ ์ œ๊ณฑ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒ˜์Œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋Š” 1๋งŒํผ ์ด๋™ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ ๊ณ„์† ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด 2^2, 3^2 ์นธ์”ฉ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • Double Hashing Probing: ํ•ด์‹œ๋œ ๊ฐ’์„ ํ•œ๋ฒˆ ๋” ํ•ด์‹ฑํ•˜์—ฌ ํ•ด์‹œ์˜ ๊ทœ์น™์„ฑ์„ ์—†์• ๋ฒ„๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ•ด์‹œ๋œ ๊ฐ’์„ ํ•œ๋ฒˆ ๋” ํ•ด์‹ฑํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋“ค๋ณด๋‹ค ๋งŽ์€ ์—ฐ์‚ฐ์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์€ ๋ฐ์ดํ„ฐ์˜ ๊ทœ์น™์„ฑ(ํด๋Ÿฌ์Šคํ„ฐ๋ง)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ด์ง€๋งŒ ๊ณต๊ฐ„์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์žˆ๋‹ค. ๋งŒ์•ฝ ํ…Œ์ด๋ธ”์ด ๊ฝ‰ ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ํ…Œ์ด๋ธ”์„ ํ™•์žฅํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋งค์šฐ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ์˜ ์ €ํ•˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์ ์ด๋ฉด ํ™•์ •์„ ํ•˜์ง€ ์•Š๋„๋ก ํ…Œ์ด๋ธ”์„ ์„ค๊ณ„ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (ํ†ต๊ณ„์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ณต๊ฐ„ ์‚ฌ์šฉ๋ฅ ์ด 70% ~ 80%์ •๋„๊ฐ€ ๋˜๋ฉด ํ•ด์‹œ์˜ ์ถฉ๋Œ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.) ๋˜ํ•œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Cache์— ์ ์šฉํ•˜๋ฉด ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ์ž์ฃผ hitํ•˜๊ฒŒ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹œ์—์„œ ๋ฐ”๋กœ ์ฐพ์Œ์œผ๋กœ์จ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

์‚ฝ์ž…, ์‚ญ์ œ, ํƒ์ƒ‰์— ๋Œ€ํ•ด ํ•ด์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— $O(1)$, ์ถฉ๋Œ์ด ์ผ์–ด๋‚œ๋‹ค๋ฉด ์ตœ์•…์˜ ๊ฒฝ์šฐ์— $O(N)$์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

์™œ๋ƒํ•˜๋ฉด ํ•ด์‹œ ์ถฉ๋Œ๋กœ ์ธํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฒ„ํ‚ท์— ์—ฌ๋Ÿฌ ์—”ํŠธ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ์— ๋ชจ๋“  ์—”ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

References


#3

stack

LIFO (Last In First Out) ๊ตฌ์กฐ์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ํ•œ ์ชฝ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋‹ค. push ๋ช…๋ น์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ , pop ๋ช…๋ น์œผ๋กœ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ธ๋‹ค.

stack ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ, ctrl + z (๋˜๋Œ๋ฆฌ๊ธฐ), ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” stack ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค. ์ด์™ธ์—๋„ DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์— ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.

stack ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฝ‰ ์ฐจ์„œ ๋” ๋„ฃ์„ ๊ณต๊ฐ„์ด ์—†๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ push ํ•˜๋Š” ๊ฒฝ์šฐ overflow, ๋ฐ˜๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๋ฐ pop ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ underflow ๋ผ๊ณ  ํ•œ๋‹ค.

References


#4

queue

FIFO (First In First Out) ๊ตฌ์กฐ์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์ถœ๊ตฌ(front)์™€ ์ž…๊ตฌ(rear or back)๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•˜์—ฌ ๋จผ์ € ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋ฐ˜ํ™˜๋œ๋‹ค.

push ๋ช…๋ น์œผ๋กœ rear ์— ์ž๋ฃŒ๋ฅผ ๋„ฃ๋Š”๋‹ค. rear += 1 ๋˜์–ด ๋‹ค์Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค. pop ๋ช…๋ น์œผ๋กœ front ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ธ๋‹ค. front += 1 ๋˜์–ด ๋‹ค์Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•œ๋‹ค.

queue ๋Š” CPU ์—ฐ์‚ฐ์ฒ˜๋ฆฌ ์ž‘์—…๋Œ€๊ธฐ, ํ”„๋ฆฐํ„ฐ ์ธ์‡„, ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ ๋“ฑ ๋“ค์–ด์˜จ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด์™ธ์—๋„ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.

queue ์˜ rear ๊ฐ€ ๊ธฐ๋ฆฌํ‚ค๋Š” ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ push ํ•˜๋Š” ๊ฒฝ์šฐ overflow, ๋ฐ˜๋Œ€๋กœ front ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๋ฐ pop ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ underflow ๋ผ๊ณ  ํ•œ๋‹ค.

References


#4-1

circular queue

ํฌ๊ธฐ๊ฐ€ N ์ธ queue ์—์„œ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋‹ค ์ฑ„์šฐ๋ฉด rear ๋Š” N-1 ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด ๋•Œ, pop ์œผ๋กœ ์ œ์ผ ์ฒ˜์Œ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด queue ์— ๋‚จ์€ ๊ณต๊ฐ„ 1๊ฐœ๊ฐ€ ์ƒ๊ธด๋‹ค. ํ•˜์ง€๋งŒ rear ๋Š” ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์›ํ˜• ํ˜•ํƒœ์˜ circular queue ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. queue ์™€ ๊ฐ™์ด FIFO ๊ตฌ์กฐ์˜ ์ž๋ฃŒํ˜•์ด๋‹ค.

๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ฒ˜์Œ์—๋Š” front ์™€ rear ๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์œ„ํ•ด rear ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฝ‰์ฐผ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ฝ‰์ฐฌ ๊ฒฝ์šฐ๋Š” rear ๋‹ค์Œ ๋ฒˆ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ front ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ (rear + 1 == front) ์ธ๋ฐ, ๊ฝ‰์ฐจ์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  rear ๋Š” ๋‹ค์Œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด front ๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋นˆ ๊ฒฝ์šฐ์—๋Š” ํ˜„์žฌ front ์œ„์น˜์™€ rear ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ (rear == front) ์ธ๋ฐ, ๋น„์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  front ๋Š” ๋‹ค์Œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ด๋™ํ•œ๋‹ค.

References


#5

graph

๊ทธ๋ž˜ํ”„๋Š” ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ •์  ๊ฐ„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋Š” ๊ฐ„์„ ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ทธ๋ž˜ํ”„์˜ ์ข…๋ฅ˜

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

๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„ ๋ฐฉ์‹

์ฒซ ๋ฒˆ์งธ๋กœ ์ธ์ ‘ํ–‰๋ ฌ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋…ธ๋“œ๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๊ฐ ๋…ธ๋“œ๊ฐ€ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์œผ๋ฉด ๋ฐฐ์—ด์— 1์„ ๋„ฃ์–ด์ฃผ๊ณ , ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด 0์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๋‘ ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ์กฐํšŒํ•  ๋•Œ, $O(1)$ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•ด, ๊ฐ„์„  ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด์•ผํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐํ™”์— $O(N^2)$ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ๊ณ , ๊ฐ„์„ ์˜ ์ˆ˜๊ฐ€ ์ ์€ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ์—, ๊ณต๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋œ๋‹ค.

๋‘ ๋ฒˆ์งธ๋กœ ์ธ์ ‘๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ๋“ค์„ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. head ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ๋งํฌ์— ๋‹ฌ์•„์ฃผ๋ฉด ๋œ๋‹ค.

ํ•œ ์ •์ ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ $O(M)$ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.(M์€ ๊ฐ„์„ ์˜ ์ˆ˜) ๊ฐ„์„  ์ •๋ณด๋งŒ ์œ ์ง€ํ•˜๋ฏ€๋กœ, ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์ ์œผ๋‚˜ ๋‘ ์ •์ ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ $O(M)$ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉฐ, ๊ตฌํ˜„์ด ๋น„๊ต์  ์–ด๋ ต๋‹ค.

๊ทธ๋ž˜ํ”„ ์šฉ์–ด

  • ์ •์ (vertice) : ๋…ธ๋“œ(node)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ์ •์ ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

  • ๊ฐ„์„ (edge): ๋งํฌ(arcs)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋…ธ๋“œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ์ธ์ ‘ ์ •์ (adjacent vertex) : ๊ฐ„์„ ์— ์˜ํ•ด ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์ •์ ์ด๋‹ค.

  • ๋‹จ์ˆœ ๊ฒฝ๋กœ(simple-path) : ๊ฒฝ๋กœ ์ค‘ ๋ฐ˜๋ณต๋˜๋Š” ์ •์ ์ด ์—†๋Š”๊ฒƒ, ๊ฐ™์€ ๊ฐ„์„ ์„ ์ž๋‚˜๊ฐ€์ง€ ์•Š๋Š” ๊ฒฝ๋กœ์ด๋‹ค.

  • ์ฐจ์ˆ˜(degree) : ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํ•˜๋‚˜์˜ ์ •์ ์— ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ˆ˜์ด๋‹ค.

  • ์ง„์ถœ ์ฐจ์ˆ˜(out-degree) : ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋กœ ํ•œ ๋…ธ๋“œ์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค.

  • ์ง„์ž…์ฐจ์ˆ˜(in-degree) : ๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด๋กœ ์™ธ๋ถ€ ๋…ธ๋“œ์—์„œ ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค.

References


#6

tree

tree๋Š” ๊ทธ๋ž˜ํ”„์˜ ์ผ์ข…์œผ๋กœ, ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฐ‘์— ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ณ , ์ž์‹ ๋…ธ๋“œ ๊ฐ๊ฐ์— ๋‹ค์‹œ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ์žฌ๊ท€์  ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋…ธ๋“œ๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ด๋•Œ ๊ฐ ๋…ธ๋“œ๋Š” ์žฌ์‚ฌ์šฉ ๋˜์ง€ ์•Š๋Š”๋‹ค. ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

  • ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์ด ์กด์žฌํ•œ๋‹ค.

  • ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๋Š” ํ•œ ๊ฐœ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง„๋‹ค.

  • ์„œ๋กœ ๋‹ค๋ฅธ ์ž„์˜์˜ ๋‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•˜๋‹ค.

  • ์‚ฌ์ดํด์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ ์ง‘ํ•ฉ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋…ธ๋“œ๊ฐ€ N๊ฐœ์ธ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ N-1๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์ง„๋‹ค.

ํŠธ๋ฆฌ ์šฉ์–ด

  • ๋…ธ๋“œ(node): ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์›์†Œ

  • ๋ฃจํŠธ ๋…ธ๋“œ(root node/root): ํŠธ๋ฆฌ์—์„œ ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ, ํŠธ๋ฆฌ์˜ ์‹œ์ž‘์ 

  • ๋ถ€๋ชจ ๋…ธ๋“œ(parent node): ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ

  • ์ž์‹ ๋…ธ๋“œ(child node): ๋ฃจํŠธ ๋…ธ๋“œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ

  • ํ˜•์ œ ๋…ธ๋“œ(siblings node): ๊ฐ™์€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ๋…ธ๋“œ๋“ค

  • ์žŽ ๋…ธ๋“œ(leaf node)/๋‹จ๋ง ๋…ธ๋“œ(terminal node): ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ

  • ๊ฒฝ๋กœ(path): ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ํ•œ ๋…ธ๋“œ์— ์ด๋ฅด๋Š” ๊ธธ ์‚ฌ์ด์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ˆœ์„œ

  • ๊ธธ์ด(length): ์ถœ๋ฐœ ๋…ธ๋“œ์—์„œ ๋„์ฐฉ ๋…ธ๋“œ๊นŒ์ง€ ๊ฑฐ์น˜๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

  • ๊นŠ์ด(depth): ๋ฃจํŠธ ๊ฒฝ๋กœ์˜ ๊ธธ์ด

  • ๋ ˆ๋ฒจ(level): ๋ฃจํŠธ ๋…ธ๋“œ(level=1)๋ถ€ํ„ฐ ๋…ธ๋“œ๊นŒ์ง€ ์—ฐ๊ฒฐ๋œ ๋งํฌ ์ˆ˜์˜ ํ•ฉ

  • ๋†’์ด(height): ๊ฐ€์žฅ ๊ธด ๋ฃจํŠธ ๊ฒฝ๋กœ์˜ ๊ธธ์ด

  • ์ฐจ์ˆ˜(degree): ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹์˜ ๊ฐœ์ˆ˜

  • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜(degree of tree): ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜ = max[deg1, deg2, ..., degn]

  • ํฌ๊ธฐ(size): ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜

  • ๋„ˆ๋น„(width): ๊ฐ€์žฅ ๋งŽ์€ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ ˆ๋ฒจ์˜ ํฌ๊ธฐ

References


#6-1

binary tree

์ด์ง„ ํŠธ๋ฆฌ(binary tree)๋Š” ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜(degree)๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ์„œ๋ธŒ ํŠธ๋ฆฌ๋“ค์€ ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

์ˆœํšŒ(Traversal) ๋ฐฉ๋ฒ•

  • ์ „์œ„ ์ˆœํšŒ(preorder)

    1. ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

    2. ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ๋‹ค.

    3. ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•œ๋‹ค.

  • ์ค‘์œ„ ์ˆœํšŒ(inorder)

    1. ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒํ•œ๋‹ค.

    2. ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

    3. ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒํ•œ๋‹ค.

  • ํ›„์œ„ ์ˆœํšŒ(postorder)

    1. ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ๋‹ค.

    2. ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•œ๋‹ค.

    3. ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค.

  • ๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ(level-order)

    • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‚ฎ์€ ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœํšŒํ•œ๋‹ค. ๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ๋Š” ๋„ˆ๋น„ ์šฐ์„  ์ˆœํšŒ(breadth-first traversal)๋ผ๊ณ ๋„ ํ•œ๋‹ค.

References


#6-2

full binary tree

full binary tree๋Š” ๋‹จ๋ง ๋…ธ๋“œ๋“ค์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด 2๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” binary tree์ด๋‹ค.

References


#6-3

complete binary tree

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

References


#6-4

bst(binary search tree)

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(binary search tree)๋Š” ์•„๋ž˜์˜ ์„ฑ์งˆ์„ ๊ฐ–๊ณ  ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๊ฐ๊ฐ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์˜ ๊ฐ’(key)์€ ์ค‘๋ณต๋œ ๊ฐ’์ด ์•„๋‹ˆ๋‹ค.

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

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

  • ์ขŒ์šฐ ์„œ๋ธŒํŠธ๋ฆฌ๋Š” ๊ฐ๊ฐ์ด ๋‹ค์‹œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—ฌ์•ผ ํ•œ๋‹ค.

ํƒ์ƒ‰(Search)

๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋จผ์ € ๋น„๊ตํ•˜๊ณ , ์ผ์น˜ํ•  ๊ฒฝ์šฐ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

  • ๋ถˆ์ผ์น˜ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์žฌ๊ท€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

  • ๋ถˆ์ผ์น˜ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ์žฌ๊ท€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

์‚ฝ์ž…(Insert)

์‚ฝ์ž…์„ ํ•˜๊ธฐ ์ „, ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„ ํ‚ค์™€ ์ผ์น˜ํ•˜๋Š” ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์—์„œ ํ‚ค์™€ ๋…ธ๋“œ์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•ด์„œ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

์‚ญ์ œ(Delete)

์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ ์ž์‹ ์ˆ˜์— ๋”ฐ๋ผ

  • ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ(๋ฆฌํ”„ ๋…ธ๋“œ) ์‚ญ์ œ: ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋‹จ์ˆœํžˆ ์‚ญ์ œํ•œ๋‹ค.

  • ์ž์‹ ๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๋…ธ๋“œ ์‚ญ์ œ: ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ทธ ์œ„์น˜์— ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค.

  • ์ž์‹ ๋…ธ๋“œ๊ฐ€ 2๊ฐœ์ธ ๋…ธ๋“œ ์‚ญ์ œ: ์‚ญ์ œํ•˜๊ณ ์ž ํ•˜๋Š” ๋…ธ๋“œ์˜ ๊ฐ’์„ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค, ํ•ด๋‹น ๋…ธ๋“œ(์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ)๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

BST์˜ ํƒ์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ์˜ ๋ณต์žก๋„๋Š” ๋ชจ๋‘ $O(h)$์ด๋‹ค. (h๋Š” BST์˜ ๋†’์ด) BST๋Š” ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ $O(\log_2 n)$์ด์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ $O(n)$์ด๋‹ค. (skewed tree ์ด๋ฉด node์˜ ์ˆ˜๋งŒํผ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ)

ํŠธ๋ฆฌ๊ฐ€ complete binary tree ๊ฑฐ๋‚˜ full binary tree ์ด๋ฉด $O(\log_2 n)$, skewed tree ์ด๋ฉด $O(n)$์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

References


#7

heap(binary heap)

์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ๋‹ค์Œ์˜ ์†์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค.

A๊ฐ€ B์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์ด๋ฉด, A์˜ ํ‚ค๊ฐ’๊ณผ B์˜ ํ‚ค๊ฐ’ ์‚ฌ์ด์—๋Š” ๋Œ€์†Œ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.

heap์˜ ์ข…๋ฅ˜์—๋Š” min heap, max heap์ด ์žˆ๋‹ค.

๊ฐ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” ํž™์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ์ธ ์ด์ง„ ํž™(binary heap)์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํž™์—์„œ๋Š” ๊ฐ€์žฅ ๋†’์€(ํ˜น์€ ๊ฐ€์žฅ ๋‚ฎ์€) ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๊ฐ€ ํ•ญ์ƒ ๋ฃจํŠธ ๋…ธ๋“œ์— ์˜ค๊ฒŒ ๋˜๋Š” ํŠน์ง•์ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์‘์šฉํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ ํ์™€ ๊ฐ™์€ ์ถ”์ƒ์  ์ž๋ฃŒํ˜•์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ง„ ํž™(binary heap)

์ด์ง„ ํž™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค. ํŠธ๋ฆฌ๋ฅผ T, ์ž„์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ๋ฅผ v๋ผ๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๊ฐ ๋‚ด๋ถ€ ๋…ธ๋“œ๋Š” key(T.parent(v)) < key(v) ๋˜๋Š” key(T.parent(v)) > key(v)์ด๋‹ค. (์ฆ‰, ํ‚ค ๊ฐ’์€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๊ฑฐ๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด๋‹ค.)

  2. ๋งˆ์ง€๋ง‰ ์™ผ์ชฝ ๊ฒฐํ•ฉ ๋…ธ๋“œ๋“ค์˜ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ ˆ๋ฒจ๋“ค์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค.

ํž™ ๋ฆฌ์ŠคํŠธ(heap list)๋กœ ํ‘œํ˜„ํ•  ๋•Œ i๋ฒˆ์งธ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์œ„์น˜๋Š” 2i๊ฐ€ ๋˜๋ฉฐ, i๋ฒˆ์งธ ๋…ธ๋“œ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์˜ ์œ„์น˜๋Š” 2i+1์ด๊ณ , ๋˜ํ•œ i๋ฒˆ์งธ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ์œ„์น˜๋Š” i/2๊ฐ€ ๋œ๋‹ค.

์ด์ง„ ํž™์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” $O(\log n)$์ด๋‹ค.

References


#7-1

min heap

์ตœ์†Œ ํž™(min heap)์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

key(๋ถ€๋ชจ๋…ธ๋“œ)โ‰คkey(์ž์‹๋…ธ๋“œ)key(๋ถ€๋ชจ ๋…ธ๋“œ) \leq key(์ž์‹ ๋…ธ๋“œ)

References


#7-2

max heap

์ตœ๋Œ€ ํž™(max heap)์€ ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

key(๋ถ€๋ชจ๋…ธ๋“œ)โ‰ฅkey(์ž์‹๋…ธ๋“œ)key(๋ถ€๋ชจ ๋…ธ๋“œ) \geq key(์ž์‹ ๋…ธ๋“œ)

References


#8

Red-black Tree

๋ ˆ๋“œ-๋ธ”๋ž™ํŠธ๋ฆฌ์˜ ์ •์˜

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(Red-Black Tree)๋Š” ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree)์˜ ํ•œ ์ข…๋ฅ˜๋กœ, ์‚ฝ์ž…(insert), ์‚ญ์ œ(delete), ๊ฒ€์ƒ‰(retrieval) ์—ฐ์‚ฐ์„ $O(\log N)$์— ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์ฆ‰, ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ $\log N$์ด ๋˜๋„๋ก ํ•œ๋‹ค.

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋นจ๊ฐ„์ƒ‰ ํ˜น์€ ๊ฒ€์€์ƒ‰์ด๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๊ฒ€์€์ƒ‰์ด๋‹ค.

  • NULL ํ˜น์€ NIL๋กœ ํ‘œ๊ธฐ๋œ ๋ฆฌํ”„๋…ธ๋“œ๋Š” ๊ฒ€์ •์ƒ‰์ด๋‹ค.

  • ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” ๊ฒ€์ •์ƒ‰์ด๋‹ค. ์ฆ‰, ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค.

  • ๋ฆฌํ”„๋…ธ๋“œ์—์„œ ๋ฃจํŠธ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์—์„œ ๋งŒ๋‚˜๋Š” ๊ฒ€์€์ƒ‰ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” ๊ฐ™๋‹ค.

๋ ˆ๋“œ-๋ธ”๋ž™ํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ์ธ ์ด์œ 

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ์˜ 5๋ฒˆ์งธ ์กฐ๊ฑด ๋•Œ๋ฌธ์ธ๋ฐ, ๊ฒ€์€์ƒ‰ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ B์ด๊ณ  ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์™€ ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋ ค๋ฉด, ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ ์ž์ฒด๊ฐ€ ์—†์–ด์•ผ ํ•˜๊ณ  ์ด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” B๊ฐœ์ด๋‹ค. ๋นจ๊ฐ„์ƒ‰ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋ ค๋ฉด, ๊ฒ€์ •-๋นจ๊ฐ•-๊ฒ€์ •-๋นจ๊ฐ•-...์œผ๋กœ ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ ์ด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 2B์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ตœ์†Œ ๊ฒฝ๋กœ์™€ ์ตœ๋Œ€ ๊ฒฝ๋กœ์˜ ์ฐจ์ด๋Š” 2๋ฐฐ๋ณด๋‹ค ํฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ์˜ ์—ฐ์‚ฐ

๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์ œ๊ฑฐ๊ฐ€ ์žˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ/๋™์ž‘ - ์œ„ํ‚ค๋ฐฑ๊ณผ๋ฅผ ์ฐธ๊ณ !

References


#9

B-Tree

B-ํŠธ๋ฆฌ์˜ ์ •์˜

B-ํŠธ๋ฆฌ๋Š” ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)๋ฅผ ํ™•์žฅํ•ด ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์ด ๊ฐ™์€ ๋†’์ด๋ฅผ ๊ฐ–๋„๋ก ํ•˜๋Š” ํŠธ๋ฆฌ์ด๋‹ค. ๋…ธ๋“œ ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ key๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ตœ๋Œ€ key์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ 2๊ฐœ์ด๋ฉด 2์ฐจ B-ํŠธ๋ฆฌ, N๊ฐœ๋ฉด N์ฐจ B-ํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

B-ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.

  • ๋…ธ๋“œ์˜ key์˜ ๊ฐœ์ˆ˜๊ฐ€ N์ด๋ฉด, ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” N+1์ด๋‹ค.

  • ๋…ธ๋“œ ๋‚ด์˜ key๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 2๊ฐœ ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ๋“ค์€ ์ ์–ด๋„ ์ตœ๋Œ€ M/2๊ฐœ์˜ key๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

    • M์€ B-ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

  • ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋ ˆ๋ฒจ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.

B-ํŠธ๋ฆฌ์˜ ์—ฐ์‚ฐ

B-ํŠธ๋ฆฌ์˜ ์—ฐ์‚ฐ์€ ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…, ์ œ๊ฑฐ๊ฐ€ ์žˆ๋‹ค. ๋‹ค์Œ ์—ฐ์‚ฐ์€ B-ํŠธ๋ฆฌ ์—ฐ์‚ฐ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๋กœ ์ด๊ฒƒ์„ ์ฐธ๊ณ !

B-ํŠธ๋ฆฌ vs B+ ํŠธ๋ฆฌ

B+ ํŠธ๋ฆฌ๋Š” B-ํŠธ๋ฆฌ์™€ ๋น„์Šทํ•˜์ง€๋งŒ ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„์–ด ์„ ํ˜• ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•œ ํŠธ๋ฆฌ์ด๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ์— key์™€ data๊ฐ€ ์žˆ๋Š” B ํŠธ๋ฆฌ์™€๋Š” ๋‹ฌ๋ฆฌ B+ ํŠธ๋ฆฌ๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์—๋งŒ data๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋˜ํ•œ ์‚ฝ์ž…๊ณผ ์ œ๊ฑฐ ์—ฐ์‚ฐ ๋ชจ๋‘ ๋ฆฌํ”„ ๋…ธ๋“œ์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.

References

Last updated