Ваш метод всегда будет выполнять O (n), чтобы найти членов группы, потому что вам нужно перебирать все элементы коллекции, чтобы найти элементы, принадлежащие целевой группе.Ваш метод также рискует переполнить общие целочисленные границы (32, 64 бита), если у вас много элементов, поскольку вы умножаете потенциально большое количество простых чисел вместе, чтобы сформировать ваш ключ.
Вы найдете его более эффективным и, безусловно,более предсказуемо использовать битовую маску для отслеживания членства в группах, следуя этому подходу.Если у вас есть 16 групп, вы можете представить это с помощью 16-битного короткого кода, используя битовую маску.При использовании простых чисел, как вы предлагаете, вам понадобится целое число с достаточным количеством битов для хранения числа 32589158477190044730 (умножаются первые 16 простых чисел), что потребует 65 бит.
Другими подходами к группировке также являются O (n) дляпервая итерация (в конце концов, каждый элемент должен быть проверен хотя бы один раз для членства в группе).Однако если вы склонны повторять одни и те же групповые проверки, другие методы, на которые вы ссылаетесь (например, ведение списка или хэш-таблицы для целевой группы), гораздо эффективнее, поскольку последующие тесты на членство в группе - O (1).
Таким образом, чтобы непосредственно ответить на ваш вопрос:
- Если существует несколько запросов на членство в группе (повторение некоторых групп), любое решение, в котором хранятся группы (включая те, которые вы предлагаете в своем вопросе), будет работать лучше.чем ваш метод.
- Если нет повторных запросов для членства в группе, нет никакого преимущества для хранения членства в группе
Учитывая, что повторные запросы кажутся вероятными, основываясь на вашем вопросе:
- Используйте структуру, такую как список, отключенный от идентификатора группы, для хранения членства в группе, если вы хотите обменять память, чтобы получить более высокую скорость.
- Используйте достаточно широкий битовый массив для хранения группычленство, если вы хотите торговать быстрее, чтобы использовать меньше памяти.