C++ задачка на производительность (объединение и пересечение множеств)
Цена договорная
•
электронные деньги
Имеется массив массивов из чисел. Числа в рамках каждого подмассива уникальны и отсортированы по возрастанию:
DATA = [
[1, 3, 5, 7, 9], #0
[2, 4, 6, 8, 10], #1
[1, 2, 3, 5, 8], #2
[1, 2, 3, 4, 5], #3
]
На вход подаётся запрос в виде массива массивов
из индексов (каждый индекс - это индекс подмассива в DATA)
QUERY = [
[#0, #2],
[#1, #3],
]
Для каждого подмассива в QUERY нужно найти
объединение чисел из соответствующих подмассивов DATA, результат должен быть
отсортирован по возрастанию:
[#0, #2] = union([1, 3, 5, 7, 9], [1, 2, 3, 5,
8]) = [1, 2, 3, 5, 7, 8, 9]
[#1, #3] = union([2, 4, 6, 8, 10], [1, 2, 3, 4,
5]) = [1, 2, 3, 4, 5, 6, 8, 10]
Затем найти пересечение среди полученных
объединений, результат опять же отсортирован по возрастанию:
RESULT = intersection([1, 2, 3, 5, 7, 8, 9], [1,
2, 3, 4, 5, 6, 8, 10]) = [1, 2, 3, 5, 8]
Этот результат нужно вывести на экран.
Программа должны использовать константный объем
памяти на запрос. Размер DATA ограничен только объёмом доступной памяти.
QUERY может содержать вплоть до всех индексов в любой комбинации. Данные для теста можно
сгенерировать случайно.
Цель - достигнуть максимальной
производительности. Скорее всего нужны будут специальные оптимизации для
случаев когда подмассив в QUERY имеет один, два или три индекса, а также общую
реализацию для N.
В идеале нужно написать несколько решений и
бэнчмарк оценивающий скорость каждого.
От вас я ожидаю оценки по стоимости и сроку.
DATA = [
[1, 3, 5, 7, 9], #0
[2, 4, 6, 8, 10], #1
[1, 2, 3, 5, 8], #2
[1, 2, 3, 4, 5], #3
]
На вход подаётся запрос в виде массива массивов
из индексов (каждый индекс - это индекс подмассива в DATA)
QUERY = [
[#0, #2],
[#1, #3],
]
Для каждого подмассива в QUERY нужно найти
объединение чисел из соответствующих подмассивов DATA, результат должен быть
отсортирован по возрастанию:
[#0, #2] = union([1, 3, 5, 7, 9], [1, 2, 3, 5,
8]) = [1, 2, 3, 5, 7, 8, 9]
[#1, #3] = union([2, 4, 6, 8, 10], [1, 2, 3, 4,
5]) = [1, 2, 3, 4, 5, 6, 8, 10]
Затем найти пересечение среди полученных
объединений, результат опять же отсортирован по возрастанию:
RESULT = intersection([1, 2, 3, 5, 7, 8, 9], [1,
2, 3, 4, 5, 6, 8, 10]) = [1, 2, 3, 5, 8]
Этот результат нужно вывести на экран.
Программа должны использовать константный объем
памяти на запрос. Размер DATA ограничен только объёмом доступной памяти.
QUERY может содержать вплоть до всех индексов в любой комбинации. Данные для теста можно
сгенерировать случайно.
Цель - достигнуть максимальной
производительности. Скорее всего нужны будут специальные оптимизации для
случаев когда подмассив в QUERY имеет один, два или три индекса, а также общую
реализацию для N.
В идеале нужно написать несколько решений и
бэнчмарк оценивающий скорость каждого.
От вас я ожидаю оценки по стоимости и сроку.
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.