2011-05-14 3 views
1

동료가 해싱 문제로 어려움을 겪고 있습니다.해시 17 문자 키를 4 바이트 값으로 변경

4 바이트 값 (영숫자 일 수도 있음)으로 변환해야하는 17 개의 영숫자 값 키 (VIN 코드)가 있습니다. 이 4 바이트가 키의 수를 제한한다는 것을 알면이 문제에 대해 어떤 완벽한 해시 알고리즘을 볼 수 있습니까?

+2

4 바이트는 실제로 VIN을 4 바이트로 고유하게 인코딩하려는 경우에만 키를 제한합니다. 유일성이 필요합니까? –

+0

어쩌면이 hw는 연쇄 해싱에 관한 것일까요? –

+0

@ 존 Skeet : 그래, 4 바이트 (많은 해시 수있는 키의 수를 제한 할 것입니다) 예, 고유성 뭔가 정말 필요하다는 것을 알고 있습니다. 불가능한 경우가 아니면 "거의 완벽한 해시"가 작동 할 수 있습니다. 확실하지는 않습니다. –

답변

1

Wikipedia을 간략하게 살펴보면 먼저 키를 압축하거나 2 단계로 해시 할 수 있다고 생각합니다.

1 단계 : 표준에 따라 개별 부품의 키를 분해하고 개별적으로 해시를 사용자 정의합니다.

2 단계 : 해시를 함께 가져 와서 일반 해시를 수행합니다.

순진 예 : 데이터가 미국에 국한되어있는 경우

, 처음 2 바이트의 27 가능성이있다, 그래서 처음 2 바이트가 0에 해시 될 수있다 - 26 (우리가 a를 얻을 가정 여기에서)

그런 다음 다른 바이트가 N 개의 가능성을 가지며 0 - N-1로 해싱 될 수 있다고 가정합니다. (여기서 우리는 b을 얻는다 고 가정합니다.)

조합 결과는 a * N + b 일 수 있습니다. 그런 다음 정상적인 해시를 수행하십시오 (26 * N> 4 바이트가 표현할 수있는 경우).

+0

답변을 주셔서 감사합니다. 요청하기 전에 생각할 시간이 없었지만 유감스럽게도 VIN 번호에 포함 된 값보다 제한적인 "수동"해시를 사용하는 것이 더 간단합니다. 내 잘못이야. –

+0

@ Vincent B., 나는 당신이 대답 할 때 나의 업데이트 된 답변을 보지 못했을 경우를 대비하여 조금 편집했다. –

1

해시 함수에 대해 이야기하고 있으므로 x0! = x1 인 f (x0) == f (x1)을 갖는 것이 좋습니다.

좋은 해시 함수는 해시 값이 균등하게 분산되어 있어야합니다. 17 자리 값을 구성하는 4 바이트 그룹을 추가하고 가장 낮은 가중치로 나머지 4 바이트 만 유지할 수 있습니다.

관련 문제