2016-05-09 24 views
0

列表不可排除。然而,我是implementing LSH,我是尋求一個散列函數,它將對應於k個桶中正整數([1.29000])的列表。列表的數量是D,其中D> k(我認爲)和D = 40.000,其中k還不知道(對建議開放)。如何散列列表?


實施例(d = 4,K = 2):

118 | 27 | 1002 | 225 
128 | 85 | 2000 | 8700 
512 | 88 | 2500 | 10000 
600 | 97 | 6500 | 24000 
800 | 99 | 7024 | 25874 

第一列應被給定爲輸入到散列函數,並返回一個桶的數量。


什麼讓我困惑的是,我們不尋求一個函數來散列中有很多,但一列,即正整數的列表。

有什麼想法嗎?

我使用如果該事項

+0

如何只將其轉換爲可哈希的類型,比如元組? (例如hash(tuple([1,2,3]))) – hunminpark

+0

@hunminpark你的意思是像print print(tuple([1,2,3,4,5]))''?這就是@lejlot建議的,但他刪除了他的答案.. – gsamaras

+0

只是爲了澄清,你的意思是你想要一個列表併產生一個桶索引,或者你想要一個長度列表'n'併產生'n'桶指數? – mobiusklein

回答

3

你可以只是轉換它在一個哈希的類型之前:

In [4]: hash(l) 
TypeError: unhashable type: 'list' 

hash(tuple(l)) % k # 29000 
Out[5]: 70846 
+0

有一個刪除的答案,它建議'tuple'而不是'str'。對此有何想法? – gsamaras

+1

是的,它更快!因爲沒有複製完成..... –