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
di mana:
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)
Dengan nilai ini, fungsi transformasi:
func transform(p uint64) uint64 { return p*m + s }
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))) }
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!