Dalam usaha untuk mencipta fungsi penjanaan nombor adeterministik, matlamat kami adalah untuk membina fungsi di mana setiap nombor input menjana sepadan unik nombor tanpa sebarang pendua.
Penyelesaian Aritmetik Modular:
Penyelesaian yang bijak terletak pada aritmetik modular, terutamanya sifir Affine. Ia menggunakan formula transformasi:
f(P) = (mP + s) mod n
di mana:
Untuk julat uint64, nilai bukan genap untuk m dicadangkan untuk mengelakkan pembahagian sebanyak 2.
Contoh Pelaksanaan:
import ( "fmt" ) func main() { m := uint64(39293) s := uint64(75321908) transform := func(p uint64) uint64 { return p * m + s } testValues := []uint64{1, 2, 3, 4, 5} for _, v := range testValues { fmt.Printf("%v -> %v\n", v, transform(v)) } }
Fungsi ini memastikan bahawa untuk semua nilai input uint64 yang mungkin, nilai yang ditransformasikan adalah unik.
Menyesuaikan untuk Integer Bertandatangan:
Untuk integer yang ditandatangani (int64), pendekatannya kekal serupa. Kami menukar input dan output antara uint64 dan int64 untuk mengekalkan pemetaan unik:
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
Dengan menggunakan fungsi penentu ini, pembangun boleh menjana nombor unik dan boleh dihasilkan semula daripada sebarang integer input yang diberikan, menjadikannya alat yang tidak ternilai untuk pelbagai aplikasi .
Atas ialah kandungan terperinci Bagaimana untuk Menjana Integer Deterministik Unik daripada Integer Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!