Как сравнить данный набор с доступными наборами, чтобы найти набор с большинством пересекающихся элементов, когда всего есть миллион полей? - PullRequest
0 голосов
/ 19 января 2019

Доступные наборы

A={"one","two","three"}
B={"two","three","four"}
c={"four","five"}

Данный набор

D = {"four","five","six"}

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

Здесь
C содержит 2 поля D
B содержит 1 поле D.
Это можно вычислить, найдя объединение D с A, B, C.

Как найти самый близкий набор, когда есть миллионы доступных наборов.

1 Ответ

0 голосов
/ 19 января 2019

Создайте структуру данных таким образом, чтобы элементы стали ключом. В вашем примере структура данных может быть построена так, как показано ниже

"one": {A}
"two": {A,B}
"three": {A,B}
"four": {B,C}
"five": {C}

Теперь все, что вам нужно проверить, это взять каждый элемент в вашем входном наборе D и добавить счетчик для каждого из имен набора. поэтому в вашем примере D будет {"четыре", "пять", "шесть"}

Теперь вы можете просмотреть «четыре», «пять» и «шесть»

Step 1: The counter will be all zeros initially  

Step 2: After looking at the values for "four" the counter will look like below  
B:1, C:1  

Step 3: After looking at the values for "five" the counter will look like below  
B:1, C:2  

Step 4: After looking at the values for "six" the counter will look like below   
B:1, C:2  

Step 5: Choose the set with the maximum value. In this case it will be C.  

Если вы используете python, вы можете использовать метод collection.Counter most_common.
https://docs.python.org/3/library/collections.html#collections.Counter

...