algorithm - 可变金额的有效再分配

标签 algorithm

我遇到了这个问题,我得到了 n 个帐户,每个帐户都存储了用户净 Assets 的一定百分比。我必须将它从当前分布移动到用户输入的分布。为了真正转移资金,我调用了方法 moveMoney(initialAcct, finalAcct, amnt),我必须尽可能少地调用它。

这看起来像是一个经典的算法问题,但没有想到如何解决它。好像有点像打包优化,但是我好像搞不懂。

最佳答案

考虑何时至少有两种方法可以弥补任何一个帐户中的缺失金额,但选择一种方法比另一种方法更有好处。例如,

index:  0  1  2  3  4  5  6  7
input:  0  1  6  3  4  0  0  0
target: 7  0  0  0  0  1  1  5
needed: 7 -1 -6 -3 -4  1  1  5

如果我们选择用 (1, 6) 覆盖数量 7,我们得到

amount    index
     1 -> 0
     6 -> 0
     3 -> 5
     1 -> 6 // from index 5 to 6
     1 -> 7 // from index 5 to 7
     4 -> 7

6 次转移。

而如果我们选择用 (3, 4) 覆盖数量 7,我们得到

amount    index
     3 -> 0
     4 -> 0
     1 -> 5
     6 -> 6
     5 -> 7 // from index 6 to 7

5 次转移。

因此我们可以看到,对于任何一个状态,当我们转换到输出时,我们可能需要考虑所有可能的精确覆盖。在某种程度上,不同的超额会导致更多的州具有潜在的精确覆盖,即使是创建过渡性超额的选择也不能保证可以互换。

但有一件事是肯定的:我们希望将所有超额转为不足。

关于algorithm - 可变金额的有效再分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189929/

相关文章:

java - 如何在保持排序的同时将排序的链表插入另一个排序的链表?

algorithm - 这些算法的最佳和最坏情况分析是什么?

c# - 匹配大型文本数据集——如何更快地匹配?

algorithm - 合并两个完全二叉树的最大堆

algorithm - 如何从写成单词的数字中读取值?

algorithm - 检测给定图片是否为人脸的方法是什么?

algorithm - 计算顶点数的算法

algorithm - 为什么将 "Algorithms"和 "Data Structures"视为不同的学科?

c++ - STL:在海量数据中进行排序和搜索

algorithm - 找到矩阵运算的有效算法