货币转换算法

时间:2017-04-02 20:30:10

标签: java algorithm

假设我只跟随对:

[
  {
    "from": "AUD",
    "rate": "0.5",
    "to": "USD"
  },
  {
    "from": "USD",
    "rate": "0.5",
    "to": "EUR"
  },
  {
    "from": "EUR",
    "rate": "0.5",
    "to": "GBP"
  },
  {
    "from": "GBP",
    "rate": "2",
    "to": "EUR"
  },
  {
    "from": "EUR",
    "rate": "2",
    "to": "USD"
  },
  {
    "from": "USD",
    "rate": "2",
    "to": "AUD"
  }
]

我需要将澳元兑换成英镑。 算法应该找到使用现有对的路径:AUD - >美元 - > EUR - > GBP。

在查看这个问题后,我认为它可以通过递归来解决,但仍然没有找到正确的方法来做到这一点。 在这种情况下,我应该从GBP开始向后看吗? 或者不需要递归,我可以向后迭代并向堆栈添加值,而我却找不到合适的值?

1 个答案:

答案 0 :(得分:1)

这是depth-first searchbreadth-first search的工作。你不需要需要递归,但你可以根据需要使用它 - 深度优先搜索使用堆栈,递归将是一种使用调用堆栈的方式。请注意,广度优先搜索会为您提供最短转换路径。深度优先搜索可能不会。

无论您选择哪种搜索策略,您都将根据可用的转化数量建立从货币到货币的可能路径。向路径添加其他转换步骤时,请确保将转化过滤为之前在路径中使用过的货币,这样就不会在路径中获得循环。 (例如,转换USD-> EUR-> USD-> EUR->等会让深度优先搜索永久停滞。)

您可以从任何一种货币开始,向两个方向工作;你会找到一个有效的路径以太途径。