业务如下:
有仓库A、B、C
每个仓库中有数箱矿泉水,箱子中的矿泉水数量不一,如何将不满的数个箱子凑成满的?
例如:
满箱为24瓶
A库中有A-1 = 21瓶,A-2 = 15瓶,A-3 = 13瓶
B库中有B-1 = 4瓶,B-2 = 8瓶, B-3 = 23瓶
C库中有C-1 = 11
按照人类的逻辑应该是把A-3搬到A-1和A-2中间,然后从 A-3中拿出3瓶给A-1 再拿出9瓶给A-2 这样正好两整箱零1个
然后再把剩余的1瓶拿给B-3凑成一整箱
再将B-1和B-2组成半箱拿给C-1凑成23瓶
最终的要求就是出一张表告诉库管员从哪个箱子里拿多少瓶放到哪个箱子里,请问这种业务应该怎么实现?
试了下循环模拟计算,非常耗资源,像这种问题是否有更高效的算法去解决呢?
这样其实会有一些条件不是很明确.不知道你怎么算的.
下边是我的思路,如果不考虑不同仓库,假设了任意两个箱子之间流通成本是一样的.
从当前最少的那个箱子里取水放到最多的箱子里凑成整箱.这样保证移动了最少的瓶数
如果考虑不同仓库,就像你说的,需要先把每个仓库能凑整的凑整,这样N个仓库就会剩下0~N个不整的箱子,将他们无差别(也可能有差别,因为仓库间距离不同,同仓库就不考虑各个箱子间的距离差别了)操作一次,
后边和你你描述的有点出入,因为你是在进行顺序操作了,将A没处理完的带到了B中成了B4,我这个是全部处理完再处理剩余的,这个算法依然比较简单,不过效率是O(N)的,空间复杂度也是O(N),我就当做题了