Для объединения наборов, если вы собираетесь увидеть, какой из M наборов имеет наименьшее значение, которое будет принимать сравнения M-1. Так что теперь мы выталкиваем это значение и идем снова. Если N - общее количество элементов во всех наборах, наш алгоритм таким образом будет O (NM) (игнорируйте, что это - M-1 для записи Big-O).
То, где мы могли бы оптимизировать, выглядит следующим образом: если мы сортируем самый низкий элемент каждого набора: теперь мы выталкиваем один спереди, но из этого набора нам просто нужна вставка O (logM) в наши новые отсортированные фронты , Мы делаем это для каждого элемента, поэтому наш алгоритм O (N logM).
Обратите внимание, что если у вас есть 3, вы, вероятно, ничего не получите. Если у вас есть 8 таких наборов, это, безусловно, может показать усиление.
Для пересечения наборов мы ищем только значения, которые появляются во всех наших наборах. Мы знаем, что они все одинаковы, если минимум совпадает с максимумом. Мы можем выскочить и отбросить меньшие значения, если они не будут, тогда снова вставлять каждый раз следующее. Если это так, мы добавляем в наш результат, а затем поп из каждого списка. В любом случае у нас все еще будет O (N logM)