Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将一种资产转换为另一种资产的最佳算法_Algorithm_Graph Algorithm_Shortest Path - Fatal编程技术网

Algorithm 将一种资产转换为另一种资产的最佳算法

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对),您可以看到它不在我的列表中 要进行此转换,我可以使用以下两个转换链(甚

我的Java程序中有不同的金融资产对,如
欧元兑美元
欧元兑英镑
欧元兑瑞士法郎

更具体地说,我有以下几对:

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