我正在使用Python进行编程。
我有以下形式的数据:
(A, B, C, D, E, F, G, H, I)
这些数据的不同部分都与一个得分相关联,例如:
scores:
(A, B, C, D) = .99
(A, B, C, E) = .77
(A, B, E) = .66
(G,) = 1
(I,) = .03
(H, I) = .55
(I, H) = .15
(E, F, G) = .79
(B,) = .93
(A, C) = .46
(D,) = .23
(D, F, G) = .6
(F, G, H) = .34
(H,) = .09
(Y, Z) = 1
我们可以按照以下方式为这些数据打分:
A B C E + D F G + H I = .77 * .6 * .55 = 0.2541
另一个可能性是:
A B C D + E F G + H + I = .99 * .79 * .09 * .03 = 0.00211167
因此,第一种组合得分更高。
我希望编写一个算法来确定上述数据的最高可能得分。数据成员不应重复超过一次。换句话说:
A B C E + E F G + D + H I
不是有效的。您建议我如何解决这个问题?
谢谢,
Barry
编辑: 我应该澄清一下,(H,I)!=(I,H),而(I,H)不是ABCDEFGHI的子片段,但它是ABIHJ的子片段。另一个需要提到的事情是,得分是一个非常大的集合(数百万),我们计算得分的片段平均长度约为10。此外,我计算分数的方式可能会在将来发生变化。也许我想要添加子段并取平均数而不是乘法,谁知道......因此,从实际计算得分中分离出计算可能组合的代码可能更好。目前,我倾向于认为itertools.combinations可能是一个很好的起点。