본문 바로가기
Algorithms

그림으로 개념을 이해하는 알고리즘 - Ch 05

by soojitasan 2024. 6. 21. 22:35

 

 

CH 05. 해시 테이블

 

- 해시 함수 : 문자열을 받아 숫자(인덱스)를 반환하는 함수 = 문자열에 숫자를 할당

- 해시 테이블 (=딕셔너리=연관배열) : 해시 함수 + 배열, 키와 값으로 구성

  최악의 경우 O(n)

  최선의 경우 O(1)

 

book = dict()
book["apple"] = 0.67
book["milk"] = 1.49
book["avocado"] = 1.49

print(book)
print(book["avocado"])

 

- 해시 테이블 사용 예

1. 조회 시 (전화번호부, DNS 확인 작업)

phone_book = {} ## dict()
phone_book["jenny"] = 8675309
phone_book["emergency"] = 911

print(phone_book["jenny"])

 

2. 중복 방지 시

voted = {}
value = voted.get("tom")

def check_voter(name):
  if voted.get(name):
    print("돌려 보내세요")
  else:
    voted[name] = True
    print("투표하게 하세요")

check_voter("tom")
check_voter("mike")
check_voter("mike")  ## 두번째 호출 시에는 중복된 값으로 판단

 

3. 캐싱 


def get_page(url):
  if cache.get(url):
    return cache[url]
  else:
    data = get_data_from_server(url)
    cache[url] = data
    return data

 

 

 

* 충돌 : 두 개의 키가 같은 공간에 할당되는 경우

* 해결 방법 : 같은 공간에 여러 개의 키를 연결 리스트로 생성하여 넣기 … 해시 테이블 느려질 수 있음

 

- 사용률 = 해시 테이블에 존재하는 항목 수 / 해시 테이블에 존재하는 공간 수

   > 사용률이 커지면 공간 추가 필요 … 리사이징


참고자료

Hello Coding 그림으로 개념을 이해하는 알고리즘