一个例子并没有做出完整的规范。例如,如果集合的集合也包括在内,你的答案会有什么不同
set E: 1 2 3
set F: 1 3
这将使 3 成为与 有非空交集的集合中最常出现的值D
?所以这是我的假设:
给定一个目标集(D
在您的原始示例中):
- “重叠集合”(与目标集合具有非空交集的集合)中的值比那些重叠集合中没有的值更相关。
- 在陈述 1 的约束下,相关性由出现的频率决定。
在您的原始示例中,A
与 重叠D
,因此宇宙 {1, 2, 3, 4, 5, 6, 7} 被划分为重叠 {1, 2, 3, 4} 和不重叠 {5, 6, 7} . 值频率为 {1:2, 2:1, 3:2, 4:3, 5:2, 6:2, 7:1}。结合这些事实给出重叠频率 {1:2, 2:1, 3:2, 4:3} 和非重叠频率 {5:2, 6:2, 7:1},产生顺序 4, 3, 1、2 后跟 5、6、7。(我注意到您没有为 1 分配相关性。如果故意,这可能是从最终排序中删除目标集值的最后一步。)
在我调整后的示例中,频率变为 {1:4, 2:3, 3:4, 4:3, 5:2, 6:2, 7:1}。这给出了重叠频率 {1:4, 2:3, 3:4, 4:3} 和非重叠频率 {5:2, 6:2, 7:1},产生顺序 1, 3, 2, 4 之后是 5、6、7。
该算法的伪代码是:
初始化overlapping
和universe
为空集并frequency
为空散列。
对于集合集合s
中的每个集合(t
目标集合除外):
2.1。设置universe
为和的s
并集universe
2.2. 如果s
intersected witht
至少有一个元素:
2.2.1. Set `overlapping` to the union of `overlapping` and `s`
2.3. e
对于中的每个元素s
:
2.3.1. If 'e' is a key in `frequency`
2.3.1.1. Then increase the value (count) for `e` in `frequency` by 1
2.3.1.2. Else initialize the value (count) for `e` in `frequency` to 1
设置nonOverlapping
为universe
和的差overlapping
按结果的第一部分中的universe
值对元素进行排序。frequency
将 的元素附加到结果中nonOverlapping
,也按它们在 中的值排序frequency
。
(如果您确实打算t
消除 的元素,我会在 4 中将其作为后处理步骤。)