해시, 해시 함수, 해시 알고리즘 분석

목차

배경

해싱 : 해싱

해시 테이블

완벽한 해시 함수

신청

해시 함수의 가장 멋진 응용 프로그램-블록 체인

의미

필수 특성

해시 함수 설계

접는 방법

평방 取中 법

비수 치적 처리

해시 충돌 해결

점프 감지 방법

다시 만들다

두 번째 감지

데이터 목걸이-해시와 목록 간의 절충, O (1)과 O (n) 간의 절충

추상 데이터 유형 및 구현 매핑

추상 데이터 유형 "매핑": ADT 맵

코드 예

해시 알고리즘 분석

요약 정렬 및 검색


배경

해싱 : 해싱

  • 위에서 언급했듯이 데이터 항목이 크기별로 정렬되면 이진 검색을 사용하여 알고리즘의 복잡성을 줄입니다.
  • 검색 알고리즘의 복잡성을 O (1)로 줄이기 위해 새로운 데이터 구조를 구성합니다.
    • 데이터 항목의 위치에 대한 사전 지식이 더 필요함

해시 테이블

  • 모든 스토리지 위치 슬롯, 각 슬롯에는 고유 한 이름이 있습니다.

나머지를 찾는 방법을 사용하여 해시 테이블을 가져옵니다.

  • 부하율 : 데이터 항목이 차지하는 슬롯의 비율 

    완벽한 해시 함수

해시 함수가 각 데이터 항목을 다른 슬롯에 매핑 할 수있는 경우이 해시 함수를 "완벽한 해시 함수"라고합니다.

데이터 항목은 자주 변경됩니다. 완벽한 해시 함수를 설계하는 방법은 무엇입니까?

좋은 해시 함수에는 특성이 있습니다.

  1. 최소한의 충돌 (대략 완벽 함)
  2. 낮은 계산 난이도 (작은 추가 오버 헤드)
  3. 데이터 항목을 완전히 분산 (공간 절약) 

     

신청

"지문 기능"

  1. 압축성-모든 길이의 데이터에서 얻은 "지문"의 길이는 고정되어 있습니다.
  2. 계산 용이성-원본 데이터에서 "지문"을 계산하기 쉽고 지문에서 원본 데이터를 계산하는 것은 거의 불가능합니다.
  3. 수정 저항-원본 데이터의 사소한 변경으로 "지문"에 큰 변화가 발생합니다.
  4. 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

해시 알고리즘 분석

요약 정렬 및 검색

추천

출처blog.csdn.net/yiweixiaomiandui/article/details/115253584