Многое зависит от того, какой тип данных у вас есть. Вы упомянули сортировку, поэтому я считаю, что элементы сопоставимы. Для наборов размером m
и n
для сортировки потребуется O(m lg m + n lg n)
, и это будет доминировать. (Асимптотически, не имеет значения, выполняете ли вы бинарный поиск или обходите оба списка. Обход обоих списков должен быть O( m + n)
.) Конечно, если вы используете данные с лучшим алгоритмом сортировки, например, целые числа с radix-sort , вы должны быть в состоянии опуститься до O( m + n)
.
Использование наборов (как предлагают другие) неявно предполагает использование хеширования, что определенно облегчит вашу проблему. Если вы хэшируете все элементы в A (O(m)
) и сохраняете все хэши в хэш-наборе в памяти, то хеш-код B (O(n)
) и обнаруживает, где в хэш-наборе могут возникать коллизии. Это становится вопросом оптимизации: вы должны оценить классический компромисс между скоростью и памятью. Чем больше ваш хэш-набор, тем быстрее будут проверяться коллизии. Это будет работать в O( m + n )
.
Стоит отметить, что вы можете доказать, что любой алгоритм, который выполняет то, что вы запрашиваете, будет запущен как минимум за m + n
время, так как нужно просмотреть все входные данные.