해시 함수 분류 인터넷에서 나는이 질문을 겪었습니다.

인터넷에서 나는이 질문을 겪었습니다.

키 값을 찾는 다양한 방법에 따라 해싱 함수를 분류하십시오.

같은 답변으로

  • 직접 방법
  • 빼기 방법
  • 모듈로 나누기 방법
  • 자릿수 추출 방법
  • 미드 스퀘어 방법
  • 접는 방법
  • 의사 난 수법

내가 이상하게 생각합니다. 나는 해싱에 대해 많이 알고 있다고 생각하지만 이것은 나에게 명백한 횡설수설입니다.



답변

그것들은 해시 코드를 값을 포함하는 배열의 인덱스로 바꾸는 방법입니다. 해시 코드가 0x12345678이라고 가정 해 봅시다. 매우 큰 숫자이며이 크기의 배열이 없을 것입니다. 당신이 할 수 있다면 그냥 할 수 있습니다

Value = array[0x12345678];

그리고 완료하십시오 (직접 방법).

그렇지 않으면 너무 많은 충돌을 피 하면서이 값을 배열 크기에 맞는 값으로 변환하는 방법을 알아낼 수 있습니다. 사용 된 용어는 아마도 다른 이름으로도 알려져 있지만 예를 들어 해시 코드의 상위 비트를 가리킬 수 있습니다

Value = array[hashcode & 0xffff];

또는 배열 크기에 따라 해시 코드를 수정하십시오.

Value = array[hashcode % array.size()]; // modulo division

기타

편집 :이 링크 가 도움 이 될 수 있습니다