입력에서 고유 정수의 결정론적 생성
중복을 방지하는 결정론적 정수를 생성하기 위한 솔루션을 찾을 때 문제는 변환을 찾는 것과 관련됩니다. 입력 숫자를 주어진 범위 내의 개별 출력에 매핑하는 방법(예: int64.
답은 Affine 암호에서 파생된 모듈러 연산을 적용하는 데 있습니다.
f(P) = (mP + s) mod n
여기서:
적절한 m과 s를 선택하면 이 공식은 입력 숫자의 고유한 매핑을 보장합니다. 지정된 범위 내의 정수를 출력합니다. 예를 들어 int64의 경우:
m = 39293 (any non-even number) s = 75321908 (any random number below 2^64)
이러한 값을 사용하면 변환 함수:
func transform(p uint64) uint64 { return p*m + s }
는 다음 Go 놀이터에서 볼 수 있듯이 각 입력 정수가 고유한 출력 정수를 생성하도록 보장합니다. 예:
https://go.dev/play/p/EKB6SH3-SGu
음수의 경우 논리는 동일하게 유지됩니다. 고유한 매핑을 유지하기 위해 uint64와 int64 사이의 입력과 출력을 간단히 변환할 수 있습니다.
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
이 접근 방식을 사용하면 주어진 범위 내에서 가능한 모든 정수가 충돌 없이 결정론적으로 고유한 출력 정수에 매핑됩니다.
위 내용은 입력에서 고유한 정수를 결정적으로 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!