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
Lepaskan: 2024-11-23 08:38:50
asal
890 orang telah melayarinya

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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)))
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan