2012-07-06 2 views
3

정수의 튜플 (순서가 중요)을, 충돌의 가능성이 적은 정수로 해시 할 필요가 있습니다. 나는 정수로 문자열을 변환하고, ','로 연결하여 문자열 해시를 얻는 접근법을 사용하고 있지만 너무 느리다.정수의 튜플을 빠르게 해쉬하는 방법

정수의 튜플에서 고속 해시를 가져 오는 방법이 있습니까? 여기

+0

값의 범위는 무엇입니까? 얼마나 많은 가치가 있습니까? – wildplasser

답변

3

는 자바의 Arrays.hashCode(int[])가하는 일입니다 :

2938  public static int hashCode(int a[]) { 
2939   if (a == null) 
2940    return 0; 
2941 
2942   int result = 1; 
2943   for (int element : a) 
2944    result = 31 * result + element; 
2945 
2946   return result; 
2947  } 

이 계산은 List 인터페이스에 지정되어 있습니다. 나는 그것이 당신에게 충분한 충돌 방지인지는 모르겠지만 시작하기에 좋은 장소 인 것 같습니다. 순서를 고려합니다 (즉, 같은 숫자의 순서가 다를 경우 다른 해시 값이 산출됩니다).