Алгоритм сравнения списков: поиск пересекающихся массивов? Дан массив массивов m: [[1,2,3], [3,4,5], [1,6], [4,5,6], ...]
Дан целевой массив t.
Средняя длина подмассивов в m - 30.
Средняя длина t - 1000.
Как определить какие из десяти (к примеру) подмассивов m содержат с t наибольшее число общих элементов?
Задачу в лоб я решаю.
Но количество подмассивов в m будет большим.
И осложняется тем, что они лежат в базе.
Поэтому вопрос в том, как это сделать оптимальным образом.

21 Авг 2019 в 06:11
162 +1
0
Ответы
1

Один из способов оптимизации данной задачи может быть использование хэш-таблицы (например, словаря в Python) для подсчета количества общих элементов между каждым подмассивом из m и целевым массивом t.

Создайте пустой словарь для хранения количества общих элементов для каждого подмассива из m.Для каждого подмассива из m:
Создайте множество с элементами из текущего подмассива.Пересеките множество текущего подмассива с множеством элементов целевого массива t.Запишите количество общих элементов в словарь.Найти подмассивы с максимальным количеством общих элементов с целевым массивом t по значению в словаре.

Такой подход позволит сократить количество операций сравнения элементов и значительно ускорит процесс поиска подмассивов с наибольшим количеством общих элементов.

20 Апр 2024 в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир