Array 사용 (Array의 단점 : 인덱스는 항상 int 이다)
Key를 구할 때, Hash를 사용하는 배열
Hash
충돌이 발생함
- 조사법(Probing) : 해시테이블 내 빈 공간을 찾아서 데이터 저장 / 새로운 공간을 할당하진 않지만 시간이 오래걸릴 수 있다.
- 선형(Linear) : 순차적으로 찾음
- 2차(Quadrantic) : 다항식 사용해서 찾음(hash(k) + i * i)
- 이중 해싱(double hashing) : hashB(hashA(k))
- 체이닝(Chaining) : 연결 리스트로 저장한다. / 속도가 빠르지만 새로운 공간을 할당하게 된다.
체이닝
컨테이너에 헤쉬를 연결리스트에 값을 넣는다.
"foo" / A => 2
"Boo" / B => 2
[][][&list[8]][][][][][][][][]
[]-[]-[]-[]-[]-[]-[]-[]-[A]-[B]-[]
컴퓨터는 캐싱을 활용해야 속도가 빨라진다
장점
검색 O(1) 키를 인덱스로 가져갈 수 있다.
단점
최악의 경우 탐색이 느릴 수 있다.
정렬되어 있지 않다
탐색이 일방향이다
캐시친화적이지 않다