ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

CS/Data Structure

[์ž๋ฃŒ๊ตฌ์กฐ] Hash(ํ•ด์‹œ)

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 6. 13. 20:27

ํ•ด์‹œ๋ž€?

- Hash ํ˜น์€ HashTable์€ ํ‚ค๋ฅผ ๊ฐ’์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ธ, ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

- ์ž„์˜์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ(Key)๋ฅผ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ(Value)๋กœ ๋ณ€ํ™˜์‹œ์ผœ ์ €์žฅ

- ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” associate array

- ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ hashing(ํ•ด์‹ฑ)์ด๋ผ ํ•˜๊ณ , ์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ•ด์‹œํ•จ์ˆ˜

- ํ•ด์‹œ๊ฐ’ ์ž์ฒด๋ฅผ index๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ‰๊ท  ๋ณต์žก๋„๊ฐ€ O(1)๋กœ ๋งค์šฐ ๋น ๋ฅด๋‹ค

- ๋ณด์•ˆ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

ํ•ด์‹œ ํ•จ์ˆ˜๋ž€?

- ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ณ ์ •๋œ ๊ธธ์ด์˜ ํ…Œ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ์–ป์–ด์ง€๋Š” ๊ฐ’์„ ํ•ด์‹œ์ฝ”๋“œ, ํ•ด์‹œ๋ผ ํ•ฉ๋‹ˆ๋‹ค.

 

ํ•ด์‹œ ํ…Œ์ด๋ธ”

- ํ‚ค์™€ ๊ฐ’์„ ๋งคํ•‘ํ•ด๋‘” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

- ํ•ด์‹œํ•จ์ˆ˜๋กœ ์–ป์€ ํ•ดํ‚ค๋ฅผ ํ‚ค๋กœ ํ™œ์šฉํ•˜์—ฌ index๋กœ ์‚ฌ์šฉํ•˜๊ณ , ํ•ด๋‹น index์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์ •ํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

- ๋™๊ธฐํ™”๋ฅผ ์ง€์›

- Key, value์— Null๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

- ์ ์€ ์ž์›์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ

- ํ•˜๋“œ ๋””์Šคํฌ๋‚˜ ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋“œ์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋„ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅ

 

ํ•ด์‹œ์˜ ์ถฉ๋Œ (Collision ํ˜„์ƒ)

- ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

: ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๊ฒฐ๊ตญ index์˜ ์ถฉ๋Œ

 

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

1. Separate Chaining

- Key์— ๋Œ€ํ•œ index๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ LinkedList๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹

- index๋กœ ์ธํ•ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ index๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” LinkedList์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€

 

** JDK 1.8์˜ ๊ฒฝ์šฐ์—” index ๋…ธ๋“œ๊ฐ€ 8์ดํ•˜๋ฉด LinkedList, ์ดˆ๊ณผํ•˜๋ฉด ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜์—ฌ ํƒ์ƒ‰ ์„ฑ๋Šฅ์„ ๊ฐœ์„ 

 

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

- ํ•ด์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋ฉด ๋‹ค๋ฅธ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹

1) ์„ ํ˜• ํƒ์ƒ‰ : ํ•ด์‹œ์ถฉ๋Œ์‹œ ๋‹ค์Œ ๋ฒ„์ผ“, ํ˜น์€ ๋ช‡ ๊ฐœ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…

2) ์ œ๊ณฑ ํƒ์ƒ‰ : ํ•ด์‹œ์ถฉ๋Œ ์‹œ ์ œ๊ณฑ๋งŒํผ ๊ฑด๋„ˆ๋›ด ๋ฒ„์ผ“์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

3) ์ด์ค‘ ํ•ด์‹œ : ํ•ด์‹œ์ถฉ๋Œ ์‹œ ๋‹ค๋ฅธ ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ ๋” ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉ

