1

セット (ビットベクトル) の Jaccard 類似度の計算にこの問題があります。

v1 = 10111

v2 = 10011

交点のサイズ = 3; (どうやってそれを見つけることができますか?)

和集合のサイズ = 4 (どうすれば見つけられるでしょうか?)

Jaccard 類似度 = (交差/和) = 3/4

しかし、2 つのベクトルの「交点」と「結合」をどのように見つけたらよいのかわかりません。

私を助けてください。

4

1 に答える 1

4

おそらく、「交差点」と「ユニオン」の定義は、「両方の値に設定されたビット数」と「いずれかの値に設定されたビット数」です....これは(intまたはlongのようなものを使用していると仮定しますベクトル) :

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

次に、実装する必要がありますCountBitsこのスタック オーバーフローの質問が役に立ちます。

intまたはを使用する代わりに、 を使用longすることもできますBitArray。これにはメソッドがAndあり、元の値を変更していないように見えますが、完全には明らかではありません。もちろん、設定されたビットをカウントする最良の方法を考え出す必要があります-うまくいくかもしれません。OrBitArrayarray.Cast<bool>().Count(bit => bit)

于 2012-08-24T06:25:17.137 に答える