Prendi in considerazione due array 2D (l'array di acquisto) e (l'array di vendita) dove ciascuno L'elemento è associato a una matrice di valori in virgola mobile e ciascuno dei valori in virgola mobile, a sua volta, è associato a una matrice di numeri interi.
Per esempio
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
]
]
e in modo simile per l'array sell.
Questo è simile a un sistema di associazione ordini di uno scambio di azioni / merci
BuyOrderBook = [
CompanyName => [
Price1 => [Qty1, Qty2...],
Price2 => [Qty1, Qty2...]
]
SecondCompany = [...]
]
Qual è il modo più veloce noto per risolvere il seguente problema:
Input: Acquista array, Vendi array
Problema: decidere se ci sono e con e .
In breve, qual è il modo più difficile di abbinare gli ordini per uno scambio?
Aggiornamento in risposta ai commenti
Diciamo, MSFT ha 25 azioni @ $ 60 da vendere e c'è un acquirente che è disposto a offrire $ 61 per 10 azioni di MSFT. Quindi l'acquirente ottiene 10 azioni a $ 60 e il book degli ordini di acquisto si svuota mentre il book degli ordini di vendita ora viene aggiornato con una nuova quantità: 15 azioni a $ 60.
Ora prendi il caso contrario, MSFT ha 25 azioni da $ 60 da acquistare e c'è un venditore che è disposto a ricevere $ 61 per 10 azioni di MSFT. Quindi lo scambio non verrà eseguito perché il venditore richiede un minimo di $ 61 e l'acquirente offre un massimo di $ 60. Gli ordini vengono ora archiviati e attendono fino alla ricezione di nuovi ordini.
(Questo è il principio dell'ordine limite , in cui il venditore specifica il prezzo minimo al quale è disposto a vendere e l'acquirente specifica il prezzo massimo al quale è disposto ad acquistare).
Dopo l'esecuzione, il registro ordini di vendita sarà (25-10 )=15@86.5 mentre il portafoglio ordini di acquisto sarà vuoto (10-10) = 0.