> 백엔드 개발 > Golang > 1:1 매핑으로 고유하고 결정적인 숫자를 생성하는 방법은 무엇입니까?

1:1 매핑으로 고유하고 결정적인 숫자를 생성하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-17 18:30:03
원래의
1045명이 탐색했습니다.

How to Generate Unique, Deterministic Numbers with a 1:1 Mapping?

1:1 매핑을 통한 일정한 결정적 숫자 생성

목적

입력 숫자를 고유한 숫자로 매핑하는 결정적 함수 생성 없이 지정된 범위 내의 숫자를 출력합니다. 중복.

방법

아핀 암호 기반 모듈러 연산 활용:

  1. 변환 공식: f( P) = (mP·s) 모드 n
  2. 매개변수:

    • m: n과 서로소여야 합니다(n과 같은 숫자로 나누어지지 않음).
    • s: n보다 작은 난수.
    • n: 원하는 범위 출력.

uint64의 예

  • n = 2^64(uint64 범위)
  • m = 39293(홀수 숫자)
  • s = 75321908(난수 < 2^64)

변환 함수:

func transform(p uint64) uint64 {
    return m * p + s  // implicitly mod'd 2^64 by the type's size
}
로그인 후 복사

예 int64

부호 있는 숫자의 경우 uint64와 int64 사이에서 입력과 출력을 변환하여 고유한 매핑을 유지합니다.

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}
로그인 후 복사

보장

  • 이 기능은 모든 입력에 대해 1:1 매핑을 보장합니다. 숫자.
  • 두 개의 입력 숫자는 동일한 출력 숫자를 생성하지 않습니다.
  • 출력 숫자는 지정된 범위 내에서 균일하게 분포됩니다.
  • 함수는 결정적이며 항상 생성됩니다. 주어진 입력에 대해 동일한 출력이 발생합니다.

위 내용은 1:1 매핑으로 고유하고 결정적인 숫자를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