CS/algorithm & data structure

[파이썬 알고리즘 인터뷰] 해시 테이블

hjkim0502 2022. 3. 2. 02:08
  • 해시 테이블(해시 맵): 키를 값(해시)에 매핑할 수 있는 구조인, 연관 배열 ADT를 구현하는 자료구조
    • 대부분의 연산이 분할 상환 분석에 따라 시간 복잡도가 O(1)
  • 해시 함수: 임의 크기 데이터를 고정 크기 값(해시)으로 매핑하는 데 사용할 수 있는 함수
    • 해시 함수가 값을 매핑할 때 충돌을 최소화하는 것이 무엇보다 중요함
  • 로드 팩터: 해시 테이블에 저장된 데이터 개수를 버킷의 개수로 나눈 것
  • 해싱: 해시 테이블을 인덱싱하기 위해 해시 함수를 사용하는 것
  • 개별 체이닝: 충돌 발생 시 연결리스트로 연결
  • 오픈 어드레싱: 충돌 방생 시 탐사를 통해 빈 공간을 찾는 방식
    • 전체 슬롯 개수 이상 저장 불가, 모든 원소가 반드시 자신의 해시값과 일치하는 주소에 저장된다는 보장이 없음
    • 데이터들이 고르지 않고 뭉치는 경향이 있다
    • 일정 이상 데이터가 채워지면 더 큰 버킷을 생성하고 리해싱
  • 파이썬에서 해시 테이블로 구현된 딕셔너리는 오픈 어드레싱으로 성능을 높이고, 로드 팩터를 작게 잡음

 

706. design hashmap

- defaultdict로 초기화하고 연결리스트에 데이터 저장

- 개별 체이닝으로 충돌 처리

 

771. jewels and stones

- 해시 테이블

- defaultdict

- Counter

- 리스트 컴프리헨션(true = 1)

* 리스트 컴프리헨션에서 [] 없애면 제네레이터

 

3. longest substring without repeating characters

- 슬라이딩윈도우, 투포인터

- 딕셔너리

 

347. top K frequent elements

- 힙

- Counter

* zip()

* 아스테리스크(*): 튜플 또는 리스트 등의 시퀀스 언패킹, **: 키/갑 페어 언패킹 (함수의 인자일 때는 패킹) (변수 할당)