《 데이터 구 조 》 학습 - Hash (1) -- Hash 소개
이 시 리 즈 는 (Data Structures and Algorithm Analysis in C, 작가 Mark Weiss) 라 는 책의 학습 노트 입 니 다. 제 가 cc 150 을 할 때 어떤 지식 을 보충 해 야 할 때 이 책 을 꺼 내 서 공부 하고 공유 하 겠 습 니 다. 질문 과 건의 가 있 으 면 저 와 공유 하고 싶 습 니 다.
1. 해시 테이블 의 장단 점
장점: 평균 상수 시간 (constant average time) 내 삽입, 삭제, 찾기 (insert, delete, find) 작업 이 완료 되 었 습 니 다.단점: 그 어떠한 순서 정보 (order information) 도 유효 하 게 기록 되 지 않 기 때문에 findMax, findMin 또는 순서대로 전체 표를 인쇄 해도 선형 시간 내 에 완성 할 수 없습니다.
2. 해시 테이블 개관
가장 간단 한 Hash Table 예 는 하나의 (매우 큰) 배열 이다.예 를 들 어 입력 데이터 가 [0, 999] 범위 내의 정수 라 는 것 을 알 고 있다 면 우 리 는 길이 가 1000
int
인 배열 을 만 들 면 하나의 데 이 터 를 삽입 (해당 배열 의 위 치 를 1) 하고 데 이 터 를 찾 아 (배열 의 위치 가 1 인지 판단) 한 데 이 터 를 삭제 (배열 의 위 치 를 0 으로 설정) 하 는 것 이 매우 쉽다.3. Practical Hash Table
물론 실제 우리 의 입력 데 이 터 는 범위 가 매우 넓 어서 그렇게 큰 배열 을 만 들 수 없 거나 입력 데 이 터 는 정수 가 아니 라 문자열, 부동 소수점 또는 사용자 정의 형식 에 사용 할 수 있 습 니 다.따라서 직접 맵, 순수 배열 방식 으로 구 성 된 Hash Table 은 우리 의 모든 수 요 를 만족 시 킬 수 없습니다.
3.1 해시 테이블 요소
실 용적 인 Hash Table 을 구성 하려 면 몇 가지 요소 가 있 습 니 다.
int
이면 int
배열 이 고 입력 데이터 가 string
이면 string
배열 이다.위 에서 말 한 바 와 같이 Hash Function 은 입력 데 이 터 를 다른 Hash 표 위치 에 비 추 는 역할 을 합 니 다.예 를 들 어 Hash 표 의 크기 가 10 이 고 입력 데이터 가 정수 라면 우 리 는 입력 데이터 모델 10 이후 의 결 과 를 Hash 표 위치 로 하여 모든 데이터 에 대응 하 는 합 법 적 인 위치 가 존재 하도록 보장 할 수 있다.
3.2.1 Hash Function 은 어떻게 선택 합 니까?
답 은 확실 하지 않다.구체 적 인 상황 을 구체 적 으로 분석 하 다.그러나 몇 가지 주요 참고 요소 가 있다.
3.2.2 자주 사용 하 는 Hash Function
unsigned Position=0;
while(*data!='\0')
Position=(Position<<5) + *data++;
return Position % TableSize;
4. 총화
Gayle McDowell (Cracking the coding interview 저자) 에 따 르 면 Hash 표 는 면접 에서 가장 많이 사용 되 는 데이터 구조 중 하나 이 므 로 튼튼 하 게 파악 해 야 한다.이상 은 Hash Table 의 가장 기본 적 인 개념 입 니 다. 실제 사용 가능 한 Hash 표를 만 들 기 에는 부족 합 니 다.그렇다면 세부 사항 을 구체 적 으로 실현 하려 면 어떻게 해 야 할 까?충돌 해결 방안 에는 어떤 전형 적 인 방법 이 있 습 니까?다음 편 '데이터 구조 학습' - Hash (2) – Separate Chaining '을 기대 해 보 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.