的基本形式是這樣的:我想用下面的簽名功能:如何將所有的64位整數到不同的64位整數MAP,在1對1的方式
unsigned long long getID(unsigned long long index) {
unsigned long long id;
/*code involving use of index*/
return id;
}
的ID返回需要遵循以下限制:
- 不能有(任何
x
和y
getID(x) != getID(y)
其中y != x
)任何衝突 - 應該不會出現任何顯然本爲了將生成的數字(也沒關係,如果有一些順序,但一般,
getID(x) + 5 != getId(x+5)
任何x
) - 每一個64位數字必須由函數表示。換句話說,不可能存在
id
,其中不存在x
,其中getID(x) == id
。
什麼是開始確定這個最好的地方,並且是那裏,可以擴展到128位(或減少到32位)的數字,但無代碼的結構顯著變化的一般的解決方案?
'return id == 0? ULLONG_MAX/2 + 1:(id == ULLONG_MAX/2 + 1?0:-id);' –
你看過任何簡單的PRNG實現嗎?給定一個種子(索引),他們以確定性的方式輸出另一個數字(id)。 – twsaef
這是爲了安全嗎? – immibis