์šฉ์–ด ์ •๋ฆฌ

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

key์™€ value๋ฅผ ๊ฐ–๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰๊ณผ ์ €์žฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. 

linked list์™€ ๋‹ฌ๋ฆฌ ํ•ด๋‹น ์ž๋ฃŒ๊ฐ€ ์œ„์น˜ํ•œ ๋ฒ„ํ‚ท์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ”๋กœ ์•Œ์•„๋‚ด์–ด ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์— ์ˆ˜๋ ดํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

Hash ํ•จ์ˆ˜, Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜, Hash ์ฝ”๋“œ

์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ • ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜

๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ์— ์˜ํ•ด ํ•ด์‹œํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์ค‘๋ณต ๋˜์–ด ํ•ด์‹œ ์ถฉ๋Œ์„ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

* ๋น„๋‘˜๊ธฐ์ง‘ ์›๋ฆฌ : n+1๊ฐœ์˜ ๋ฌผ๊ฑด์„ n๊ฐœ์˜ ์ƒ์ž์— ๋„ฃ์„ ๋•Œ, ์ ์–ด๋„ ์–ด๋Š ํ•œ ์ƒ์ž์—๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฌผ๊ฑด์ด ๋“ค์–ด์žˆ๋‹ค๋Š” ์›๋ฆฌ

 

