求一个算法,请高手解答

来源:百度知道 编辑:UC知道 时间:2024/05/29 02:49:09
现有一个对象T,包含P和R两个集合,P可以理解为需要支付的金额(类似于订单),R可以理解为实际支付的金额(类似于支票),其中P可以有多个,P1,P2,P3...同样R也可以有多个,R1,R2,R3...但是P的总额等于R的总额,即P1+P2+P3+...=R1+R2+R3+...
根据逻辑有:
1.如果P和R都只有一个,那P1=R1匹配,否则不匹配。
2.如果P和R都不止一个,但是P的个数等于R的个数,那必须P的每一个数都要能在R中找到相等的,否则不匹配。
3.如果P的个数小于R的个数,则肯定不匹配
4.如果P的个数大于R的个数,则需要判断是不是有一个R可以等于2个P的和,等于则匹配,否则不匹配。
例如:P(5,2,3) R(7,3) 匹配
P(4,4) R(8) 匹配
P(4,9) R(5,8) 不匹配
求算法,主要是第四点的算法,多谢。
P和R的个数都不确定。
第四点,如果P(a,b,c,d,e),R(f,g),可以是a+b+c=f,d+e=g算是匹配,也可以是a+b=f,c+d+e=g也算是匹配,R中的一个数可以是P中几个数的和,不一定是2个数。这个可以理解为一张支票可以为2个或多个订单支付。

这个也太离散了,很难有高效的算法,尤其在P,R个数不确定(有可能N多)的情况下,为什么不尝试P中n个元素与R中1个元素的多对1的外键(数据库方式)方式来联系呢(就如同你举的例子,多个订单在同一个支票上,那这多个订单一定会关联到同一张支票号上)
---------------------------------------
在算法上帮不上你什么

因为我只是想想了一下

如果剔除掉P,R中相同的元素,然后对剩下的不匹配数字进行算法计算。那对于R中的每个值都必然是P中大于1个元素的和结果。而P中的元素在加运算后可以得出R中值的方式可能会是一个庞大的组合情况。这时候的效率就可想而知了

举例
P{1,1,1,....我有10000个1,2,2,我还有10000个2}
R{15000,15000}

如果是做系统,还是考虑数据库加主键方式吧