假設散列整數永遠不會溢出,以下生成的散列對於不同的鍵是否總會不同? 該鍵應該包含ascii編碼的字符。這個散列函數是唯一的嗎?
我認爲是這樣,因爲我想不出一個例外情況。
char[] arr = "abcd"
int hash = 0
for (int i=0; i<arr.size; i++) {
hash += (i+1) * arr[i]
}
EDIT1:雖然下面是技術上是正確的答案,我原來的問題,我應該提到的是,按鍵的域是有效的電子郵件id的。所以,一些ascii字符不包括在內。不過,我會進行一些測試並報告。列舉所有燙髮的唯一問題是可能的,只有很短的一段時間。
無論如何,我的要求是根據email-id製作唯一的ID,並將它們用作數據庫中的主鍵。只是不想使用郵件ID本身。
編輯2:好的,顯然,有大量的碰撞。例如,散列[email protected] ==散列[email protected]
...
040 == 012
041 == 013
042 == 014
043 == 015
044 == 016
045 == 017
046 == 018
047 == 019
048 == 01:
...
我需要不同的哈希算法。你能建議嗎?例如:
「以下生成的散列對於不同的密鑰總是不同的?」根據「散列函數」的定義,答案是「否」。如果答案是「是」 - 不要稱之爲散列函數。 –
您正在佔用一個大的空間並將其「壓縮」到一個較小的空間。根據定義,至少會有2個映射到相同輸出的輸入值。 –
應該至少有一次碰撞 – xdevs23