我很抱歉,如果我提前写错了,但我有一个大型数据集,我正在尝试分析它,但是大部分数据都不正确,需要一些帮助来弄清楚如何选择正确的数据。
这里有更多信息可以清除它。例如,我有以下内容:
color value quantity
red 20 2
blue 5 8
green 10 2
total 100
如果只给出了值和总数,我会发现有36个可能的答案:
#1 Found : 20.0*0.0 red + 5.0*0.0 blue + 10.0*10.0 green = 100.0
#2 Found : 20.0*0.0 red + 5.0*2.0 blue + 10.0*9.0 green = 100.0
#3 Found : 20.0*0.0 red + 5.0*4.0 blue + 10.0*8.0 green = 100.0
#4 Found : 20.0*0.0 red + 5.0*6.0 blue + 10.0*7.0 green = 100.0
#5 Found : 20.0*0.0 red + 5.0*8.0 blue + 10.0*6.0 green = 100.0
#6 Found : 20.0*0.0 red + 5.0*10.0 blue + 10.0*5.0 green = 100.0
#7 Found : 20.0*0.0 red + 5.0*12.0 blue + 10.0*4.0 green = 100.0
#8 Found : 20.0*0.0 red + 5.0*14.0 blue + 10.0*3.0 green = 100.0
#9 Found : 20.0*0.0 red + 5.0*16.0 blue + 10.0*2.0 green = 100.0
#10 Found : 20.0*0.0 red + 5.0*18.0 blue + 10.0*1.0 green = 100.0
#11 Found : 20.0*0.0 red + 5.0*20.0 blue + 10.0*0.0 green = 100.0
#12 Found : 20.0*1.0 red + 5.0*0.0 blue + 10.0*8.0 green = 100.0
#13 Found : 20.0*1.0 red + 5.0*2.0 blue + 10.0*7.0 green = 100.0
#14 Found : 20.0*1.0 red + 5.0*4.0 blue + 10.0*6.0 green = 100.0
#15 Found : 20.0*1.0 red + 5.0*6.0 blue + 10.0*5.0 green = 100.0
#16 Found : 20.0*1.0 red + 5.0*8.0 blue + 10.0*4.0 green = 100.0
#17 Found : 20.0*1.0 red + 5.0*10.0 blue + 10.0*3.0 green = 100.0
#18 Found : 20.0*1.0 red + 5.0*12.0 blue + 10.0*2.0 green = 100.0
#19 Found : 20.0*1.0 red + 5.0*14.0 blue + 10.0*1.0 green = 100.0
#20 Found : 20.0*1.0 red + 5.0*16.0 blue + 10.0*0.0 green = 100.0
#21 Found : 20.0*2.0 red + 5.0*0.0 blue + 10.0*6.0 green = 100.0
#22 Found : 20.0*2.0 red + 5.0*2.0 blue + 10.0*5.0 green = 100.0
#23 Found : 20.0*2.0 red + 5.0*4.0 blue + 10.0*4.0 green = 100.0
#24 Found : 20.0*2.0 red + 5.0*6.0 blue + 10.0*3.0 green = 100.0
#25 Found : 20.0*2.0 red + 5.0*8.0 blue + 10.0*2.0 green = 100.0
#26 Found : 20.0*2.0 red + 5.0*10.0 blue + 10.0*1.0 green = 100.0
#27 Found : 20.0*2.0 red + 5.0*12.0 blue + 10.0*0.0 green = 100.0
#28 Found : 20.0*3.0 red + 5.0*0.0 blue + 10.0*4.0 green = 100.0
#29 Found : 20.0*3.0 red + 5.0*2.0 blue + 10.0*3.0 green = 100.0
#30 Found : 20.0*3.0 red + 5.0*4.0 blue + 10.0*2.0 green = 100.0
#31 Found : 20.0*3.0 red + 5.0*6.0 blue + 10.0*1.0 green = 100.0
#32 Found : 20.0*3.0 red + 5.0*8.0 blue + 10.0*0.0 green = 100.0
#33 Found : 20.0*4.0 red + 5.0*0.0 blue + 10.0*2.0 green = 100.0
#34 Found : 20.0*4.0 red + 5.0*2.0 blue + 10.0*1.0 green = 100.0
#35 Found : 20.0*4.0 red + 5.0*4.0 blue + 10.0*0.0 green = 100.0
#36 Found : 20.0*5.0 red + 5.0*0.0 blue + 10.0*0.0 green = 100.0
正如您所看到的,在可能性中我得到了正确答案,但也有许多其他答案。现在说我再添加一个红色(所以总红色是3)然后我现在有49个结果,但是如果你考虑与第一个结果集的关系,那么第二个集合中的一些结果是不可能的。我假设随着我获得更多数据结果,我可以更准确地删除不起作用的结果。
我正在试图确定是否有任何研究或标准方法将结果缩小到更有意义的方面。我不是100%肯定,但我认为也许google可能是一个例子,因为每个查询不仅针对数据而且还针对您的历史记录(我有一个排名很低的网站,当我点击它然后搜索再次它总是出现在顶部..但当我在我的朋友计算机上搜索同一站点出现在底部)。我想也许谷歌与我们的多个搜索查询建立关系的方式,我可以使用类似的方法从上面的数据中删除不正确的结果。
很抱歉误会。我对algo来说有点新意,我在解释这个问题时遇到了麻烦。如果没有意义,请告诉我。
提前致谢!
答案 0 :(得分:2)
如果我做对了你就解决了像
这样的方程式R*r + G*g + B*b = 100
对于给定的R,G,B的整数值,并且约束为r,g,b也是整数值。
由于您只有一个方程式和3个变量,因此您可以获得解决方案空间而不是单个解决方案,现在需要应用一些算法来选择正确的或最佳的
你似乎还有r0,g0,b0的值,它们可能是r,g和b的值?!
您需要提供的是健身功能,它可以告诉您候选解决方案的好坏。
一个例子可能是(较低的值意味着更好的解决方案)
(r-r0)^2 +(g-g0)^2 +(b-b0)^2
这基本上说当解决方案更接近可能的值时,解决方案会更好。
变体可能是
(r-r0)^2 +(g-g0)^2 +(b-b0)^2 + c*C
其中C是由您选择的常数,c是与您可能的解决方案不同的值的数量。这将为候选人提供更高的适应性,与仅改变两个或三个值相比,该候选者仅改变一个值。
一旦你有健身功能,选择适合度最低的解决方案。
答案 1 :(得分:0)
这个问题被称为线性丢番图方程。 您可以找到更多信息here。