- ์ฒด์ด๋‹์ฒ˜๋Ÿผ ํฌ์ธํ„ฐ๊ฐ€ ํ•„์š”์—†๊ณ , ์ €์žฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์™ธ ์ถ”๊ฐ€์ ์ธ ์ €์žฅ๊ณต๊ฐ„๋„ ํ•„์š”์—†์Œ

- ์‚ฝ์ž…, ์‚ญ์ œ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ์Œ

- ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์„ ๋•Œ ๋” ์œ ๋ฆฌํ•จ

 

** ์‹ค์ œ ํ•ด์‹œํ•จ์ˆ˜๊ฐ€ ๋ณด์•ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ์‹œ์ธ HMAC SHA-256
http://sunphiz.me/wp/archives/1104

 

HMAC SHA-256 – Dog๋ฐœ์ž

HMAC(Hash-based Message Authentication Code, ํ•ด์‹œ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ์ธ์ฆ ์ฝ”๋“œ)์™€ SHA(Secure Hash Algorithm)-256 ์•ฝ์ž์˜ ์กฐํ•ฉ์œผ๋กœ, ์ธ์ฆ ์ฝ”๋“œ(์—ฌ๊ธฐ์„œ๋Š” MAC)๋ฅผ ํ•ด์‹œ(์—ฌ๊ธฐ์„œ๋Š” SHA) ๊ฐ’์„ ์ด์šฉํ•ด ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. RFC 210

sunphiz.me

[์ฐธ๊ณ ]

https://power-overwhelming.tistory.com/42

 

[์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜] ํ•ด์‹œ(Hash) ๋ž€?

Hash ๊ฐœ๋… ์ž„์˜์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ(Key)๋ฅผ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ(Value)๋กœ ๋ณ€ํ™”์‹œ์ผœ ์ €์žฅํ•˜๋Š” ๊ฒƒ ํ‚ค์— ๋Œ€ํ•œ ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ํ‚ค-๊ฐ’ ์Œ์˜ ๊ฐฏ์ˆ˜์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” a

power-overwhelming.tistory.com

https://ablue-1.tistory.com/68

 

[์ž๋ฃŒ๊ตฌ์กฐ] ํ•ด์‹œ(Hash)๋ž€ ๋ฌด์—‡์ธ๊ฐ€

์˜ค๋Š˜์€ ๋ณด์•ˆ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•ด์‹œํ•จ์ˆ˜์˜ ๊ทผ๋ณธ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ํ•ด์‹œ๋ฅผ ๋ฐฐ์›Œ๋ณด๊ฒ ๋‹ค ๐Ÿ“š ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋ž€ ์ปดํ“จํŒ…์—์„œ ํ‚ค๋ฅผ ๊ฐ’์— ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ธ, ์—ฐ๊ด€ ๋ฐฐ์—ด ์ถ”๊ฐ€์— ์‚ฌ์šฉ๋˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

ablue-1.tistory.com

https://velog.io/@wupajw/%ED%95%B4%EC%8B%9C%ED%95%A8%EC%88%98%EC%99%80-%ED%95%B4%EC%8B%9C%EC%B6%A9%EB%8F%8C

 

ํ•ด์‹œํ•จ์ˆ˜์™€ ํ•ด์‹œ์ถฉ๋Œ

ํ•ด์‹œํ•จ์ˆ˜๋Š” key๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋ฌด์ž‘์œ„๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•œ ํ›„ ๊ทธ ๊ฐ’์„ ์ฃผ์†Œ์‚ผ์•„ key - value๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ” ์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ๋งŽ์ด ์“ฐ์ž…๋‹ˆ๋‹ค.

velog.io

https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Data%20Structure/%5BData%20Structure%5D%20Hash(%ED%95%B4%EC%8B%9C).md 

 

GitHub - WooVictory/Ready-For-Tech-Interview: ๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

๐Ÿ’ป ์‹ ์ž… ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ค€๋น„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„ ๐Ÿ‘จ‍๐Ÿ’ป. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

 

'CS > Data Structure' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] Arrays vs LinkedList  (0) 2022.03.28