Algorithm 确定最佳资金分配的算法

Algorithm 确定最佳资金分配的算法,algorithm,Algorithm,所以我有一个现实世界的情况,我正试图找到一个解决方案。为了简单起见,我将稍微抽象和调整细节 我有一定数量的钱,我可以贡献给一个或多个桶。这些桶包含0个或多个其他人捐献的钱。无论每个桶里有多少钱,都会有一定的股息在所有桶中平均分配。我将收到的股息百分比是基于我在某个特定桶中的持股相对于该桶中总持股的百分比 我如何在不同的桶中找出资金的最佳配置,以最大化我的收益 例如: 我有100美元要投资 股息总额为100美元 已经有3个桶包含以下资金。 ---A桶:100美元 ---B桶:200美元 ---C

所以我有一个现实世界的情况,我正试图找到一个解决方案。为了简单起见,我将稍微抽象和调整细节

我有一定数量的钱,我可以贡献给一个或多个桶。这些桶包含0个或多个其他人捐献的钱。无论每个桶里有多少钱,都会有一定的股息在所有桶中平均分配。我将收到的股息百分比是基于我在某个特定桶中的持股相对于该桶中总持股的百分比

我如何在不同的桶中找出资金的最佳配置,以最大化我的收益

例如:

  • 我有100美元要投资
  • 股息总额为100美元
  • 已经有3个桶包含以下资金。 ---A桶:100美元 ---B桶:200美元 ---C组:300美元
因此,一种方法是我可以将全部100美元放入A桶。我将拥有该桶50%的股份,因此将获得16.66美元的股息((100/3)*.5)

我不认为解决办法像找到我拥有最高百分比的单个桶那么简单。例如,如果铲斗如下所示:

---A桶:33.33美元 ---B类:33.33美元 ---C类:33.33美元

我最好将我的钱平均分配到所有3个桶中,并从每个桶中收集16.66美元

总之,寻找一种算法来确定理想的分配

不知道该试什么。我唯一能想到的就是通过枚举每个bucket的0-100的所有可能组合来进行暴力强制,但这很快就会让性能变得糟糕


(FWIW,这不是家庭作业或编码挑战-我正在研究的真实生活场景)

从概念上讲,您希望添加到最低的存储桶,直到它匹配第二个最低的存储桶。添加到最低的2,直到它们匹配第三个。然后加上最低的3,依此类推。这意味着每一美元都将用于最佳投资

问题归根结底是要计算出你将要增加多少到这个水平,然后你将在每个水平上投入多少

假设bucket以
bucket=[400800100200]
开始,您有
1100
可以投资

首先,我们按数量排序
bucket=sorted[bucket]
得到
[100200400800]

接下来我们来看两两的差异<代码>[200-100400-200800-400]=[100200400]。这表示我们必须将桶增加多少

现在,我们将每一对差异乘以我们在该点填充的桶数,以获得达到这些阈值的美元价值<代码>[100*1200*2400*3]=[1004001200]

下一步,我们走来走去,看看我们装了多少,用了多少钱

start with 1100
bucket 1 cost us 100, 1000 left.
buckets 1,2 cost us 400, 600 left.
buckets 1,2,3 would cost us 1200 so we divide our remaining 600 3 ways for 200 in each.
我们将
200
添加到
400
桶中,
400
添加到
200
桶中,
500
添加到
100
桶中。总共花费了1100英镑


现在您只需编写代码即可。:-)

这听起来像是背包问题的变种嗯。。与此无关,几周前我偶然发现了这一点。我认为这已经足够不同了,但也许我会重新考虑一下,看看它是否适用。除非我算错了,你最好把250加100,300加200,325加400,225加800。@user3386109你是对的。我只关注增加的美元的回报,而不是已经花掉的美元的损失。@user3386109老实说,我会把它扔进去