목차
데이터 목걸이-해시와 목록 간의 절충, O (1)과 O (n) 간의 절충
배경
해싱 : 해싱
- 위에서 언급했듯이 데이터 항목이 크기별로 정렬되면 이진 검색을 사용하여 알고리즘의 복잡성을 줄입니다.
- 검색 알고리즘의 복잡성을 O (1)로 줄이기 위해 새로운 데이터 구조를 구성합니다.
- 데이터 항목의 위치에 대한 사전 지식이 더 필요함
해시 테이블
- 모든 스토리지 위치 슬롯, 각 슬롯에는 고유 한 이름이 있습니다.
나머지를 찾는 방법을 사용하여 해시 테이블을 가져옵니다.
- 부하율 : 데이터 항목이 차지하는 슬롯의 비율
완벽한 해시 함수
해시 함수가 각 데이터 항목을 다른 슬롯에 매핑 할 수있는 경우이 해시 함수를 "완벽한 해시 함수"라고합니다.
데이터 항목은 자주 변경됩니다. 완벽한 해시 함수를 설계하는 방법은 무엇입니까?
좋은 해시 함수에는 특성이 있습니다.
- 최소한의 충돌 (대략 완벽 함)
- 낮은 계산 난이도 (작은 추가 오버 헤드)
- 데이터 항목을 완전히 분산 (공간 절약)
신청
"지문 기능"
- 압축성-모든 길이의 데이터에서 얻은 "지문"의 길이는 고정되어 있습니다.
- 계산 용이성-원본 데이터에서 "지문"을 계산하기 쉽고 지문에서 원본 데이터를 계산하는 것은 거의 불가능합니다.
- 수정 저항-원본 데이터의 사소한 변경으로 "지문"에 큰 변화가 발생합니다.
- Anti-conflict- 원래 데이터와 "지문"을 알면 동일한 지문 (위조)으로 데이터를 찾기가 매우 어렵습니다.
예
import hashlib
hashlib.md5("hello world!").hexdigest()
hashlib.sha1("hello world!").hexdigest()
# 还可以用update方法
m = hashlib.md5()
m.update("hello world!")
m.update("this is part #2")
m.hexdigest()
- 암호화 된 형태로 비밀번호 저장
- 파일 변조 방지
- 복권 베팅 신청
해시 함수의 가장 멋진 응용 프로그램-블록 체인
의미
블록 체인은 분산 데이터베이스입니다.
네트워크를 통해 연결된 노드, 각 노드는 전체 데이터베이스의 모든 데이터를 저장하고 모든 위치에 저장된 데이터는 동기화됩니다.
필수 특성
분산화 : 제어 센터 또는 조정 센터 노드가 없습니다. 모든 노드는 동일하며 제어 할 수 없습니다.
워크로드 증명 : 워크로드가 많은 사람은 전체 네트워크 수정을 마스터합니다.
해시 계산은 계산하기가 매우 쉽지 않습니까? 왜 엄청난 계산을해야합니까?
계산이 어렵 기 때문에 새로운 블록 생성 속도를 제어하여 전체 분산 네트워크에서 동기화를 용이하게합니다.
해시 함수 설계
접는 방법
평방 取中 법
비수 치적 처리
무게를 늘리는 것은 철자도를 다루는 좋은 방법이지만 계산량이 증가합니다.
따라서 해시 함수는 저장 프로 시저 및 검색 프로세스의 계산 부담이 될 수 없습니다. 그렇지 않으면 순차 검색 및 이진 검색을 직접 수행 할 수 있습니다.
해시 충돌 해결
스킵 감지 방법
다시 만들다
해시 테이블의 길이는 균일 한 분포를 보장하기 위해 소수로 설정됩니다.
두 번째 감지
데이터 목걸이-해시와 목록 간의 절충, O (1)과 O (n) 간의 절충
추상 데이터 유형 및 구현 매핑
추상 데이터 유형 "매핑": ADT 맵
코드 예
H=HashTable()
H[54]="cat"
H[24]="dog"
print(H.slots)
print(H.data)
print(H[24]) # dog
print(H[20]) # None
class HashTable:
def __init__(self):
self.size = 11
self.slots = [None]*self.size
self.data = [None]*self.size