货币兑换Altorithm(安卓系统/Java/伪代码)



我很难找到一个好的外汇问题解决方案。我花了一整天的时间思考这个问题,为所有情况提供任何优雅快速的解决方案。

声明:

我们有一些汇率,比如。。。

  • 欧元兑美元->1.37
  • 美元兑澳元->0.7
  • MEX到CAD->1.8
  • LIB到YEN->2.3
  • (…..)

这个利率不是真实的,每天可能会改变一次。利率的数量可能与世界上的货币一样多(约150)。

我们被要求将一笔钱从任何货币兑换成另一种货币,考虑到汇率,我们应该给出答案(如果可以的话)。

最好的情况是,如果你是直接兑换(出现在列表中),在更坏的情况下,你应该以中间汇率跳很多次。

注:假设欧元兑美元,你可以假设美元兑美元是相反的。

我希望问题是清楚的。

有什么想法吗??

构造一个加权有向图,每个顶点都标有货币名称。如果您有货币a对B的汇率,请添加一个以汇率为权重的边(a,B)。

如果有一条(A,B)边,但没有(B,A)边,则添加权重为1的(B,A.)边除以(A,B.)权重。

为了将货币C转换为D,应用最短路径算法来找到从C的顶点到D的顶点的最低权重路径。如果没有这样的路径,则无法进行转换。请参见具有非负权重的有向图。

====================================================

这不一定能找到最佳汇率,因为汇率会成倍增加。可以通过使用汇率对数作为边缘权重,并使用可以处理负边缘权重的最短路径算法来找到最佳汇率。

要找到交换最少的交换路径,请为与直接交换匹配的每条边赋予权重1。

我基本上同意Patricia的观点。但这个问题肯定也与避免套利有关。因此,它可以归结为从货币a到货币B的"最短路径"(最低成本)。最短路径算法得到了充分的研究和记录。看看他们穿着cormen和rivest。

最新更新