Algorithm 将一种资产转换为另一种资产的最佳算法
我的Java程序中有不同的金融资产对,如Algorithm 将一种资产转换为另一种资产的最佳算法,algorithm,graph-algorithm,shortest-path,Algorithm,Graph Algorithm,Shortest Path,我的Java程序中有不同的金融资产对,如欧元兑美元,欧元兑英镑,欧元兑瑞士法郎等 更具体地说,我有以下几对: EURUSD, EURGBP, EURCHF, XAUUSD, XAUXAG, XAGUSD XAGNZD, AUDCHF, AUDHKD, CADHKD, CADSGD, NZDCAD SGDHKD 我需要为列表中不可用的配对找到最短的转换链 例如,如果我需要将EUR转换为NZD(因此我需要EURNZD对),您可以看到它不在我的列表中 要进行此转换,我可以使用以下两个转换链(甚
欧元兑美元
,欧元兑英镑
,欧元兑瑞士法郎
等
更具体地说,我有以下几对:
EURUSD, EURGBP, EURCHF, XAUUSD, XAUXAG, XAGUSD
XAGNZD, AUDCHF, AUDHKD, CADHKD, CADSGD, NZDCAD
SGDHKD
我需要为列表中不可用的配对找到最短的转换链
例如,如果我需要将EUR
转换为NZD
(因此我需要EURNZD
对),您可以看到它不在我的列表中
要进行此转换,我可以使用以下两个转换链(甚至不止这两个):
因此,在这两个转换链中,我会选择数字1,它是可用转换链中最短的
我的问题是,你能不能提出一个找到这条最短路径的最佳算法?你能推荐一个伪代码吗
感谢图形上的标准可以做到这一点,使用货币作为节点,并在可以在它们之间执行转换时连接两个节点(当然这将是一个无向图形)
上面我喜欢的维基百科页面上的伪代码是
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行)时可以重建路径。您认为这个节点的计算成本较低吗?我的意思主要是指所需的IStruction数量,其次是内存使用。我认为一些巧妙的矩阵技巧或类似的技巧可能会更有效,但您可能会有一个小的图形,因此不会有什么大不了的(我想,在不知道项目其余部分的情况下)
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