Я ищу простую инкрементную хеш-функцию (C++), чтобы ее можно было обновить, используя:
hash = hash_function(hash, update_value)
Например, update_value может быть одним битом.
например, чтобы вычислить хэш массива, я бы сделал:
hash = 0
foreach element a in array { hash = hash_function(hash, a) }
(желательно то, что не приводит к слишком большому количеству столкновений, но относительно быстро).
Если вы хэшируете массив бит:
Вы можете выполнить проверку циклического избыточности. Многочлен CRC определял бы длину хеша и будет (грубо) контролировать вероятность столкновения. Многие примеры программных алгоритмов CRC оптимизированы для работы на вещах, более широких, чем биты, но основной, не оптимизированный алгоритм работает немного за раз. Алгоритм примерно:
Ваш предложенный метод примет текущее значение аккумулятора как 1-й аргумент и вернет следующее значение аккумулятора.
Важен полиномиальный отбор. Существуют некоторые многочлены, которые не считаются хорошими для хеширования.
Если массив содержит что-то немного шире (например, ints или objects):
Вы можете просто хэш каждого элемента и объединить хэш каждого элемента вместе с чем-то вроде XOR. Если хэш-алгоритм для отдельных объектов хорош, то полученный хэш для массива должен быть относительно ок. Обратите внимание, что очень важно сначала отображать отдельные объекты.