Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menjana Nombor Unik, Deterministik dengan Pemetaan 1:1?

Bagaimana untuk Menjana Nombor Unik, Deterministik dengan Pemetaan 1:1?

Barbara Streisand
Lepaskan: 2024-11-17 18:30:03
asal
1101 orang telah melayarinya

How to Generate Unique, Deterministic Numbers with a 1:1 Mapping?

Penjanaan Nombor Deterministik Malar dengan Pemetaan 1:1

Objektif

Janakan fungsi deterministik yang memetakan nombor input kepada unik nombor keluaran dalam julat tertentu, tanpa penduaan.

Kaedah

Gunakan aritmetik modular berdasarkan sifir Affine:

  1. Formula Transformasi: f( P) = (mP s) mod n
  2. Parameter:

    • m: Mestilah koprima dengan n (tidak boleh dibahagikan dengan nombor yang sama seperti n).
    • s: Nombor rawak kurang daripada n.
    • n: Julat yang dikehendaki bagi output.

Contoh untuk uint64

  • n = 2^64 (julat uint64)
  • m = 39293 (nombor ganjil)
  • s = 75321908 (nombor rawak < 2^64)

Fungsi Transformasi:

func transform(p uint64) uint64 {
    return m * p + s  // implicitly mod'd 2^64 by the type's size
}
Salin selepas log masuk

Contoh dengan int64

Untuk nombor yang ditandatangani, tukar 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

Jaminan

  • Fungsi ini memastikan pemetaan 1:1 untuk semua nombor input.
  • Tiada dua nombor input akan menghasilkan nombor output yang sama.
  • Nombor output akan diedarkan secara seragam dalam julat yang ditentukan.
  • Fungsi ini bersifat deterministik, sentiasa menjana output yang sama untuk input yang diberikan.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Nombor Unik, Deterministik dengan Pemetaan 1:1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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