나는 약 2 백만 개의 값 (각각 20 바이트)의 세트 (정적, 알려진 컴파일 시간)를 가지고 있습니다. 내가 필요한 것은 주어진 값이이 집합에 있는지 검사하는 빠른 O (1) 방법입니다. 비트 배열을 사용한 완벽한 해시 함수가 이상적이라고 생각되지만 간단한 방법으로는 만들 수 없습니다. gperf와 같은 유틸리티가 있지만 너무 복잡합니다. 또한, 제 경우에는 100 %에 가까운 부하율을 가질 필요가 없습니다. 심지어 10 % 정도면 충분하지만 충돌을 보장 할 수는 없습니다. 이 기능에 대한 또 다른 요구 사항은 GPU에서 실행되는 많은 조건이없는 단순성입니다. 이 케이스에 대해 조언을 해 주시겠습니까?OpenCL을위한 완벽한 해싱
1
A
답변
0
완벽한 해싱에 대한 자세한 정보를 읽은 후에는 구현하지 않기로 결정하고 대신 뻐꾸기 해시 테이블을 사용했습니다. 그것은 훨씬 더 간단하며 완벽한 해싱을 위해서는 테이블에 대한 액세스가 최대 2 회 (또는 다른 모든 값> 1, 가장 많이 사용되는 값은 2..5)가 필요합니다.
2
내 대답보기 here. 문제는 조금 다르지만 솔루션은 사용자의 요구에 맞게 조정될 수 있습니다. 원본은 100 %로드 요소를 사용하지만 쉽게 변경할 수 있습니다. 그것은 시작시에 배열을 내부적으로 섞어서 작동합니다 (컴파일 타임에 수행 할 수 있지만 생성 된 코드를 컴파일하는 것을 의미합니다).
WRT 해시 함수 : 20 바이트 개체의 내용에 대해 알지 못하는 경우 합리적인 해시 함수 (FNV, Jenkins 또는 광산)로 충분합니다.
관련 문제
- 1. 컴파일 타임 문자열 해싱
- 2. 해싱 유사성
- 3. 범위 해싱
- 4. 해싱, MurmurHash
- 5. 해싱 염분
- 6. 완벽한 사각형인가요?
- 7. 자바 스크립트 MD5 해싱 대 자바 애플릿 MD5 해싱?
- 8. 선형 해싱 구현
- 9. Java 해싱 암호
- 10. 확장 가능한 해싱
- 11. 해싱 및 기대
- 12. Java의 키 해싱
- 13. memcache와 일관된 해싱
- 14. 해싱 IP 주소 범위
- 15. 기본 해싱 개념
- 16. Z3 파이썬에서 해싱 표현
- 17. C++ Blowfish 해싱 구현
- 18. 해싱 알고리즘의 조합 구현
- 19. 세트의 증분 해싱
- 20. 해싱 및 액세스
- 21. 클라이언트 브라우저에서 암호 해싱
- 22. 파일 해시 및 해싱
- 23. 해싱 및 아파치에서 시로
- 24. 포인터 값 해싱
- 25. 해싱 사용자 암호
- 26. Spymemcached 해싱 알고리즘
- 27. 바이너리 해싱 -이게 뭐죠?
- 28. GA 내 해싱
- 29. C 문자열의 해싱 함수
- 30. 불변의 사전을 파이썬으로 해싱
N = 2 백만은 꽤 큽니다. 20 바이트의 내용에 대해 알지 못한다면 완벽한 해시 함수를 찾을 수 없습니다. 테이블이 정적 인 경우 시작 시간에 해시 테이블을 구성 할 수 있습니다. 여기서 다른 질문을 보여줍니다. (그것을 파헤쳐 야 할 필요가있다) – wildplasser
나는 컴파일 타임에 (거의 변함이 없다) 집합을 알고 있으며, 간단한 완벽한 해시 함수를 만드는 방법이 필요하다. – aplavin
왜 완벽해야합니까? 2M 값에 대해 완벽한 해시를 찾는 것이 불가능할 경우 어떻게해야할까요? – wildplasser