我的Java程序中有不同的金融资产对,例如EURUSD
,EURGBP
,EURCHF
等......
更具体地说,这些是我拥有的对:
EURUSD, EURGBP, EURCHF, XAUUSD, XAUXAG, XAGUSD
XAGNZD, AUDCHF, AUDHKD, CADHKD, CADSGD, NZDCAD
SGDHKD
我需要为列表中没有的对找到最短的转换链。
例如,如果我需要将EUR
转换为NZD
(因此我需要EURNZD
对),因为您可以看到我的列表中没有{。} / p>
要进行此转换,我可以使用以下两个转换链(甚至不仅仅是这两个转换链):
chain1: EURUSD->USDXAU->XAUXAG->XAGNZD
chain2: EURUSD->USDCHF->CHFAUD->AUDHKD->HKDCAD->CADNZD
所以,在这两个转换链中,我会选择数字1,它是可用的最短的。
我的问题是,你能建议找到最短路径的最佳算法吗?你能否建议一个假代码呢?
感谢
答案 0 :(得分:1)
图表上的标准Breadth First Search可以执行此操作,使用货币作为节点并在您可以在它们之间执行转换时连接两个节点(当然它将是无向图)。
上面我喜欢的维基百科页面中的伪代码是
1 procedure BFS(G,v) is
2 create a queue Q
3 create a vector set V
4 enqueue v onto Q
5 add v to V
6 while Q is not empty loop
7 t ← Q.dequeue()
8 if t is what we are looking for then
9 return t
10 end if
11 for all edges e in G.adjacentEdges(t) loop
12 u ← G.adjacentVertex(t,e)
13 if u is not in V then
14 add u to V
15 enqueue u onto Q
16 end if
17 end loop
18 end loop
19 return none
20 end BFS
其中G是图表,v是您开始的节点(在您的示例中为EUR)。在将其添加到Q(第15行)时,您应该稍微修改它以跟踪先前访问过的节点,以便在找到目标节点时可以重建路径(第9行)。