Betrachten Sie zwei 2D-Arrays (das Kaufarray) und (das Verkaufsarray), wobei jedes -Element einem Array von Gleitkommawerten und jedem der Gleitkommawerte zugeordnet ist. ist wiederum einem Array von ganzen Zahlen zugeordnet.
Zum Beispiel
B = [
0001 => [ 32.5 => {10, 15, 20},
45.2 => {48, 16, 19},
...,
k1
],
0002 => [ 35.6 => {17, 35, 89},
68.7 => {18, 43, 74},
...,
k2
]
]
und ähnlich für das Verkaufsarray.
Dies ähnelt einem Auftragsassoziationssystem einer Börse
BuyOrderBook = [
CompanyName => [
Price1 => [Qty1, Qty2...],
Price2 => [Qty1, Qty2...]
]
SecondCompany = [...]
]
Was ist der schnellste bekannte Weg, um das folgende Problem zu lösen:
Eingabe: Array kaufen , Array verkaufen Problem: Entscheide, ob es und mit und .
Kurz gesagt, was ist der fetteste Weg, um Bestellungen für einen Umtausch abzugleichen?
Update als Antwort auf Kommentare
Nehmen wir an, MSFT hat 25 Aktien zu einem Preis von 60 USD zu verkaufen, und es gibt einen Käufer, der bereit ist, 61 USD für 10 Aktien von MSFT anzubieten. Dann erhält der Käufer 10 Aktien zu 60 USD und das Kaufauftragsbuch wird leer, während das Verkaufsauftragsbuch jetzt mit einer neuen Menge aktualisiert wird - 15 Aktien zu 60 USD .
Nehmen wir nun den umgekehrten Fall: MSFT hat 25 Aktien zu einem Preis von 60 USD zu kaufen, und es gibt einen Verkäufer, der bereit ist, 61 USD für 10 Aktien von MSFT zu erhalten. Dann wird der Handel nicht ausgeführt, da der Verkäufer ein Minimum von 61 USD verlangt und der Käufer ein Maximum von 60 USD anbietet . Die Bestellungen werden nun gespeichert und warten, bis neue Bestellungen eingehen.
(Dies ist das Limit-Order-Prinzip , bei dem der Verkäufer den Mindestpreis angibt, zu dem er zu verkaufen bereit ist, und der Käufer den Höchstpreis angibt, zu dem er zu kaufen bereit ist.)
Nach der Ausführung ist das Verkaufsauftragsbuch (25-10)[email protected], während das Kaufauftragsbuch leer ist (10-10) = 0.
quelle
Antworten:
Pflegen Sie Ihr Bestellbuch als eine Reihe von Unternehmen. Halten Sie für jedes Unternehmen eine Prioritätswarteschlange mit Preisen (max für Kauf und min für Verkauf). Halten Sie für jeden Preis eine Warteschlange mit Bestellungen.
Um zu überprüfen , für passende Aufträge, für jedes Unternehmen, Anruf
find-min()
undfind-max()
auf dem Unternehmen in den Sell - Array und kaufen Array die besten Kauf- / Verkaufspreise zu finden. Wenn max> min, versuchen Sie, die Bestellung zu erfüllen. Um die Bestellung zu erfüllen, ziehen Sie Elemente aus Ihren Kauf- und Verkaufswarteschlangen für dieses Unternehmen und diesen Preis, bis eine Ihrer Preiswarteschlangen leer ist. Wenn die Preiswarteschlange leer ist, löschen Sie das entsprechende Element aus der Prioritätswarteschlange und führen Sie die Prüfung erneut durch.quelle