▲GN⁺ 2024-05-06 | parent | ★ favorite | on: 자동화된 정수 해시 함수 탐색 기술(github.com/skeeto)Hacker News 의견 해당 개발자의 코드를 좋아하는 이유 JSON 라이브러리, 옵션 파싱 라이브러리, 분기 없는 UTF-8 디코더, lock-free 스택, trie 라이브러리 등이 마음에 듦 위의 라이브러리들이 모두 Unlicense로 공개된 점이 마음에 듦 MurmurHash 개발자의 코멘트 multiply-shift-xor 연산이 오랫동안 잘 버텨온 것이 흥미로움을 표현 자동 해시 함수 탐색에 대한 생각 공유 SMHasher3와 연동하여 출력을 자동으로 평가하는 것이 좋을 것 같음 속도를 위해 일부 테스트만 사용하고 빠르게 실패할 수 있음 64비트와 128비트 해시로 확장하는 것도 좋을 것 같음 (검색 공간이 더 크긴 함) Rain 라이브러리에서 64비트 소수의 곱셈에 대한 눈사태 효과를 측정하는 NodeJS 코드를 만듦 1brc 문제를 Go로 구현한 경험 공유 각 역을 충돌 없이 자체 버킷에 넣는 커스텀 완전 해시 함수를 찾으려 했으나, 프로그램 시작 전에 데이터에 맞춰 해시 함수를 커스터마이징할 수 없다는 규칙 때문에 포기함 무작위 상수를 확인하고 충돌하는 버킷 수와 충돌 수에 따라 지금까지 찾은 최상의 상수를 출력하는 테스트 도구를 만듦 약 40%의 채우기 비율로 단 2개의 충돌 값만 있는 1개의 버킷으로 줄일 수 있었음 다른 상수와 관계없이 이동할 위치 수에 대해 유사한 값이 최고 성능 상수에 포함되었다는 점이 흥미로웠음 이 코드가 멋진 이유와 사용 용도에 대한 설명 요청 정확히 무엇을 하는 코드인지, 최고의 해시 함수를 찾는 것인지, 그렇지 않다면 왜 매번 실행할 때마다 최고의 해시 함수가 바뀌는지에 대한 의문 제기 특정 범위 내의 정수 값에 대해 좋은 해시 함수를 발견하는 메커니즘에 대한 정보 요청 예를 들어 10,000에서 200,000 사이의 정수 값을 알고 있고, 이를 최적의 해시 버킷 수로 해싱하고 싶은 경우 가역 연산으로 제한하면 수학적으로 좋은 점이 있지만 많은 것들이 배제된다는 의견 입력 집합을 미리 알고 있는 완전 해싱에 대해 생각했음 일반적으로 상수 배열을 사용하지만, 입력이 이미 작은 정수인 경우 더 압축할 수 있는지 알고 싶었음 약 100개의 기본 연산 목록을 작성했지만 지루해져서 프로젝트를 진행하지 않았음 두 곱셈에 동일한 상수를 사용하면 코드 크기가 줄어들어 계산 속도가 약간 빨라질 수 있다는 의견 이 함수들이 암호화 연산에 적합하지 않다는 것을 인정하면서도, 측정된 "편향"이 암호 분석에 어떤 영향을 미치는지에 대한 질문 차분 암호에 익숙한 사람이 설명해줄 수 있는지 궁금해함 편향이 낮은 해시 함수가 더 적은 라운드 또는 계산으로 암호 분석을 무력화시킬 수 있는지 궁금해함 이 도구가 더 나은 암호학적 해시 함수를 찾는 데 도움이 될 것인지 궁금해함 비슷한 프로젝트 소개 속도는 느리지만(인터프리터 사용) 함수의 품질이 더 좋음 그러나 기존의 해시 함수보다 나은 것은 찾지 못했음
Hacker News 의견
multiply-shift-xor연산이 오랫동안 잘 버텨온 것이 흥미로움을 표현