2011-09-07 4 views
0

필자는 엔드 포인트에 여러 개의 선분이 있습니다. 적절한 데이터 구조 T에 라인 세그먼트를 하나씩 저장하기 위해 해시를 사용해야합니다. 생성하는 동안 각 세그먼트의 두 끝점을 무작위로 선택하고 새로 생성 된 세그먼트를 T에 삽입해야합니다. in T.해시 라인 세그먼트

사람이 선분의 끝점을 고유하게 저장할 수있는 적절한 해싱 함수를 제안 할 수 있습니까?

+0

와 비슷한 말 해싱하기 전에. 그렇지 않으면 X, Y가 Y, X와 같은 값으로 해시되지 않을 수도 있습니다. 또는 순서 독립적 인 함수를 사용할 수도 있습니다 (예 : (x1 + y1) * A + (x2 + y2) * B) – Slartibartfast

답변

0

간단한 접근법은 곱셈기와 덧셈을 사용하는 것입니다.

hash = 2011 * x + y; 

이점은 계산하는 것이 매우 빠릅니다. 다른 솔루션이 자리를 통해 더 복잡한 반복을 사용할 수, 엔드 포인트의 순서가 중요하지 않는 한, 당신의 해시 함수는 일치에 포인트를 주문해야합니다 (결정) 할 자바 문자열 해싱 알고리즘

for(int i = 0; i < n_digits; i++){ 
    hash = hash * 31 + x_y_digit[i]; 
}