这是一个几乎与语言无关的问题,而不是家庭作业。理想情况下,我会使用 C# 和/或 SQL 服务器作为解决方案。
假设我有一个函数GetExchangeRate(buyCurrency, sellCurrency)
。所以,如果 1 GBP 值 1.6 USD,那么GetExchangeRate('GBP', 'USD') = 1.6
和GetExchangeRate('USD', 'GBP') = 0.625
。
系统中的订单将表示为以下三元组:(buyCurrency, SellCurrency, buyCurrencyAmount)
。因此,('GBP', 'USD', 125.00) 表示用多少美元买入 125 GBP。
我的目标是节省交易成本并取消订单,包括传递性。对同一对货币之间的买入和卖出进行净额计算很容易,也很容易证明是合理的。假设我可能有商业原因来简化订单,我用美元购买英镑,并用英镑购买欧元,等等......
我想传递地简化这组命令。我正在考虑构建一个图形数据结构(节点是货币,边是 buyCurrencyAmounts),即使数据将存储在 SQL 表中,并对此应用正确的算法。我想先做一个简单的网络,然后在 DAG 上进行拓扑排序,然后从顶部开始,然后按拓扑顺序走并“挤压”订单,例如简化它们。
问题是我不一定会有 DAG。但是,我可能会在执行算法时简化图形结构,无论是哪一种。
我应该为此使用什么正确的数据结构/算法?我应该担心由此产生的精度吗?有没有一些好的方法可以让我不损失美分?你能推荐一个可以处理这个问题的好 C# 库吗?仅使用 SQL Server 2008 尝试此操作会是疯狂/低效/太多工作吗?
编辑:为交易支付的费用都包含在价格(汇率)中。没有固定的固定费用或类似的东西。