일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- downheap
- 이중해싱
- 연결리스트
- 삽입식 힙
- 선형조사법
- 딥러닝
- anaconda
- 경사하강법
- 2차조사법
- vsCode
- 개방주소법
- 알고리즘
- urlencoded
- body-parser
- MSE
- 선형회귀
- Loss함수
- ML
- 상향식 힙
- POST
- 분리연쇄법
- upheap
- 해시테이블
- 이중연결리스트
- nodejs
- 힙정렬
- pytorch
- bodyparser
- Today
- Total
LittleDeveloper
Week7_해시테이블(1) 본문
해시테이블(hash table): 키-주소 매핑에 의해 구현된 사전 ADT
해시테이블 = 버켓 배열 + 해시함수
-항목들의 키를 주소(인덱스 i)로 매핑함으로서 1차원 배열에 사전 항목들을 저장
성능: 탐색, 삽입, 삭제- O(n) 최악시간, 그러나 O(1) 기대시간
버켓 배열: 해시테이블을 위한 버켓 배열은 크기 M의 배열 A로서,
A의 각 셀은 버켓(키-원소 쌍) = 슬롯
-정수 M: 배열의 용량
-키 k를 가진 원소 e는 버켓 A[k]에 삽입
-사전에 존재하지 않는 키에 속하는 버켓 셀들- NoSuchKey 라는 특별한 개체를 담는 것
-
버켓 배열 분석
-키가 유일한 정수며 [0, M-1] 범위에 잘 분포되어 있다면, 해시테이블에서의 탐색, 삽입, 삭제에 O(1)
최악의 시간 소요
-2가지 중요한 결함!!!!
->O(n) 공간을 사용하므로, M>>>n이면 공간 낭비
->키들이 [0, M-1]범위 내의 유일한 정수여야 하지만, 이는 종종 비현실적
*설계 목표: 해시테이블 데이터구조를 정의할 때는, 키를 [0, M-1] 범위 내의 정수로 매핑하는 좋은, adequate한 방식과 함께 버켓 배열을 구성함.
*해시함수 및 해시테이블
-해시함수(hash function) h: 주어진 형의 키를 고정 범위 [0, M-1]로 매핑
-h(x) = x%M, h: 정수 키 x에 대한 해시함수, 주어진 키 형의 해시테이블
-h(x): 키 x의 해시값(hash value)
-주어진 키 형의 해시테이블 2가지로 구성
1)해시함수 h
2)크기 M의 배열(=테이블)
-사전을 해시테이블로 구현할 때, 목표는 항목 (k, e)를 첨자 i=h(k) 에 저장하는 것
<해시함수>
-해시코드맵 h1: keys -> integers
-압축맵 h2: integers -> [0,M-1]
-해시코드맵을 적용, 그 결과에 압축맵을 적용 -즉, h(k)=h2(h1(k))
-좋은 해시함수가 되려면?? : 키들은 외견상 무작위하게 분산, 빠르고 쉬운 계산(가능하면 O(1))
해시함수 예)
임의의 키들->해시코드맵(-2,-1,0,1,2)->압축맵(0,1,----M-1)
ex) 학번을 마지막 4자리 수로 분류한 다음, 방번호[0,1,2]를 분류한다.
[해시코드맵]
-메모리 주소
-정수 캐스트
-요소합
-다항 누적
[압축맵]
*나누기
-h2(k)=|k|%M
-해시테이블의 크기 M은 일반적으로 소수로 선택
*승합제(MAD)
-h2(k)=|ak+b|%M
-a,b는 음이 아닌 정수로서 a%M not 0, 그렇지 않으면, 모든 정수가 동일한 값 b로 매핑됨
'알고리즘(C)' 카테고리의 다른 글
Week9_해시테이블_실습(2) (0) | 2021.11.29 |
---|---|
Week9_해시테이블_실습(1) (0) | 2021.11.29 |
Week10_ 그래프 (0) | 2021.11.05 |
Week2_우선순위 큐_개념 (0) | 2021.10.13 |
Week1_ Review (0) | 2021.10.13 |