Skip to content

Latest commit

 

History

History

์ž๋ฃŒ๊ตฌ์กฐ


๋ฐฐ์—ด(Array)


์ •์ ์œผ๋กœ ํ•„์š”ํ•œ๋งŒํผ๋งŒ ์›์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ํ• ๋‹น

์ด๋•Œ ๊ฐ ์›์†Œ์˜ ์ฃผ์†Œ๋Š” ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹น๋จ

index๋ฅผ ํ†ตํ•ด O(1)์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•จ

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๋Š” O(N)

์ง€์ •๋œ ๊ฐœ์ˆ˜๊ฐ€ ์ดˆ๊ณผ๋˜๋ฉด? โ†’ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ์žฌํ• ๋‹นํ•œ ํ›„ ๋ณต์‚ฌํ•ด์•ผํ•จ


๋ฆฌ์ŠคํŠธ(List)


๋…ธ๋“œ(Node)๋“ค์˜ ์—ฐ๊ฒฐ๋กœ ์ด๋ฃจ์–ด์ง

ํฌ๊ธฐ ์ œํ•œ์ด ์—†์Œ ( heap ์šฉ๋Ÿ‰๋งŒ ์ถฉ๋ถ„ํ•˜๋ฉด! )

๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ( O(N) )

์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ํŽธํ•จ O(1)


ArrayList


๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋Š” ๋ฐฐ์—ด

๋ฐฐ์—ด์ด ๊ฐ€๋“ ์ฐจ๋ฉด? โ†’ ์•Œ์•„์„œ ๊ทธ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ํ• ๋‹นํ•˜๊ณ  ๋ณต์‚ฌ ์ˆ˜ํ–‰

์žฌํ• ๋‹น์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ O(N)์ด์ง€๋งŒ, ์ž์ฃผ ์ผ์–ด๋‚˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ ‘๊ทผ์‹œ๊ฐ„์€ O(1)


์Šคํƒ(Stack)


LIFO ๋ฐฉ์‹ (๋‚˜์ค‘์— ๋“ค์–ด์˜จ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ)

์›์†Œ์˜ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ํ•œ์ชฝ ๋์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง (์ด ๋ถ€๋ถ„์„ top์ด๋ผ๊ณ  ์นญํ•จ)

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐ„์„ ์Šคํƒ์œผ๋กœ ์‚ฌ์šฉํ•จ


ํ(Queue)


FIFO ๋ฐฉ์‹ (๋จผ์ € ๋“ค์–ด์˜จ๊ฒŒ ๋จผ์ € ๋‚˜๊ฐ)

์›์†Œ์˜ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ์–‘์ชฝ ๋์—์„œ ์ผ์–ด๋‚จ (front, rear)

FIFO ์šด์˜์ฒด์ œ, ์€ํ–‰ ๋Œ€๊ธฐ์—ด ๋“ฑ์— ํ•ด๋‹น


์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)


FIFO ๋ฐฉ์‹์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํŒ๋‹จํ•˜๊ณ , ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ ๋‚˜๊ฐ

๊ตฌํ˜„ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€ (๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํž™)

1.๋ฐฐ์—ด

๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅ

๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ๊ณผ์ •์„ ์ง„ํ–‰ ์‹œ, O(N)์œผ๋กœ ๋น„ํšจ์œจ ๋ฐœ์ƒ (ํ•œ ์นธ์”ฉ ๋‹น๊ธฐ๊ฑฐ๋‚˜ ๋ฐ€์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ)

์‚ฝ์ž… ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ (์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์„ ๊ฒฝ์šฐ)

2.์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ O(1)

ํ•˜์ง€๋งŒ ์‚ฝ์ž… ์œ„์น˜๋ฅผ ์ฐพ์„ ๋•Œ๋Š” ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋น„ํšจ์œจ ๋ฐœ์ƒ

3.ํž™

ํž™์€ ์œ„ 2๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ (๋”ฐ๋ผ์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋Œ€๋ถ€๋ถ„ ํž™์œผ๋กœ ๊ตฌํ˜„)

