Bagaimana Menjana Integer Deterministik Unik Tanpa Pendua?

Patricia Arquette
Lepaskan: 2024-11-22 06:32:11
asal
290 orang telah melayarinya

How to Generate Unique Deterministic Integers Without Duplicates?

Penjanaan Integer Deterministik Tanpa Pendua

Dalam bidang pembangunan perisian, menjana nombor unik dan boleh diramal boleh menjadi tugas yang membingungkan. Mari kita selami fungsi penjanaan nombor deterministik yang memastikan tiada dua input menghasilkan output yang sama, membolehkan pengiraan yang cekap dan boleh dihasilkan semula.

Formula yang mencapai kejayaan ini ialah aritmetik modular, yang biasa digunakan dalam kriptografi dan penjanaan nombor rawak:

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

di mana:

  • P ialah input integer
  • m ialah pemalar coprime kepada julat yang dikehendaki (n)
  • s memastikan output berada dalam julat yang dikehendaki (n)

Menggunakan formula ini, kita boleh menjana nombor deterministik tanpa memerlukan tatasusunan atau kekangan memori yang lengkap. Contohnya, menggunakan uint64 sebagai jenis data (mewakili integer tidak bertanda 64-bit):

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}
Salin selepas log masuk

Kod ini menunjukkan penjanaan nombor unik yang menentukan untuk input yang diberikan. Dengan memasukkan nilai yang berbeza untuk m dan s, anda boleh menyesuaikan output mengikut keperluan khusus anda.

Untuk integer yang ditandatangani, seperti int64, formula yang sama boleh digunakan, tetapi disyorkan untuk menukar input dan output antara uint64 dan int64 untuk prestasi optimum.

Atas ialah kandungan terperinci Bagaimana Menjana Integer Deterministik Unik Tanpa Pendua?. 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