Учитывая список объектов с несколькими атрибутами, мне нужно найти список множеств, созданных объединением всех пересекающихся подмножеств.Союз всех перекрестных наборов
В частности, это объекты Person, каждый со многими атрибутами. Мне нужно создать список «основных» наборов на основе нескольких уникальных идентификаторов, таких как SSN, DLN и т. Д.
Например, если Person A и Person B имеют одинаковый SSN, они создают набор i. Тогда, если Person B и C имеют один и тот же DLN, они создают набор ii. У лиц D и E есть один и тот же SSN, но он (и все другие идентификаторы) не соответствует ни одному из идентификаторов лиц A, B или C. После слияния всех пересекающихся подмножеств я получаю один набор с лицами A, B, C и другой набор с лицами D, E.
Вот psuedo-код для моего решения. Мне любопытно, если кто-то уже придумал более эффективный способ слияния всех возможных пересекающихся множеств. Имейте в виду, что ссылки между наборами могут быть X Лица длинными (то есть A соответствует B по SSN и B соответствует C по DLN и C соответствует D по SSN, а D соответствует E каким-либо другим идентификатором, приведет к Лицам A-E в одном наборе). Также предположим, что язык будет реализован в операциях с установленными операциями.
bigSetList = array of all of the uniq Sets
fullyTested = false
while (bigSetList.size() > 1) or (fullyTested is false)
foreach thisSet in bigSetList order by size desc
if count(sets that intersect with thisSet) > 0
newThisSet = thisSet
intersectingSets = []
bigSetList.delete(thisSet)
foreach testSet in bigSetList
if thisSet.intersects(testSet)
newThisSet.addAll(testSet)
intersectingSets.push(testSetID)
end if
end
bigSetList.delete(intersectingSets)
bigSetList.push(newThisSet)
bigSetList.sort()
break
end if
end foreach
fullyTested = true // have looped through every set in the list and found 0 intersect partners
end
Что такое "testSet"? –
testSet - это просто переменная цикла для данного набора в bigSetList. Я отредактирую код, чтобы сделать это понятным. –
Иными словами, каждый член набора делится хотя бы одним атрибутом, по крайней мере с одним другим членом этого набора? Это похоже на какой-то алгоритм, который уже был обнаружен. – MSN