2012-02-14 2 views
0

안녕하세요. 자바에서 계산 블룸 필터를 개발하고 있습니다. 나는 블룸 필터에 관한 대부분의 소스를 실제로 검색했습니다. 이해할 수있는 것은 특정 문자열이나 단어를 해시 할 때 해싱 결과가 결과 값에 내용을 저장할 수 있도록 한 값을 반환한다는 것입니다. 장소. 하지만 내 큰 질문은 해싱 (알고리즘)을 수행하는 방법입니다. 특정 문자열이나 단어를 해시 할 때 실제로 일어나는 일. 특정 문자열이나 단어를 해시 할 때 실제로 일어나는 일을 설명해주십시오 (특정 문자열이나 단어를 해싱 할 때 특정 최종 값이 도착하는 방식과 동일). 나는 또한 충돌 가능성도 있다고 읽었다. 또한 결과 해시 값이 고유하지 않은 이유 (왜 다른 입력에 대해 동일한 해시 값을 반환하는지)를 해결할 수 있습니까? 그리고 난 정말 해시를 할 코드를 작성해야합니까 또는 Java에서 해시 할 모든 inbuilt 함수가 있습니다.특정 문자열이나 단어를 해시하는 경우 실제로 발생하는 프로세스 (실제 프로세스)

+0

질문을하기 전에 주제를 조금 공부하십시오. http://en.wikipedia.org/wiki/Hash_function –

+1

블룸 파일러에는 두 개 이상의 해시가 필요합니다. – UmNyobe

답변

1

임의의 개체에서 hashCode()을 호출하면 해시 코드를 간단히 가져올 수 있습니다. javadoc에서 클래스 String에 특히 :

공공 INT의 해시 코드()

이 문자열의 해시 코드를 돌려줍니다. 문자열 객체의 해시 코드 은

[0] * 31^(1) * 31^(n-2) + ... + s [n-1 ]

int 산술을 사용합니다. 여기서 s [i]는 문자열의 i 번째 문자이고 n 은 문자열의 길이이며 ^는 지수입니다. (빈 문자열의 해시 값은 0이다.)

0

String 위해 실행되는 코드를이 하나 그러므로

public int hashCode() { 
int h = hash; 
    int len = count; 
if (h == 0 && len > 0) { 
    int off = offset; 
    char val[] = value; 

     for (int i = 0; i < len; i++) { 
      h = 31*h + val[off++]; 
     } 
     hash = h; 
    } 
    return h; 
} 

해시 함수 (하지 전단 사 함수)이고, 다른 입력 수 동일한 결과를 산출합니다. 이 해시 함수

1

의 기본이다 "해싱"설정 I이 훨씬 더 큰 또는 O보다 더 복잡 일반적으로 함수

H: I -> O

입니다. 해시 테이블 I은 요소의 클래스이며, O은 양의 정수입니다. 특히 블룸 필터에는 n 다른 기능이 있습니다. 해시 함수를 개발하려면 유사한 오브젝트의 다른 특성을 추출해야합니다. 예를 들어, 문자열에 대한 당신은 할 수 있습니다 :

  • 길이를
  • 첫 번째 문자
  • 다항식 h(S) = sum (s(i)*31^i) mod d
으로 평가 특정 문자
  • 문자열의 발생 횟수

    여러 개의 해시 충돌 특성을 사용하는 경우 피해야합니다. 예를 들어 number of voyelsnumber of non-voyels을 사용하는 것은 실제로 도움이되지 않습니다.이 있어야합니다 해시 함수 몇 가지 특성이 wikipedia entry

  • 0

    자바보고있다 당신의 클래스는 해시 알고리즘

    public class Employee { 
    
    
        // Default implementation might want to use "name" for as part of hashCode 
        private String name; 
    
        @Override 
        public int hashCode() { 
        // We know that ID is always unique, so don't use name in calculating 
        // the hash code. & hashCode() is an int 
        return id; 
        } 
    } 
    
    를 사용하는 당신이 해시 코드() 메소드를 오버라이드 (override) 할 수 있습니다

    * (당신이려고하는 경우 hashCode를 오버라이드 (override)하려면 equals를 오버라이드 (override) 할 필요가 있습니다.)

    해시 코드는 컬렉션에 포함 된 오브젝트마다 계산됩니다. 표준 알고리즘을 사용하여 계산됩니다. 실제로 개체별로 해시 코드 메서드를 재정의 할 수 있습니다. 해시 코드 메소드를 구현하는 한 가지 방법은 HashcodeBuilder를 사용하는 것입니다.

    희망이 도움이됩니다. 이 기사와 관련된 스택 오버플로를 자세히 검색하면 더 자세한 설명을 얻을 수 있습니다.

    관련 문제