해시 테이블

양현진·2023년 10월 17일

해시 테이블

해시 테이블 = 사람의 뇌

하나하나 확인해서 찾지 않고 O(1)로 찾을 수 있다는 점에서 사람의 뇌라고 생각하면 편하다!

시간 복잡도

저장, 삭제, 검색의 시간 복잡도가 모두 O(1)

  • 리스트와 달리 in 연산자 사용하여 존재 여부를 확인할 때도 O(1)이다.
  • 충돌로 인한 최악의 경우 O(n)의 시간복잡도를 가진다.
  • 저장공간을 확보해야 하기 때문에 공간의 효율성은 떨어질 수 있지만 메모리를 사용해서 시간 복잡도를 줄일 수 있다.

    set도 in 연산자를 사용하면 O(1)로 존재 여부를 확인할 수 있다
    dictionary의 key 값을 set에 넣어서 사용한다고 생각하면 편하다!

key-value 데이터

  • key-value 쌍으로 데이터를 저장한다
  • 중복된 값을 key로 사용할 수 없다!
  • 중복된 key 값을 사용하면 기존 value가 덮어씌여진다.
  • value는 중복된 값이 들어갈 수 있다.

사용방법

dictionary에 값 저장

dict = {}

dict['python'] = 1
dict['java'] = 2

print(dict)

{'python': 1, 'java': 2}

key 를 사용해서 value 에 접근

print(dict['python'])
print(dict.get('python'))

1

key 값 중에 'python' 존재 여부 확인

if 'python' in dict :
    print(True)
if 'python' in dict.keys() :
    print(True)

True

value 값 중에 1 존재 여부 확인

if 1 in dict.values() :
    print(True)

True

정리

  • 파이썬에서는 dictionary로 해시 테이블 사용
  • key를 배열의 index처럼 생각하기
  • O(1)의 시간복잡도로 검색하고 싶을 때는 dictionary나 set을 사용!
  • 순서가 중요한 경우는 리스트를 사용하는 것이 better
  • dictionary나 set을 사람의 뇌로 생각하고 기억하고 싶은 것이 있으면 key 값에 지정하여 dictionary에 저장하거나 set에 저장한 후in 을 사용해서 빠르게 확인하기

0개의 댓글