Позвольте Abstract
быть абстрактным классом и A1,A2,...,An
конкретными классами, которые наследуются от Abstact
.Каждый из Ai
имеет список Abstract
и предопределенный, известный во время компиляции набор примитивных типов, давайте предположим, что у нас есть для них функция hush, и в структуре нет «петель»каждый конкретный элемент.
Два элемента e1 и e2 идентичны, если они имеют одинаковые значения для предопределенных примитивов, и если для каждого Abstract
в e1 существует Abstract
в e2, такой что e1 ие2 идентичны.(другими словами, порядок не важен).
Я ищу хорошую эвристику хеша для такого рода проблемы.Это не должно (и, насколько я знаю, не может быть) идеальная хеш-функция, но она должна быть хорошей и простой для вычисления во время выполнения.
Я буду рад, если кто-то может датьмне некоторые рекомендации, как реализовать такую функцию, или направить меня к статье, посвященной этой проблеме.
PS Я пишу на Java, и я предполагаю (исправьте меня, если я ошибаюсь) встроенную hash()
не будет достаточно хорош для этой проблемы.
РЕДАКТИРОВАТЬ:
списки и примитивы фиксируются после создания, но неизвестны во время компиляции.