Учитывая список списков (скажем, 5 списков, чтобы иметь реальное число для работы), я могу с легкостью найти элементы, которые являются общими для всех 5 списков (см. Intersection of multiple lists with IEnumerable.Intersect()), используя изменение следующего кода:Элементы, общие для большинства списков
var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };
var intersection = listOfLists.Aggregate((previousList, nextList) => previousList.Intersect(nextList).ToList());
Теперь давайте предположим, что intersection
заканчивается, содержащий 0 пунктов. Вполне возможно, что есть некоторые объекты, которые являются общими для 4/5 списков. Как я могу найти их наиболее эффективным способом?
Я знаю, что могу просто пробежать все комбинации из 4 списков и сохранить все результаты, но этот метод не очень хорошо масштабируется (это, в конечном счете, должно быть выполнено примерно в 40 списках).
Если ни один элемент не является общим для 4 списков, поиск будет повторяться в поисках элементов, общих для 3/5 списков и т. Д. Визуально это может быть представлено списками точек сетки, и мы ищем точки которые имеют наибольшее совпадение.
Любые идеи?
EDIT: Возможно, было бы лучше посмотреть на каждую точку и отслеживать, сколько раз она появляется в каждом списке, а затем создать список точек с наивысшим результатом?
Довольно уверен, что вы только что ответили на свой вопрос. – RoadieRich
У вас есть уникальные предметы в каждом списке? –
Фактические списки - это списки 'Point's (для использования на холсте WPF) –