複数の属性を持つオブジェクトのリストが与えられた場合、交差するすべてのサブセットの結合によって作成されたセットのリストを見つける必要があります。
具体的には、これらは Person オブジェクトであり、それぞれに多くの属性があります。SSN、DLN などの一意の識別子に基づいて「マスター」セットのリストを作成する必要があります。
たとえば、人物 A と人物 B が同じ SSN を持っている場合、セット i を作成します。次に、人物 B と人物 C が同じ DLN を持っている場合、セットを作成します ii. 人物 D と E は同じ SSN を持っていますが、それ (および他のすべての識別子) は、人物 A、B、または C の識別子のいずれとも一致しません。すべての交差するサブセットをマージした後、人物 A、B、C の 1 つのセットになります。人物D、Eとの別のセット。
これが私のソリューションの疑似コードです。可能性のあるすべての交差セットをマージするより効率的な方法を誰かがすでに考え出していないかどうか、私は興味があります。セット間のリンクは X 人の長さになる可能性があることに注意してください (つまり、A は SSN で B に一致し、B は DLN で C に一致し、C は SSN で D に一致し、D は他の識別子で E に一致し、1 つのセットで人 AE になります)。また、これが実装される言語がセット操作をサポートしていると仮定します。
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