Guidelines

ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table)

ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table)은 ν‚€(Key)와 κ°’(Value)의 쌍으둜 데이터λ₯Ό μ €μž₯ν•˜λŠ” 자료ꡬ쑰둜, λΉ λ₯Έ 데이터 검색, μ‚½μž…, μ‚­μ œλ₯Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄μ‹œ ν…Œμ΄λΈ”μ€ 사물함과 λΉ„μŠ·ν•œ κ°œλ…μœΌλ‘œ, μ‚¬λ¬Όν•¨μ˜ λ²ˆν˜ΈλŠ” 'ν‚€(key)'에, 사물함 μ•ˆμ˜ 물건은 'κ°’(value)'에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

ν•΄μ‹œ ν…Œμ΄λΈ”μ—μ„œ 'ν•΄μ‹œ ν•¨μˆ˜'λŠ” 주어진 ν‚€λ₯Ό λ°›μ•„ κ·Έ 킀에 ν•΄λ‹Ήν•˜λŠ” μ‚¬λ¬Όν•¨μ˜ 'μ£Όμ†Œ'λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. 이 μ£Όμ†ŒλŠ” ν‚€κ°€ μ €μž₯λ˜λŠ” μœ„μΉ˜λ₯Ό 가리킀며, 덕뢄에 ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 맀우 λΉ λ₯΄κ²Œ 값을 찾을 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” ν•΄μ‹œ ν…Œμ΄λΈ” ꡬ쑰가 'λ”•μ…”λ„ˆλ¦¬(Dictionary)' ν˜•νƒœλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μž‘λ™ 원리

  • ν•΄μ‹±(Hashing): ν‚€λ₯Ό ν•΄μ‹œ ν•¨μˆ˜λ₯Ό 톡해 ν•΄μ‹œ μ½”λ“œ(Hash Code)둜 λ³€ν™˜ν•˜λŠ” 과정을 λœ»ν•©λ‹ˆλ‹€. 이 ν•΄μ‹œ μ½”λ“œλŠ” μ €μž₯될 λ°μ΄ν„°μ˜ μ£Όμ†Œλ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.

  • ν•΄μ‹œ 좩돌(Hash Collision): 두 개의 λ‹€λ₯Έ ν‚€κ°€ 같은 사물함 번호(μ£Όμ†Œ)λ₯Ό κ°€λ¦¬ν‚€λŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΆ©λŒμ€ μ„œλ‘œ λ‹€λ₯Έ ν‚€κ°€ λ™μΌν•œ ν•΄μ‹œ μ½”λ“œλ‘œ λ³€ν™˜λ˜λŠ” 경우λ₯Ό λœ»ν•©λ‹ˆλ‹€.

  • ν•΄μ‹œ ν•¨μˆ˜(Hash Function): ν•΄μ‹œ ν…Œμ΄λΈ”μ€ ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ ν‚€(Key)λ₯Ό ν•΄μ‹œ μ½”λ“œλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€. 이 ν•΄μ‹œ μ½”λ“œλŠ” μ €μž₯될 κ°’μ˜ 인덱슀둜 μ‚¬μš©λ©λ‹ˆλ‹€. 쒋은 ν•΄μ‹œ ν•¨μˆ˜λŠ” μΆ©λŒμ„ μ΅œμ†Œν™”ν•˜κ³ , 데이터λ₯Ό ν•΄μ‹œ ν…Œμ΄λΈ”μ— κ³ λ₯΄κ²Œ λΆ„ν¬μ‹œν‚΅λ‹ˆλ‹€.


ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ κ΅¬ν˜„

ν•΄μ‹œ ν…Œμ΄λΈ” κ΅¬ν˜„ μ˜ˆμ‹œ
hash_table = list([0 for i in range(10)]) def get_key(data): return hash(data) def hash_function(key): return key % 8 def save_data(data, value): hash_address = hash_function(get_key(data)) hash_table[hash_address] = value def read_data(data): hash_address = hash_function(get_key(data)) return hash_table[hash_address] save_data('Key1', 'Value1') save_data('Key2', 'Value2') print("Key1:", read_data('Key1')) # Value1 print("Key2:", read_data('Key2')) # Value2

ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μž₯점과 단점

μž₯점:

ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μ£Όμš” μž₯점은 λ‹€μŒκ³Ό 같이 μš”μ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  1. λΉ λ₯Έ 데이터 μ ‘κ·Ό 및 검색: ν•΄μ‹œ ν…Œμ΄λΈ”μ€ 평균적인 μƒν™©μ—μ„œ 데이터λ₯Ό μΆ”κ°€, 검색, μ‚­μ œν•˜λŠ” 데 μƒμˆ˜ μ‹œκ°„(O(1))이 μ†Œμš”λ©λ‹ˆλ‹€. μ΄λŠ” ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 직접 ν•΄λ‹Ή 값에 μ ‘κ·Όν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

  2. 효율적인 λ©”λͺ¨λ¦¬ μ‚¬μš©* ν•΄μ‹œ ν…Œμ΄λΈ”μ€ 데이터λ₯Ό 효율적으둜 μ €μž₯ν•˜λ©°, ν•„μš”μ— 따라 λ™μ μœΌλ‘œ 크기λ₯Ό μ‘°μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. ν‚€-κ°’ 쌍 데이터 ꡬ쑰: ν‚€-κ°’ 쌍 ꡬ쑰둜 인해 데이터λ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  κ΄€λ¦¬ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 데이터λ₯Ό μ§κ΄€μ μœΌλ‘œ μ‚½μž…, 검색, μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점:

  1. 좩돌(Collision) λ°œμƒ: μ„œλ‘œ λ‹€λ₯Έ ν‚€κ°€ λ™μΌν•œ ν•΄μ‹œ 값을 κ°€μ§ˆ λ•Œ λ°œμƒν•˜λŠ” μΆ©λŒμ€ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μ„±λŠ₯을 μ €ν•˜μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. 좩돌이 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜λ©΄ ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ 평균적인 μ ‘κ·Ό, 검색, μ‚­μ œ μ‹œκ°„μ΄ μƒμˆ˜ μ‹œκ°„(O(1))μ—μ„œ μ΅œμ•…μ˜ 경우 μ„ ν˜• μ‹œκ°„(O(n))으둜 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. μˆœμ„œ μœ μ§€ λΆˆκ°€λŠ₯: ν•΄μ‹œ ν…Œμ΄λΈ”μ€ λ°μ΄ν„°μ˜ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, ν‚€-κ°’ 쌍이 μΆ”κ°€λœ μˆœμ„œλŒ€λ‘œ 데이터λ₯Ό κ²€μƒ‰ν•˜κ±°λ‚˜ λ°˜λ³΅ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— λ°μ΄ν„°μ˜ μˆœμ„œκ°€ μ€‘μš”ν•œ κ²½μš°μ—λŠ” ν•΄μ‹œ ν…Œμ΄λΈ”μ΄ μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result