Поиск хеш-функции с определенными свойствами

Мой вопрос во многом относится к этой теме:

Хеш-функция в списке, не зависящая от порядка элементов в это

По сути, у меня есть набор из N чисел. N является фиксированным и обычно довольно большим, например. 1000 например. Эти числа могут быть целыми числами или числами с плавающей запятой. Они могут быть равны, некоторые или все из них. Никакое число не может быть нулем.

Каждая комбинация K чисел, где K находится в диапазоне от 1 до N, приводит к вычислению хэша.

Возьмем пример с 3 номерами, которые я буду называть A, B и C. Мне нужно вычислить хэш для следующих комбинаций:

A
B
C
A+B
B+C
A+B+C
A+C

Вещи не зависят от порядка, C + A просто равно A + C. «+» может быть реальным дополнением или чем-то другим, например XOR, но это фиксировано. Точно так же каждое значение может сначала пройти через функцию, например.

f(A)
f(B)
f(A)+f(B)+f(C)
...

Теперь мне нужно избегать столкновений, но только определенным образом. Каждая комбинация помечается числом, либо 0, либо 1. Могут возникать коллизии, так что, если возможно, могут столкнуться только те, которые помечены одним и тем же номером (0 или 1). В этом случае многие коллизии даже приветствуются, особенно если это делает хеш-значение компактным. Я имею в виду, что в идеале лучший хэш имеет длину всего 1 бит! (0 или 1). Столкновения между комбинациями, помеченными разными номерами (0 и 1), по возможности должны происходить редко - в этом весь смысл.

Возьмем пример. Комбинация -> тег -> рассчитанное значение хеш-функции:

Combination  Tag  Hash
A          -> 0 -> 0
B          -> 1 -> 1
C          -> 0 -> 2
A+B        -> 0 -> 0
B+C        -> 1 -> 1
A+B+C      -> 1 -> 3
A+C        -> 0 -> 2

Здесь хеш-значения действительны, потому что между комбинациями разных тегов нет коллизии. Например, A сталкивается с A + B, но они оба помечены «0».

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

Как найти хорошую (достаточно хорошую) хэш-функцию для этой цели?

Спасибо за ваше понимание.


person Martin Frank    schedule 04.02.2015    source источник
comment
Как насчет того, чтобы иметь отдельные хеш-таблицы для каждого значения тега?   -  person 500 - Internal Server Error    schedule 04.02.2015
comment
1. Почему ваша таблица валидна, а A+C и C имеют одинаковый тег и хэш, но сами по себе разные? Я вижу это как столкновение. 2. Разрешены ли коллизии? Что значит: должно происходить редко? Неопределенный вопрос должен быть закрыт! 3. Можно ли совмещать числа с функциями? Какие функции, сколько их? ... Вы должны сильно отредактировать свой вопрос!   -  person Gangnus    schedule 04.02.2015
comment
Отдельная хеш-таблица для каждого значения тега действительно может иметь большой смысл. Я думал об этом в течение некоторого времени, но это не упрощает мою проблему. Имеет ли это? Что у тебя на уме?   -  person Martin Frank    schedule 04.02.2015
comment
Функции должны быть найдены (или должны быть сделаны обоснованные предположения), так же как и отдельные числа. Это в основном вопрос. Я использовал общий решатель для чисел, но на поиск решения уйдут годы. Пожалуйста, обратитесь к ссылке, которую я дал для более подробной информации, в частности, к первому ответу от «Per».   -  person Martin Frank    schedule 04.02.2015
comment
Если комбинация и ограниченный тег не коррелируют (тег нельзя предсказать по структуре комбинации), то я сомневаюсь, что вы можете получить какую-либо прибыль от эксплуатации тега.   -  person Alexey Birukov    schedule 04.02.2015
comment
Спасибо за Ваш ответ. Теги являются частью ввода. Ясно, что нет никакой известной корреляции между набором чисел и тегом. Но существование тега приводит к желанию найти хеш-функцию (и значения для A, B... и т. д.), где коллизии предпочтительно происходят там, где теги одинаковы.   -  person Martin Frank    schedule 04.02.2015
comment
Я имею в виду эту модель: у вас есть положительные слова, такие как хороший, теплый, справедливый и отрицательные, такие как бедный, грустный, плохой и т. д. Моя точка зрения заключается в том, что в строках нет хэш-функций, чтобы различать их без использования словаря.   -  person Alexey Birukov    schedule 05.02.2015