-1

簡単にするために、対応する番号を持つ3色のケース例を使用してみましょう(実際には、実際には30,000以上の異なる「色」と254の異なる「番号」があります)

赤-0、1、2、3、10、15

緑-0、2、3、20

青-2、10、11、12

それらの間の一致(rgb、rg、rb)を見つけ、セット間で共有される#の数を集計したいと思います。

rgb = 1

rg = 2

rb = 2

最後に、セット内の個別の#の数と比較した共有された#の数の比率を決定する必要があります。

rgb = 1/9(0、1、2、3、10、11、12、15、20)

rg = 2/7(0、1、2、3、10、15、20)

rb = 2/8(0、1、2、3、10、11、12、15)


したがって、合計出力は次のようになります。

一致| 一致数| %|

rgb | 1 | 1/9

rg | 2 | 2/7

rb | 2 | 2/8


私が思いついたアルゴリズムは、テーブルに各色があり、それに関連付けられた番号(別名赤(テーブル名)、0、1、2、3、10、15(データ))をマップすることです。次に、「数字」が最も多い色を取得し、それを他のすべての色の時間と比較して、一致するものを見つけます。その色を使い終わったら、100%無視して次の色に移り、n-1と比較することができます。

例を見てみましょう:

1)赤を選択

2)他の色は0を共有しますか

3)他の色は共有しますか1

....等

4)青を選択します5)他の色から赤を引いたものは共有しますか....。

これを行うにはもっと効率的な方法が必要だと私は知っています、何か提案はありますか?

助けてくれてありがとう。

4

1 に答える 1

0

254(または、0-254コメントが正しい場合は255)しかないため、各「色」の「数値」のセットを256ビット整数として表すことができます。次に、rとgの共有番号の数は、(rとb)のビット数であり、個別の番号の数は(rまたはb)のビット数であるため、例を使用すると、

Rが赤のビットセットである場合、GはBのビットセットなどです。

match | # of matches            | %                                             |
rgb   | bitcount(R and G and B) | bitcount(R and G and B)/bitcount(R or G or B) |
rg    | bitcount(R and G)       | bitcount(R and G)/bitcount(R or G)            |
rb    | bitcount(R and B)       | bitcount(R and B)/bitcount(R or B)            |
于 2012-10-24T21:11:45.933 に答える