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

Bagaimana untuk Menjana Integer Unik Secara Deterministik daripada Input?

Mary-Kate Olsen
Lepaskan: 2024-12-02 12:41:17
asal
932 orang telah melayarinya

How to Deterministically Generate Unique Integers from Inputs?

Penjanaan Integer Unik Deterministik daripada Input

Dalam mencari penyelesaian untuk menjana integer deterministik yang mengelakkan pendua, persoalannya berkisar tentang mencari transformasi kaedah yang memetakan nombor input kepada output yang berbeza dalam julat tertentu, seperti a int64.

Jawapannya terletak pada penggunaan aritmetik modular yang diperoleh daripada sifir Affine:

f(P) = (mP + s) mod n
Salin selepas log masuk

di mana:

  • n = julat integer yang mungkin (cth., 2^64 untuk int64)
  • s < n
  • m adalah bersamaan dengan n (bermaksud mereka tidak berkongsi faktor sepunya selain 1)

Dengan memilih m dan s yang sesuai, formula ini menjamin pemetaan unik nombor input kepada integer keluaran dalam julat yang ditentukan. Sebagai contoh, untuk int64:

m = 39293 (any non-even number)
s = 75321908 (any random number below 2^64)
Salin selepas log masuk

Dengan nilai ini, fungsi transformasi:

func transform(p uint64) uint64 {
    return p*m + s
}
Salin selepas log masuk

memastikan setiap integer input menghasilkan integer output yang unik, seperti yang ditunjukkan dalam taman permainan Go berikut contoh:

https://go.dev/play/p/EKB6SH3-SGu

Untuk nombor negatif, logiknya tetap sama. Kami hanya boleh menukar input dan output antara uint64 dan int64 untuk mengekalkan pemetaan unik:

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}
Salin selepas log masuk

Pendekatan ini memastikan semua integer yang mungkin dalam julat tertentu dipetakan kepada integer keluaran yang berbeza secara deterministik dan tanpa sebarang perlanggaran.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Integer Unik Secara Deterministik daripada 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