2017-05-20 14 views
0

我想到了一個很好的散列函數,可以自動排序一堆單詞。是否有可能使一個字典排序的散列函數

也許它可以通過每個字母的所有ASCII值的總和來完成。

int hash(char *str){ 

    int i,value=0; 

    for (i=0;i<strlen(str);i++) 
    value=value+(str[i]%97); 

    return value; 
} 

但是那麼這將導致大量的碰撞,因爲,例如:3 + 5 = 8 + 0 = 7 + 1 = 6 + 2 ...等

它甚至有可能哈希函數來做到這一點?如果是這樣,那怎麼可能?

+0

不幸的是,這樣「bz」會出現在「za」之後.. – user1620443

+0

這是一個壞主意,因爲有序值空間與哈希的目的相矛盾。分別做兩件事... –

+3

好吧,考慮一下。爲了這個工作,你的散列函數必須爲任何兩個不同的字符串產生不同的值。如果一個字符串由8位字符組成,那麼有多少個不同的4個字符串? 8點怎麼樣?你在這裏看到這個問題嗎? – Cubic

回答

1

基本答案是否定的。 您的哈希可能會採取前四個字符,並將它們解釋爲一個整數。這將是一種具有種類的功能,但是是一種退化的情況。

哈希的基本思想是從數據中得到看起來像一個隨機值的東西,只改變一個數據位就可以完全改變哈希值(因此數據的每一位都會影響哈希的每一位) 。

有許多散列函數可用。

相關問題