Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menjana Integer Deterministik dan Unik daripada Nombor Input?

Bagaimana untuk Menjana Integer Deterministik dan Unik daripada Nombor Input?

Barbara Streisand
Barbara Streisandasal
2024-11-23 08:38:50923semak imbas

How to Generate Deterministic and Unique Integers from Input Numbers?

Penjanaan Nombor Deterministik dan Unik

Memandangkan keperluan untuk menjana integer deterministik yang memetakan secara unik kepada setiap nombor input, ia mungkin kelihatan seperti mustahilЗадача . Walau bagaimanapun, terdapat formula matematik yang boleh memenuhi keperluan ini.

Formula Transformasi

Formula transformasi berasal daripada aritmetik modular:

f(P) = (mP + s) mod n

di mana:

  • P ialah input nombor
  • m ialah coprime nombor bukan genap dengan n
  • s ialah nombor rawak kurang daripada n
  • n ialah julat nilai yang akan dijana (mis., 2 ^64 untuk uint64)

Formula ini memastikan setiap input P memetakan kepada output unik dalam julat 0 kepada n-1. Keadaan koprimaliti untuk m menghalang faktor sepunya antara m dan n, menghapuskan corak berkala dan perlanggaran.

Contoh Pelaksanaan untuk uint64

Untuk julat uint64, nilai parameter berikut boleh digunakan:

var (
    m = uint64(39293)
    s = uint64(75321908)
)

func transform(p uint64) uint64 {
    return p*m + s
}

Sambungan kepada int64

Untuk nombor yang ditandatangani (int64), pendekatan yang serupa boleh digunakan. Transformasi asal untuk uint64 digunakan selepas menukar input dan output kepada dan dari uint64:

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}

Dengan menggunakan skema penjanaan nombor yang deterministik dan unik ini, ia menjadi mungkin untuk memetakan nombor input kepada output unik tanpa memerlukan tatasusunan atau pengisihan intensif memori.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Integer Deterministik dan Unik daripada Nombor Input?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn