2014-09-13 2 views
0

У меня есть две коллекции. Один список элементов с идентификатором и содержимым, позволяет вызывать этот список ItemList. У меня есть еще одна коллекция, которая сообщает мне, выбрал ли пользователь элемент. Вызов этого списка Собран будет иметь идентификатор пользователя и идентификатор элемента. И количество пользователей и предметов действительно велико. Каков оптимальный способ запроса элементов из ItemList для пользователя, которых нет в списке Собрано.Оптимальный способ найти элементы из одной коллекции не в другом

Вот несколько идей, у меня есть:

  1. Использование присоединяется к реляционной базе данных, чтобы решить эту проблему. Мой единственный запрос заключается в том, что этот дескриптор действительно большой набор данных.
  2. Используйте цветной фильтр, чтобы сохранить список собранных элементов, а при запросе элементов проверьте, нет ли в фильтре.

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

+0

Кажется, алгоритм баланса линии. Проверьте [это] (http://www.isqa.unomaha.edu/haworth/isqa3300/fs006.htm) – Max

ответ

1

Вы также можете использовать биты.

Load into some bitset ItemList (ItemID is index in the bitset). 
Load into another bitset IDs_for_user for this user. 
Perform opearation: Resut = ItemList ANDNOT IDs_for_user. 

Бесплатная библиотека BitSet вы можете получить здесь: http://bmagic.sourceforge.net/

+0

Мне нравится этот подход. Я просто сделаю немного исследований, прежде чем я смогу ответить на это. – satran

Смежные вопросы