algorithm - 根据需要转移值(value)的算法[保留]

标签 algorithm go ethereum

我需要一个算法,以最佳转移价值的基础上,需要的数额到其他帐户。例如,考虑到下面的帐户,什么是算法/psuedocode,可以在不导致正帐户不足的情况下,将有多余帐户的值转移到有不足帐户?
Account1 Balance: 0 Needed:.17853 Account2 Balance: 0 Needed:.1789524 Account3 Balance: 0.296 Needed:.4278 Account4 Balance: 0 Needed:.50231 Account5 Balance: 0.1 Needed:.17853 Account6 Balance: 0 Needed:.89 Account7 Balance: 4.0 Needed:0 Account8 Balance: 1.2447183721375 Needed:.894762

最佳答案

现在我假设你不需要知道钱从哪里来。(我们可以稍后处理)可以使用两个for循环:
第一个循环)遍历所有元素并收集多余的值。在您的示例中,这将导致帐户7的4个超额和帐户8的~0.3个超额,总计为4.3。
第二个循环)查看每个有缺陷的账户,从当前的超额价值中给出它所需要的,然后更新超额价值。在您的示例中,当您看到Account1需要.17时,您会给它那么多,然后将可用的超额部分从4.3更新到4.3-0.17=4.13。直到最后一个元素。
如果您想知道是谁解决了不足,那么在步骤1中,您应该收集一个具有超额价值的帐户列表,并在步骤2中更新该列表,而不是保留一个和并更新它。
同样,在您的情况下,列表将类似于(account 7,4.0)->(account 8,0.3),并且在尽可能长的时间使用account 7的步骤中,当它用完时,您将转到account 8。
时间复杂度为o(n)且为最优。

关于algorithm - 根据需要转移值(value)的算法[保留],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58018401/

相关文章:

Python Wordle : determine if a given string matches to a correct anagram based on position score

python - Elasticsearch - field_value_factor,缺少参数

c++ - go 等价于 c 类型

ethereum - 如何将空字节传递给 Remix 中的 solidity 函数?

c++ - 使用 "Sort K number of elements based array"算法的数组中的第 K 个最大数

python - 有没有办法在 python 中使用 opencv 获得更清晰和连续的边缘?

string - 使用 slice 值的 Golang 字符串格式

javascript - 在 Javascript 中延迟用户的最佳方法

ethereum - 成员相等在类型中不可用(库断言)

C++ "group where"算法