-1

为简单起见,让我们使用 3 种颜色和相应数字的案例示例(尽管现实生活中实际上有 30,000 多种不同的“颜色”和 254 种不同的“数字”)

红色 - 0、1、2、3、10、15

绿色 - 0、2、3、20

蓝色 - 2、10、11、12

我想找到它们之间的匹配项(rgb、rg、rb),并记录集合之间共享的#s 数量:

RGB = 1

rg = 2

rb = 2

最后,它需要确定共享的#s 数量与集合中不同#s 数量的比率。

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

....ETC

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 回答