2017-05-02 104 views
2

我有一組特定的整數,它們是:2,10,13,15,23,34,43,58,100,123,199,200和348.任務是創建一個1線散列函數可能至少在地圖索引9個值0至12。特定整數集的散列函數

到目前爲止我所作的散列函數是:

  1. hash = value%13
  2. hash = (value+array[indexOfValue])%13
  3. hash = array[indexOfValue]

數字3是可能讓我罵,但它似乎是可以接受的,所以我不妨給它一個答案。哦,我不應該使用任何衝突解決方法。

編輯:所以我應該做什麼散列函數的任何建議?

編輯:我發現將映射從0到12的所有值的函數,它是:((((x*7)+x)%7)+x)%13

+2

你的問題是什麼? –

+0

@m_callens抱歉,我現在編輯它。 – Helquin

+0

由於要求自負的回答而投票結束。 –

回答

3

我的(學歷)的猜測是,XOR將是這裏的哈希函數的良好基礎。例如:

(value^c) % 13 

通過嘗試在C的所有的值(蠻力)[1,200]在上述式和計數多少不同的散列碼在您的集合中的值,則數72產生出現了。例如。

int[] values = new int[]{2, 10, 13, 15, 23, 34, 43, 58, 100, 123, 199, 200, 348}; 
for (int value : values) { 
    System.out.print((value^72) % 13); 
} 

將打印出:

9 1 4 6 4 2 8 10 5 12 0 11 3 

,其包括在所述範圍內的所有數值[0,12],除了7,並用4出現兩次。

+0

13個可能的值有13個元素,所以重複不是不可避免的。 – biziclop

+0

@biziclop你當然是正確的 –

+0

如果你仍然對映射所有值的函數感到好奇,我發現一個:hash =((((x * 7)+ x)%7)+ x)%13 – Helquin