따라서 내가 원하는 것,이 전 미리 정의 된 키가 12 개월이 배열을 찾기위한 완벽한 해시 테이블을 구축하고자한다고 가정 해 봅시다완벽한 해시 (모든 연속 된 버킷이 가득 찼음), gperf 또는 대안을 만드시겠습니까?
hash("January")==0
hash("December")==11
내가 gperf 통해 내 월 이름을 실행하고 좋은 해시 함수를 가지고, 16 개의 버킷을 제공하는 것으로 나타납니다 (또는 범위가 16 개).
#define MIN_HASH_VALUE 3
#define MAX_HASH_VALUE 18
/* maximum key range = 16, duplicates = 0 */
생성 gperf의 코드를 찾고, 그 해시 함수의 코드는 256 크기의 테이블에서 LEN 플러스 CHAR 값 룩업 단순 반환한다. 어떻게 든 내 머리 속에서 나는 상상력이 풍부한 기능을 상상할 수 있었다 ... :)
정확하게 12 개의 버킷을 원한다면 (즉, 사용하지 않은 버킷을 건너 뛰고 싶지 않다면)? 이처럼 작은 세트의 경우 실제로는 중요하지 않지만 1000 개의 미리 정의 된 키가 있고 정확히 1000 개의 버킷을 연속으로 원할 때?
결정적인 방법을 찾을 수 있습니까?
이러한 해시의 목표는 정말 빠른 해시 기능을 제공하므로 2의 거듭 제곱 (12 개월 동안 16 개 버킷, 1000 개의 미리 정의 된 키는 1024 개 버킷)입니다. 왜 그런 구멍을 피고 싶니? 이 요구 사항 때문에 성능이 저하되는 것에 동의하십니까? – Jerome
감사! 그것은 그때 그것을 설명합니다. – Sint
명확히하기 위해, 내가 물었던 이유는 "strcmp의 해쉬 체인"이 길면 "다른 사람이 그렇다면 else if if"체인을 교체하려고하는 것이 었습니다. 속도 향상이 중요하다면 약간의 비어있는 버킷은 지불 할 작은 가격 일 것입니다. – Sint