Вот упрощенный набор данных, который я использую, который охватывает мои основные моменты отключения. Id, дата, местоАлгоритм поиска наибольшей уникальной комбинации элементов из массива
(1, Jan 1, LA), (2, Jan 2, LA), (3, Jan 2, LA), (4, Jan 2, NY), (5, Jan 3, LA), (6, Jan 5, LA)
Что я хотел бы найти это крупнейшие уникальные комбинированные наборы, суженные к диапазону дат, и сгруппированные по местоположению.
Так что с этими данными выше и вводом
date_range = 3
Моего выхода (ид для простоты) должно быть:
1,2,3,5
4,
5,6
Так комбинация 1,2,3 не будет включена так как это подмножество 1,2,3,5
Моя первая попытка состояла в том, чтобы найти все возможные комбинации и исключить подмножества после. Я не мог найти здесь отличного решения. Это кажется действительно неэффективным.
Вторая попытка была что-то вдоль линий:
Loop through each item
Find largest combination
Это, кажется, работает лучше, но по-прежнему создает дубликаты. Например, он будет возвращать следующее:
1,2,3,5
2,3,5
3,5
4
5,6
6
не имеет массовый набор данных это необходимо для работы на 1000 пунктов будут высоким концом, но производительность будет заметно. Может быть, я чрезмерна, и мне нужно сосредоточиться на устранении подмножеств эффективно вместо того, чтобы делать все за один проход?
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя вопрос о желаемом поведении, конкретной проблеме или ошибке и кратчайший код, необходимый для его воспроизведения *. Вопросы без четкого описания проблемы не полезны другим читателям. См.: [Mcve] – CollinD
Кажется, вам нужен еще один шаг в вашем текущем алгоритме: Петля через каждый элемент Определите самый большой набор , если set не является частью спискаOFSet и не является подмножеством любого списка в спискеOfSets Добавить set to listOfSets Однако я не совсем уверен, что вы подразумеваете под «уникальным». Ваш пример, по-видимому, означает, что 2 и 3 уникальны, несмотря на то, что они имеют ту же дату и местоположение. – Erikest