안녕하세요. 자바에서 계산 블룸 필터를 개발하고 있습니다. 나는 블룸 필터에 관한 대부분의 소스를 실제로 검색했습니다. 이해할 수있는 것은 특정 문자열이나 단어를 해시 할 때 해싱 결과가 결과 값에 내용을 저장할 수 있도록 한 값을 반환한다는 것입니다. 장소. 하지만 내 큰 질문은 해싱 (알고리즘)을 수행하는 방법입니다. 특정 문자열이나 단어를 해시 할 때 실제로 일어나는 일. 특정 문자열이나 단어를 해시 할 때 실제로 일어나는 일을 설명해주십시오 (특정 문자열이나 단어를 해싱 할 때 특정 최종 값이 도착하는 방식과 동일). 나는 또한 충돌 가능성도 있다고 읽었다. 또한 결과 해시 값이 고유하지 않은 이유 (왜 다른 입력에 대해 동일한 해시 값을 반환하는지)를 해결할 수 있습니까? 그리고 난 정말 해시를 할 코드를 작성해야합니까 또는 Java에서 해시 할 모든 inbuilt 함수가 있습니다.특정 문자열이나 단어를 해시하는 경우 실제로 발생하는 프로세스 (실제 프로세스)
답변
임의의 개체에서 hashCode()
을 호출하면 해시 코드를 간단히 가져올 수 있습니다. javadoc에서 클래스 String
에 특히 :
공공 INT의 해시 코드()
이 문자열의 해시 코드를 돌려줍니다. 문자열 객체의 해시 코드 은
[0] * 31^(1) * 31^(n-2) + ... + s [n-1 ]
int 산술을 사용합니다. 여기서 s [i]는 문자열의 i 번째 문자이고 n 은 문자열의 길이이며 ^는 지수입니다. (빈 문자열의 해시 값은 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;
}
해시 함수 (하지 전단 사 함수)이고, 다른 입력 수 동일한 결과를 산출합니다. 이 해시 함수
의 기본이다 "해싱"설정 I
이 훨씬 더 큰 또는 O
보다 더 복잡 일반적으로 함수
H: I -> O
입니다. 해시 테이블 I
은 요소의 클래스이며, O
은 양의 정수입니다. 특히 블룸 필터에는 n
다른 기능이 있습니다. 해시 함수를 개발하려면 유사한 오브젝트의 다른 특성을 추출해야합니다. 예를 들어, 문자열에 대한 당신은 할 수 있습니다 :
- 길이를
- 첫 번째 문자
- 다항식
h(S) = sum (s(i)*31^i) mod d
여러 개의 해시 충돌 특성을 사용하는 경우 피해야합니다. 예를 들어 number of voyels
및 number of non-voyels
을 사용하는 것은 실제로 도움이되지 않습니다.이 있어야합니다 해시 함수 몇 가지 특성이 wikipedia entry
자바보고있다 당신의 클래스는 해시 알고리즘
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를 사용하는 것입니다.
희망이 도움이됩니다. 이 기사와 관련된 스택 오버플로를 자세히 검색하면 더 자세한 설명을 얻을 수 있습니다.
- 1. 특정 주소에 쓰는 경우 프로세스 일시 중지
- 2. 프로세스 당 실제 메모리 제한
- 3. 특정 사용자의 프로세스 나열
- 4. 동시 트랜잭션이 발생하는 동안 배치 프로세스
- 5. 프로세스 목록에서 프로세스 숨기기
- 6. 프로세스. 프로세스 죽이지 않음
- 7. OutOfMemoryError의 경우 Java 프로세스 동작
- 8. 경우 대리 프로세스 또는 COM +
- 9. 프로세스
- 10. 프로세스 제어 블록 대 프로세스 설명자
- 11. 프로세스 포크, 자식 프로세스 등 [Java]
- 12. 특정 프로세스 메모리 스캐닝/모니터링
- 13. Python : 특정 화면에서 프로세스 열기
- 14. 특정 파일을 열었던 프로세스 추적
- 15. 프로세스 간 실제 메모리 페이지가 읽습니까?
- 16. Visual Studio - "특정 프로세스 인스턴스에 연결"매크로
- 17. 프로세스 모니터링
- 18. 부모 프로세스 및 자식 프로세스
- 19. 프로세스 목록의 관련 프로세스 피하기
- 20. 백그라운드 프로세스 대 Foreground 프로세스
- 21. Google의 V8 엔진은 실제로 프로세스 당 1 개의 VM으로 제한됩니까?
- 22. 아무도 실제로 PSP (개인 소프트웨어 프로세스)를 사용합니까?
- 23. 파이썬 하위 프로세스 check_output이 훨씬 느린 경우
- 24. JMX - 프로세스 프로세스 존재 여부 확인
- 25. XML 프로세스 정의에서 Activiti 프로세스 변수 초기화
- 26. PowerShell의 실행 파일 목록에서 프로세스 살생 프로세스
- 27. 프로세스 메모리 제한 64 비트 프로세스
- 28. vb.net/pinvoke : 특정 프로세스 창을 열거하십시오.
- 29. Windows에서 프로세스 특정 권한을 부여하는 방법
- 30. 프로세스 WaitForExit()
질문을하기 전에 주제를 조금 공부하십시오. http://en.wikipedia.org/wiki/Hash_function –
블룸 파일러에는 두 개 이상의 해시가 필요합니다. – UmNyobe