1

我在计算集合(位向量)的 Jaccard 相似度时遇到了这个问题:

v1 = 10111

v2 = 10011

交叉点的大小 = 3;(我们怎么能找到它?)

union 的大小 = 4,(我们怎样才能找到它?)

Jaccard 相似度 = (交集/并集) = 3/4

但我不明白我们如何找出两个向量的“交集”和“并集”。

请帮我。

4

1 回答 1

4

大概您对“交集”和“并集”的定义是“在两个值中设置的位数”和“在任一值中设置的位数”......这是(假设您使用类似intor的东西long作为向量) :

int intersection = CountBits(v1 & v2);
int union = CountBits(v1 | v2);

接下来你只需要实现CountBits. 这个 Stack Overflow 问题可以帮助你。

您可能想要使用 ,而不是使用intor 。那有和方法,看起来它们不会改变原始值,但并不完全清楚。当然,您需要找出计算 a中设置的位的最佳方法 -可能会很好。longBitArrayAndOrBitArrayarray.Cast<bool>().Count(bit => bit)

于 2012-08-24T06:25:17.137 回答