Data structures (with python) - 7. Hash Table

2024. 1. 8. 18:09ใ†CS - Roadmap.sh/1. Data structures

Data structures (with python) - 7. Hash Table

 

๐Ÿ’ก Hash Table, Map, HashMap, Dictionary or Associative are all the names of the same data structure. It is one of the most commonly used data structures.

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

 

์œ„ํ‚คํ”ผ๋””์•„

 

ํ•ด์‰ฌ ํ…Œ์ด๋ธ”(Hash Table)์€ ํ‚ค(Key)๋ฅผ ๊ฐ’(Value)์— ์—ฐ๊ฒฐํ•˜์—ฌ, ํ•˜๋‚˜์˜ ํ‚ค๊ฐ€ 0 ๋˜๋Š” 1๊ฐœ์˜ ๊ฐ’๊ณผ ์—ฐ๊ด€๋  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ๊ฒ€์ƒ‰, ์‚ญ์ œ๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

 

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํ•ต์‹ฌ ์š”์†Œ๋Š” ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ‚ค๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ธ๋ฑ์Šค๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ํ•ด๋‹น ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒ ํ•ฉ๋‹ˆ๋‹ค.

 

In Python

 

Python ์—์„œ๋Š” ๋”•์…”๋„ˆ๋ฆฌ(Dictionary)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

 

# ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ
hash_table = {}

# ๊ฐ’ ์ถ”๊ฐ€
hash_table['apple'] = '์‚ฌ๊ณผ'
hash_table['banana'] = '๋ฐ”๋‚˜๋‚˜'
hash_table['orange'] = '์˜ค๋ Œ์ง€'

# ๊ฐ’ ์กฐํšŒ
print(hash_table['apple'])  # '์‚ฌ๊ณผ' ์ถœ๋ ฅ
print(hash_table['banana'])  # '๋ฐ”๋‚˜๋‚˜' ์ถœ๋ ฅ

# ๊ฐ’ ๋ณ€๊ฒฝ
hash_table['apple'] = '์• ํ”Œ'
print(hash_table['apple'])  # '์• ํ”Œ' ์ถœ๋ ฅ

# ๊ฐ’ ์‚ญ์ œ
del hash_table['orange']
print(hash_table)  # {'apple': '์• ํ”Œ', 'banana': '๋ฐ”๋‚˜๋‚˜'} ์ถœ๋ ฅ

 

ํ‰๊ท ์ ์œผ๋กœ O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅด ๊ฐ€์ง„๋‹ค.

์ฆ‰, ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ๊ฑฐ์œผ ใ…ฃ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด, ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ํ•ด์‹œํ…Œ์ด๋ธ”์—๋Š” 

"ํ•ด์‹œ ์ถฉ๋Œ" ์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•(์˜คํ”ˆ ํ•ด์‹ฑ, ์ฒด์ด๋‹ ๋“ฑ) ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹คํ–‰ํžˆ๋„ Python์˜ ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ•ด์‹œ ์ถฉ๋Œ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•  ํ•„์š”๋Š” ์—†๋‹ค.

 

(appendix

java ์˜ HashMap, JavaScript์˜ ๊ฐ์ฒด, Ruby์˜ ํ•ด์‹œ ๋“ฑ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๊ณ , ๋Œ€๋ถ€๋ถ„ ํ•ด์‹œ ์ถฉ๋Œ์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

C++์˜ std::unordered_map ์ด๋‚˜ Java์˜ HashMap ์ฒ˜๋Ÿผ ํ•ด์‹œ ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์œ ์ €๊ฐ€ ํ• ์ˆ˜ ์žˆ๋‹ค.

๋” ๋‚ฎ์€ ์ˆ˜์ค€์˜ ์–ธ์–ด( ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ, ์ปค์Šคํ…€ ํ•˜๋“œ์›จ์–ด ๋“ฑ๋“ฑ) ์—์„œ๋Š” ์ง์ ‘ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.)

 

728x90