0

Списки не хешируются. Тем не менее, я implementing LSH, и я ищет хеш-функцию, которая будет соответствовать списку положительных целых чисел (в [1, 29.000]) до k ковшей. Число списков - D, где D> k (я думаю) и D = 40.000, где k еще не известно (открыто для предложений).Как хэш-списки?


Пример (D = 4, к = 2):

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

В первом столбце должны быть приведены в качестве входных данных для хэш-функции и возвращает количество ведро.


Что меня смущает то, что мы не ищем для функции хэширования номер, но в столбце, то есть список положительных целых чисел.

Любые идеи, пожалуйста?

Я использую если это имеет значение

+0

Как насчет превращения его в hashable типов, такие как кортеж? (например, hash (кортеж ([1, 2, 3]))) – hunminpark

+0

@hunminpark вы имеете в виду что-то вроде 'print hash (tuple ([1,2,3,4,5]))'? Это то, что предложил @lejlot, но он удалил свой ответ. – gsamaras

+0

Чтобы уточнить, вы хотите, чтобы вы взяли список и создали единый индекс ведра, или хотите взять список длины 'n' и произвести индексы 'n' bucket? – mobiusklein

ответ

3

Вы можете просто преобразовать его в hashable типа перед:

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

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

Существует удаленный ответ, в котором предлагается 'tuple' вместо' str'. Любые мысли по этому поводу? – gsamaras

+1

да, это быстрее! поскольку копия не производится ..... –

 Смежные вопросы

  • Нет связанных вопросов^_^