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
1052 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!

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