Я пытаюсь реализовать атаку коллизий на хэши (я посещаю курс "криптография"). Поэтому у меня есть два массива хэшей (= последовательности байтов byte[]
) и я хочу найти хэши, которые присутствуют в обоих массивах. После некоторых исследований и долгих размышлений я уверен, что лучшим решением на одноядерной машине будет HashSet
(добавить все элементы первого массива и проверить через contains
, присутствуют ли уже элементы второго массива).
Однако я хочу реализовать параллельное решение, поскольку у меня есть доступ к машине с 8 ядрами и 12 ГБ RAM. Лучшее решение, которое я могу придумать, это ConcurrentHashSet, который можно создать с помощью Collections.newSetFromMap(new ConcurrentHashMap())
. Используя эту структуру данных, я могу параллельно добавлять все элементы первого массива и - после добавления всех элементов - параллельно проверять через contains
на идентичность хэшей.
Поэтому мой вопрос заключается в следующем: Знаете ли вы алгоритм, предназначенный именно для этой задачи? Если нет, есть ли у вас опыт использования такого ConcurrentHashSet относительно проблем и эффективной сложности времени выполнения? Или вы можете порекомендовать другую готовую структуру данных, которая могла бы мне помочь?
PS: Если кому-то интересны подробности: Я планирую использовать Skandium для распараллеливания моей программы.