ํž™์€ ์™„์ „์ด์ง„ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•˜๋ฏ€๋กœ, 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•จ ( O(1)์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ )

root index์— ๋”ฐ๋ผ child index๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Œ

root index = 0

left index = index * 2 + 1
right index = index * 2 + 2

๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์€ ํŠธ๋ฆฌ์˜ leaf node(์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ)๋ถ€ํ„ฐ ์‹œ์ž‘

์‚ฝ์ž… ํ›„, heapify ๊ณผ์ •์„ ํ†ตํ•ด ํž™์˜ ๋ชจ๋“  ๋ถ€๋ชจ-์ž์‹ ๋…ธ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„์— ๋งž๊ฒŒ ์„ค์ •๋จ (์ด๋•Œ, ๋ถ€๋ชจ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ์ž์‹์˜ ์šฐ์„ ์ˆœ์œ„๋ณด๋‹ค ์ปค์•ผ ํ•จ)

๋ฐ์ดํ„ฐ์˜ ์‚ญ์ œ๋Š” root node๋ฅผ ์‚ญ์ œํ•จ (์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ)

์‚ญ์ œ ํ›„, ๋งˆ์ง€๋ง‰ leaf node๋ฅผ root node๋กœ ์˜ฎ๊ธด ๋’ค heapify ๊ณผ์ • ์ˆ˜ํ–‰


ํŠธ๋ฆฌ(Tree)


์‚ฌ์ดํด์ด ์—†๋Š” ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

์™„์ „์ด์ง„ํŠธ๋ฆฌ ๊ธฐ์ค€ ๋†’์ด๋Š” logN

ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์Œ

1.์ค‘์œ„ ์ˆœํšŒ : left-root-right

2.์ „์œ„ ์ˆœํšŒ : root-left-right

3.ํ›„์œ„ ์ˆœํšŒ : left-right-root

4.๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ : ๋…ธ๋“œ๋ฅผ ๋ ˆ๋ฒจ ์ˆœ์„œ๋กœ ๋ฐฉ๋ฌธ (BFS์™€ ๋™์ผํ•ด ํ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ)


์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(BST)


๋…ธ๋“œ์˜ ์™ผ์ชฝ์€ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’๋“ค, ์˜ค๋ฅธ์ชฝ์€ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ

์‚ฝ์ž… ๋ฐ ์‚ญ์ œ, ํƒ์ƒ‰๊นŒ์ง€ ์ด์ƒ์ ์ผ ๋•Œ๋Š” ๋ชจ๋‘ O(logN) ๊ฐ€๋Šฅ

๋งŒ์•ฝ ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๋ฉด O(N)์œผ๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒ


ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)


ํšจ์œจ์  ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

key - value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์€ key๋ฅผ ์ •์ˆ˜๊ฐ’(index)๋กœ ๋Œ€์‘์‹œํ‚ด

์ถฉ๋Œ(collision)์— ๋Œ€ํ•œ ๊ณ ๋ ค ํ•„์š”


์ถฉ๋Œ(collision) ํ•ด๊ฒฐ๋ฐฉ์•ˆ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์— ๋Œ€ํ•œ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๊ฒฐ๋ฐฉ์•ˆ์„ ์„ธ์›Œ์•ผ ํ•จ

1.์„ ํ˜• ์กฐ์‚ฌ๋ฒ•(linear probing)

์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ํ•ญ๋ชฉ์„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋‹ค๋ฅธ ์œ„์น˜์— ์ €์žฅ

์˜ˆ์‹œ)
ht[k], ht[k+1], ht[k+2] ...

