为了简单起见,让我们使用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
....等
4)选择蓝色 5)是否有其他颜色减去红色份额.....
我知道必须有更有效的方法来做这个,有什么建议吗?
感谢您的帮助。
答案 0 :(得分:0)
由于只有254(如果您的0-254评论是正确的,则为255),那么您可以表达'数字'对于每种颜色'作为256位整数。那么r和g的共享数字的数量就是(r和b)的bitcount,而不同数字的数量是(r或b)的bitcount,所以使用你的例子,
如果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) |