我有一个问题,我有多个(几千)数量,我需要在一组数量的收件人之间拆分,以便每个数量必须拆分为整数并使用相同的比例。我需要找到一个可靠且有效地实现这一点的算法(我们都不是吗?:-))
这是为了解决金融市场(证券交易所订单)中的一个问题,其中订单可能会获得数千个“成交”,并且在一天结束时必须将其分发给几个客户,同时保持订单的平均价格。这是一个例子:
总订货量 37300
联交所填写的数量
执行 1. 16700 股以 75.84 的价格成交
执行 2. 5400 股以 75.85 的价格成交
执行 3. 4900 股以 75.86 的价格成交
执行 4. 10300 股以 75.87 的价格成交
以平均价格成交的总数为 37300 股 = (16700*75.84 + 5400*75.85 + 4900*75.86 + 10300*75.87) / 37300 = 75.85235925
假设我需要在 3 个客户之间分配这些数量,这样:
客户1:15000股
客户2:10000股
客户3:12300股
每次执行都必须单独拆分(我不能只将每个客户要求的数量按平均价格定价)
我的第一个想法是按比例拆分:
客户 1 得到 15000/37300=0.402144772
客户端 2 得到 10000/37300=0.268096515
客户 3 得到 12300/37300=0.329758713
这会导致
Client1 - 15000 Client2 - 10000 Client3 - 12300 比率:0.402144772 比率:0.268096515 比率:0.329758713
拆分(对不起格式 - 这是我在帖子编辑器中能做的最好的)
+-------------+-------------+-------------+
| Client 1 | Client 2 | Client 3 |
+-------------+-------------+-------------+
| 6715.817694 | 4477.211796 | 5506.970509 |
| 2171.581769 | 1447.72118 | 1780.697051 |
| 1970.509383 | 1313.672922 | 1615.817694 |
| 4142.091153 | 2761.394102 | 3396.514745 |
+-------------+-------------+-------------+
| Totals: | | |
| 15000 | 10000 | 12300 |
+-------------+-------------+-------------+
这样做的问题是我无法为客户分配小数,所以我需要一个智能算法来调整数量,使这些拆分的小数部分为 0。我知道这在许多情况下可能是不可能的,所以这个要求可以放松一点,以便某个客户获得更多(或更少)。
有谁知道我可以用作这个问题的起点的算法?