一道汇率换算的算法题求解

2019-10-30 15:48:43 +08:00
 lawsiki
题目大致上是这样的:
已知
BTC - USDT 的汇率是 10000
ETH - USDT 的汇率是 200
ABC - USDT 的汇率是 2
CNY - USDT 的汇率是 0.14

求 BTC - ETH 的汇率?
4028 次点击
所在节点    算法
13 条回复
qyvlik
2019-10-30 20:36:36 +08:00
BTC-ETH,的计价币种是 ETH,所以(BTC-USDT)/(ETH-USDT)=50,意思是花 50ETH 可以买入 1BTC,1BTC 的价格是 50ETH。如果你问 BTC-ETH 的价格,反过来除就行了。
lawsiki
2019-10-30 20:43:57 +08:00
@qyvlik #1 #1 抱歉、忽略了一个东西,还有一个汇率是 DEF_ABC:7,求 DEF -- CNY 的汇率,大致算法我知道,通过 DEF_ABC 和 ABC_USDT 得到 DEF_USDT 的汇率是 14,再通过 CNY_USDT 的汇率得到 DEF_CNY 的汇率是 100,但是具体实现方式不知道怎么写。。
qyvlik
2019-10-30 20:52:14 +08:00
@lawsiki 你的意思是不知道如何写成代码?
lawsiki
2019-10-30 20:53:15 +08:00
@qyvlik #3 #3 是的
qyvlik
2019-10-30 21:01:37 +08:00
@lawsiki 再问一句,你是否需要针对这个问题的通用版本,也就是给定多个汇率,求任意折算汇率,写出通用代码?
geelaw
2019-10-30 21:03:06 +08:00
如果 A-B 的汇率是 v,则建立 a->b 权为 log v 的边,以及 b->a 权为 -log v 的边。
C-D 的汇率是 exp(C 到 D 的路径长度)。

如果不存在路径,则说明条件无法决定目标汇率,如果存在多个不同长度,说明市场存在无风险套利(假设无摩擦)。
sagaxu
2019-10-30 21:04:10 +08:00
广度优先搜索
lawsiki
2019-10-30 21:04:22 +08:00
@qyvlik #5 #5 是的,给定任意两个货币,求折算汇率,当然如果给定的汇率表中没有关联关系的话可以返回 null
lawsiki
2019-10-30 21:05:51 +08:00
@geelaw #6 #6 感谢回复,大概了解了
lawsiki
2019-10-30 21:06:02 +08:00
@sagaxu #7 #7 感谢回复
qyvlik
2019-10-30 21:06:15 +08:00
@lawsiki 其他楼层给出答案了,折算汇率,用图+图的遍历可以做,例如 btc-eth 是边。btc 和 eth 是两个顶点。
Building
2019-10-30 21:07:59 +08:00
a/b = k1, c/b = k2, a = b•k1, k3 = c/a = c/b•k1;
lawsiki
2019-10-30 21:08:29 +08:00
@qyvlik #11 #11 恩,了解了,感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/614505

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX