> 백엔드 개발 > Golang > 중복 없이 고유한 결정적 정수를 생성하는 방법은 무엇입니까?

중복 없이 고유한 결정적 정수를 생성하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-22 06:32:11
원래의
349명이 탐색했습니다.

How to Generate Unique Deterministic Integers Without Duplicates?

중복이 없는 결정적 정수 생성

소프트웨어 개발 영역에서 고유하고 예측 가능한 숫자를 생성하는 것은 어려운 작업일 수 있습니다. 두 입력이 동일한 출력을 생성하지 않도록 보장하여 효율적이고 재현 가능한 계산을 가능하게 하는 결정론적 숫자 생성 기능에 대해 살펴보겠습니다.

이 기능을 달성하는 공식은 암호화 및 난수 생성에 일반적으로 사용되는 모듈식 산술입니다.

f(P) = (mP + s) mod n
로그인 후 복사

여기서:

  • P는 입력입니다. 정수
  • m은 원하는 범위(n)에 대한 서로소 상수입니다
  • s는 출력이 원하는 범위(n)

내에 있음을 보장합니다. 이 공식을 적용하면, 철저한 배열이나 메모리 제약 없이 결정론적 숫자를 생성할 수 있습니다. 예를 들어 데이터 유형으로 uint64를 사용하는 경우(64비트 부호 없는 정수를 나타냄):

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}
로그인 후 복사

이 코드는 주어진 입력에 대한 고유 숫자의 결정론적 생성을 보여줍니다. m과 s에 서로 다른 값을 연결하면 특정 요구 사항에 맞게 출력을 조정할 수 있습니다.

int64와 같은 부호 있는 정수의 경우 동일한 수식을 적용할 수 있지만 입력과 출력을 변환하는 것이 좋습니다. 최적의 성능을 위해서는 uint64와 int64 사이입니다.

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

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