๋ฐ์ดํ„ฐ์˜ value๊ฐ’์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ธ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ›๊ฒŒ ๋˜์—ˆ์„ ๋•Œ ๋ฌธ์ž ํ•œ๊ธ€์ž ํ•œ๊ธ€์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋งŒ์•ฝ, 
hello ๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ •์ˆ˜ํ˜• key ๊ฐ’์œผ๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด,
h + e + l + l + o -> 104 +101 + 108 + 108 + 111 = 532๋ผ๋Š”
ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋งˆ๋‹ค ์ ์ ˆํ•œ ํ•ด์‹œ ํ•จ์ˆ˜(ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์—ญ๋Ÿ‰์— ๋‹ฌ๋ ค์žˆ๋‹ค.

 

 

 

Hash ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Hash table์— ์ €์žฅํ•˜๊ธฐ

ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์•„์ฃผ ๋งŽ๋‹ค. ์ €์žฅํ•  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ  ์ˆ˜ ๋งŽ์€ ํ•ด์‹œ์ฝ”๋“œ๋“ค์„ ๋Œ€์ฒ˜ ํ•  ์ˆ˜ ์—†๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด 0๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ์‚ฌ์ด์ฆˆ-1 ๋งŒํผ์˜ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ํ•ด์‰ฌ์ฝ”๋“œ๊ฐ€ 532์ด๊ณ  ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 10์ธ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€๊ฐ€ 2๊ฐ€ ๋‚˜์˜ค๊ณ , ์ด ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

* ๊ฐ ๋ฒ„ํ‚ท์€ ๋ช‡ ๊ฐœ์˜ ์Šฌ๋กฏ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

 

 

 

OverFlow๋ž€ 

์—ฌ๋Ÿฌ๊ฐœ์˜ ํ‚ค๊ฐ’์ด ๊ณตํ†ต๋œ ๋ฒ„ํ‚ท์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ, ๋ฒ„ํ‚ท๋“ค์˜ ๊ณต๊ฐ„์€ ์œ ํ•œํ•ด์„œ ๊ฒฐ๊ตญ ๋ฒ„ํ‚ท์ด ๊ฝ‰ ์ฐจ๊ฒŒ ๋œ๋‹ค.

๊ฝ‰ ์ฐจ์žˆ๋Š” ์ˆœ๊ฐ„ ๋˜ํ•˜๋‚˜์˜ ํ‚ค๊ฐ’์ด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๋งตํ•‘๋œ๋‹ค๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

์ถฉ๋Œ Collision

๋‹ค๋ฅธ ํ•ด์‹œ์ฝ”๋“œ์ž„์—๋„ ๊ฐ™์€ ์ธ๋ฑ์Šค๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ ์ถฉ๋Œ์˜ ํ•ด๊ฒฐ๋ฐฉ์‹์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 

๋ถ„๋ฆฌ ์ฒด์ธ๋ฒ•, ์„ ํ˜• ํƒ์‚ฌ๋ฒ•, 2์ฐจ ํƒ์‚ฌ๋ฒ•, ์ด์ค‘ ํ•ด์‹ฑ ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

* ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์ž๋ฐ”์—์„œ hashCode( )๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ๋•Œ equals( )๋„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์•ผํ•œ๋‹ค. ๋ณ„๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์šฐ์—ฐํžˆ ํ•ด์‹œ์ฝ”๋“œ๊ฐ€ ๋˜‘๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋”๋ผ๋„ equals๋กœ ๊ฐ’์˜ ๋™๋“ฑ์„ฑ์„ ํ•œ๋ฒˆ ๋” ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋˜๋ฉด ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ถฉ๋Œ ํ•ด๊ฒฐํ•˜๊ธฐ

1. ๋ถ„๋ฆฌ ์ฒด์ธ๋ฒ• seperate chaning (open hashing)

๊ฐ™์€ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ, ๊ทธ ์ธ๋ฑ์Šค์˜ Linked List๋ฅผ ์„ ์–ธํ•˜๊ณ  ๊ฐ ๋ฐ์ดํ„ฐ๋“ค์„ ์ด ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค.

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

ํ•œ ์ธ๋ฑ์Šค์˜ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜ (ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜)์ด ์ฃผ์–ด์ง„ ๋ฌธ์ œ์— ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ์„ค๊ณ„๋ฅผ ๋‹ค์‹œ ๊ณ ๋ คํ•ด๋ด์•ผ ํ•œ๋‹ค. 

* ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฃผ์–ด์ง„ ํ•ด์‹œํ…Œ์ด๋ธ” ๊ณต๊ฐ„์™ธ์˜ ์ƒˆ๋กœ์šด ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— open hashing์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

 

 

 

 

2. Open Addressing (Closed Hashing)

์ฃผ์–ด์ง„ ํ•ด์‹œํ…Œ์ด๋ธ”์—์„œ ์ •ํ•ด์ง„ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฒ„ํ‚ท์„ ์ฐพ์•„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. open addressing์˜ ๋ฒ„ํ‚ท ๊ฒฐ์ • ๋ฐฉ๋ฒ•์—๋Š” ๋ช‡๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

 

2.1 ์„ ํ˜• ์กฐ์‚ฌ

์ถฉ๋Œ์ด ์ผ์–ด๋‚œ ๋‹ค์Œ ์ž๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•

์ œ 1 ๊ตฐ์ง‘ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค

* ์ œ 1 ๊ตฐ์ง‘ ํ˜„์ƒ : ํŠน์ • ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆด ๋•Œ, linked list์˜ ์ˆœ์ฐจ ํƒ์ƒ‰์œผ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ๊ณต๊ฐ„์ด ์ง€์ •๋˜์–ด ์„ฑ๋Šฅ์ด ์น˜๋ช…์ ์œผ๋กœ ์ €ํ•˜๋œ๋‹ค. ( ์ด์ฐจ์› ์กฐ์‚ฌ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค)

 

 

 

 

2.2 ์ด์ฐจ์› ์กฐ์‚ฌ

์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ž๋ฆฌ๋ฅผ ์ด์ฐจํ•จ์ˆ˜๋กœ ๊ฒฐ์ •ํ•œ๋‹ค.

 

2.3 ๋”๋ธ” ํ•ด์‹ฑ

 

2.4 ๋ฌด์ž‘์œ„ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•


<์ฐธ๊ณ >

https://siyoon210.tistory.com/85 https://galid1.tistory.com/171

+ Recent posts