โ€ป ์‚ฝ์ž… ์ƒํ™ฉ
์ถฉ๋Œ์ด ht[k]์—์„œ ์ผ์–ด๋‚ฌ๋‹ค๋ฉด, ht[k+1]์ด ๋น„์–ด์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•จ. ์ฐจ์žˆ์œผ๋ฉด ht[k+2] ์กฐ์‚ฌ ...
ํ…Œ์ด๋ธ” ๋๊นŒ์ง€ ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„์˜ด. ์‹œ์ž‘ ์œ„์น˜๋กœ ๋Œ์•„์˜จ ๊ฒฝ์šฐ๋Š” ํ…Œ์ด๋ธ”์ด ๋ชจ๋‘ ๊ฐ€๋“ ์ฐฌ ๊ฒฝ์šฐ์ž„

โ€ป ๊ฒ€์ƒ‰ ์ƒํ™ฉ
ht[k]์— ์žˆ๋Š” ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ๊ฐ’์ด๋ฉด, ht[k+1]์— ๊ฐ™์€ ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•จ. 
๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„์ด ๋‚˜์˜ค๊ฑฐ๋‚˜, ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ•œ ์œ„์น˜๋กœ ๋Œ์•„์˜ค๋ฉด ์ฐพ๋Š” ํ‚ค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
2.์ด์ฐจ ์กฐ์‚ฌ๋ฒ•

์„ ํ˜• ์กฐ์‚ฌ๋ฒ•์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ง‘์ ํ™” ๋ฌธ์ œ๋ฅผ ์™„ํ™”์‹œ์ผœ ์คŒ

h(k), h(k)+1, h(k)+4, h(k)+9 ...
3.์ด์ค‘ ํ•ด์‹œ๋ฒ•

์žฌํ•ด์‹ฑ(rehasing)์ด๋ผ๊ณ ๋„ ํ•จ

์ถฉ๋Œ๋กœ ์ธํ•ด ๋น„์–ด์žˆ๋Š” ๋ฒ„ํ‚ท์„ ์ฐพ์„ ๋•Œ ์ถ”๊ฐ€์ ์ธ ํ•ด์‹œ ํ•จ์ˆ˜ h'()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

h'(k) = C - (k mod C)

์กฐ์‚ฌ ์œ„์น˜
h(k), h(k)+h'(k), h(k) + 2h'(k) ...
4.์ฒด์ด๋‹

๊ฐ ๋ฒ„ํ‚ท์„ ๊ณ ์ •๋œ ๊ฐœ์ˆ˜์˜ ์Šฌ๋กฏ ๋Œ€์‹ , ์œ ๋™์  ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹

์ถฉ๋Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

๋ฒ„ํ‚ท ๋‚ด์—์„œ ํ•ญ๋ชฉ์„ ์ฐพ์„ ๋•Œ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ˆœ์ฐจ ํƒ์ƒ‰ ํ™œ์šฉ

5.ํ•ด์‹ฑ ์„ฑ๋Šฅ ๋ถ„์„
a = n / M

a = ์ ์žฌ ๋น„์œจ
n = ์ €์žฅ๋˜๋Š” ํ•ญ๋ชฉ ๊ฐœ์ˆ˜
M = ํ•ด์‹œํ…Œ์ด๋ธ” ํฌ๊ธฐ

๋งต(map)๊ณผ ํ•ด์‹œ๋งต(hashMap)์˜ ์ฐจ์ด๋Š”?

map ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(BST)๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ตœ๊ทผ์— ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ค‘

key ๊ฐ’์„ ์ด์šฉํ•ด ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์ž„ โ†’ ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ, ์‚ฝ์ž…, ์‚ญ์ œ๋Š” O( logN )

๋ฐ˜๋ฉด ํ•ด์‹œ๋งต์€ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด O(1)์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

ํ•˜์ง€๋งŒ C++์—์„œ๋Š” ํ•ด์‹œ๋งต์„ STL๋กœ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š๋Š”๋ฐ, ์ถฉ๋Œ ํ•ด๊ฒฐ์— ์žˆ์–ด์„œ ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ (ํ•ด์‹œ ํ•จ์ˆ˜๋Š” collision ์ •์ฑ…์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ฐจ์ด๊ฐ€ ํผ)