我正在建立一個市場,並且我想爲市場參與者訂單建立一個匹配機制。結算訂單的最佳算法
比如我收到這些命令:
A buys 50
B buys 100
C sells 50
D sells 20
可以表示爲List<Orders>
,其中Order
是Participant
,BuySell
一類,並Amount
我想創建一個Match
功能,輸出2件東西:
- 一套unmatche d訂單(
List<Order>
) - 一組匹配的訂單(
List<MatchedOrder>
其中MatchOrder
具有Buyer
,Seller
,Amount
的約束的是最小化的訂單數(不匹配和匹配),而不會留下任何可能的匹配而復(即,最終只能有購買或出售所無法比擬的訂單)
所以在結果上面的例子是:
A buys 50 from C
B buys 20 from D
B buys 80 (outstanding)
這似乎是一個相當複雜的算法,但在實踐中很常見。任何指向哪裏看?
你可能想考慮網絡流算法 – Mox
@Mox:謝謝我來看看。乍看之下,雖然流程算法似乎正在解決我試圖解決的一個非常普遍的問題。 –
您是否被要求遵守先入先出的原則?如果不是,那麼這意味着另一個到達的訂單可以任意地改變先前買入和賣出訂單的匹配,例如,以前與賣單相匹配的買單現在恢復爲未平倉。 –