V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lawsiki
V2EX  ›  算法

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

  •  
  •   lawsiki · 2019-10-30 15:48:43 +08:00 · 4132 次点击
    这是一个创建于 1851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    题目大致上是这样的:
    已知
    BTC - USDT 的汇率是 10000
    ETH - USDT 的汇率是 200
    ABC - USDT 的汇率是 2
    CNY - USDT 的汇率是 0.14

    求 BTC - ETH 的汇率?
    13 条回复    2019-10-30 21:08:29 +08:00
    qyvlik
        1
    qyvlik  
       2019-10-30 20:36:36 +08:00 via Android
    BTC-ETH,的计价币种是 ETH,所以(BTC-USDT)/(ETH-USDT)=50,意思是花 50ETH 可以买入 1BTC,1BTC 的价格是 50ETH。如果你问 BTC-ETH 的价格,反过来除就行了。
    lawsiki
        2
    lawsiki  
    OP
       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
        3
    qyvlik  
       2019-10-30 20:52:14 +08:00 via Android
    @lawsiki 你的意思是不知道如何写成代码?
    lawsiki
        4
    lawsiki  
    OP
       2019-10-30 20:53:15 +08:00
    @qyvlik #3 #3 是的
    qyvlik
        5
    qyvlik  
       2019-10-30 21:01:37 +08:00 via Android
    @lawsiki 再问一句,你是否需要针对这个问题的通用版本,也就是给定多个汇率,求任意折算汇率,写出通用代码?
    geelaw
        6
    geelaw  
       2019-10-30 21:03:06 +08:00 via iPhone   ❤️ 2
    如果 A-B 的汇率是 v,则建立 a->b 权为 log v 的边,以及 b->a 权为 -log v 的边。
    C-D 的汇率是 exp(C 到 D 的路径长度)。

    如果不存在路径,则说明条件无法决定目标汇率,如果存在多个不同长度,说明市场存在无风险套利(假设无摩擦)。
    sagaxu
        7
    sagaxu  
       2019-10-30 21:04:10 +08:00 via Android
    广度优先搜索
    lawsiki
        8
    lawsiki  
    OP
       2019-10-30 21:04:22 +08:00
    @qyvlik #5 #5 是的,给定任意两个货币,求折算汇率,当然如果给定的汇率表中没有关联关系的话可以返回 null
    lawsiki
        9
    lawsiki  
    OP
       2019-10-30 21:05:51 +08:00
    @geelaw #6 #6 感谢回复,大概了解了
    lawsiki
        10
    lawsiki  
    OP
       2019-10-30 21:06:02 +08:00
    @sagaxu #7 #7 感谢回复
    qyvlik
        11
    qyvlik  
       2019-10-30 21:06:15 +08:00 via Android
    @lawsiki 其他楼层给出答案了,折算汇率,用图+图的遍历可以做,例如 btc-eth 是边。btc 和 eth 是两个顶点。
    Building
        12
    Building  
       2019-10-30 21:07:59 +08:00 via iPhone
    a/b = k1, c/b = k2, a = b•k1, k3 = c/a = c/b•k1;
    lawsiki
        13
    lawsiki  
    OP
       2019-10-30 21:08:29 +08:00
    @qyvlik #11 #11 恩,了解了,感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2430 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.