Возможное решение.
Сортировка каждый список и преобразовать в 10 разрядного двоичного числа
например
Список один
9 8 7 6 5 4 3 2 1 0
N N Y Y Y Y N N Y Y = 243
Список Два
9 8 7 6 5 4 3 2 1 0
Y Y N Y N N Y Y Y N = 846
Список Три
9 8 7 6 5 4 3 2 1 0
N N Y Y Y Y Y N Y N = 250
прегенерация все возможные значения для пар
т.е.
0,1 = 3
0,2 = 5
...
1,5 = 34
...
5,7 = 160
...
8,9 = 768
Создать список значений и подсчетов (я включил текстовое представление пары для простоты)
eg
public class Details {
public string Pair { get; set; }
public int Value { get; set; }
public int Count { get; set; }
}
// selection only
public readonly static List<Details> PairDetails = new List<Details>() {
new Details{Pair = "0,1", Value = 3},
new Details{Pair = "0,2", Value = 5},
new Details{Pair = "1,5", Value = 34},
new Details{Pair = "1,6", Value = 66},
new Details{Pair = "2,3", Value = 12},
new Details{Pair = "4,5", Value = 48}
};
затем итерацию по парам и списки
foreach (var details in PairDetails) {
foreach (var value in values) {
if ((value & details.Value) == details.Value) {
details.Count++;
}
}
}
var most = PairDetails.Where(dtls => dtls.Count == PairDetails.Max(dt => dt.Count)).ToList();
Это даст вам список всех пар, которые встречаются наибольшее количество раз в списках.
hth,
Alan.
Что вы устали и что означает «пара» в этом контексте? – soulcheck
Какой язык программирования вам нужен? – ChrisBD
Я хочу этого в C#. – onurbaysan