一个例子并不能构成完整的规范。例如,如果集合的集合还包括,您的答案会有什么不同
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
and universe
为空集并且frequency
成为一个空哈希。
-
对于每组s
在集合的集合中(除了t
,目标集):
2.1.放universe
到联盟s
and universe
2.2. If s
与相交t
至少有一个元素:
2.2.1. Set `overlapping` to the union of `overlapping` and `s`
2.3.对于每个元素e
in 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
Set nonOverlapping
的差异universe
and overlapping
对 的元素进行排序universe
通过他们的价值观frequency
作为结果的第一部分。
将以下元素附加到结果中nonOverlapping
,也按它们的值排序frequency
.
(如果您确实打算使用以下元素t
为了被消除,我会在 4 中将其作为后处理步骤。)