La forma más eficiente de hacer coincidir los pedidos

8

Considere dos 2D-Array (la matriz de compra) y (la matriz de venta) donde cada elemento está asociado con una matriz de valores de coma flotante y cada uno de los valores de coma flotante, a su vez, está asociado con una matriz de enteros.BijSijith

Por ejemplo

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
          ] 
] 

y de manera similar para la matriz de venta.

Esto es similar a un sistema de asociación de pedidos de una bolsa de valores

BuyOrderBook = [
                 CompanyName => [
                                 Price1 => [Qty1, Qty2...],
                                 Price2 => [Qty1, Qty2...]
                                ]
                 SecondCompany = [...]
               ]

¿Cuál es la forma más rápida conocida para resolver el siguiente problema:

Entrada: Comprar matriz , Vender matriz Problema: Decidir si hay y con y .BS
(c1p1q1)B(c2p2q2)Sq1,q2>0p2p1

En resumen, ¿cuál es la mejor manera de hacer coincidir las órdenes de un intercambio?

Actualización en respuesta a comentarios

Digamos que MSFT tiene 25 acciones a $ 60 para vender y hay un comprador que está dispuesto a ofrecer $ 61 por 10 acciones de MSFT. Luego, el comprador obtiene 10 acciones a $ 60 y el libro de órdenes de compra se vacía, mientras que el libro de órdenes de venta ahora se actualiza con una nueva cantidad: 15 acciones a $ 60.

Ahora tome el caso inverso, MSFT tiene 25 acciones a $ 60 para comprar y hay un vendedor que está dispuesto a recibir $ 61 por 10 acciones de MSFT. Entonces, el intercambio no se ejecutará porque el vendedor exige un mínimo de $ 61 y el comprador ofrece un máximo de $ 60. Los pedidos ahora se almacenan y esperan hasta que se reciban nuevos pedidos.

(Este es el principio de orden límite , donde el vendedor especifica el precio mínimo al que está dispuesto a vender y el comprador especifica el precio máximo al que está dispuesto a comprar).

Después de la ejecución, el libro de órdenes de venta será (25-10)[email protected] mientras que el libro de órdenes de compra estará vacío (10-10) = 0.

check123
fuente
Yo edité mucho; compruebe que el significado sigue siendo el que pretendía. ¿Es "apilar" realmente la palabra que quieres usar aquí? Supongo que la estructura de datos no es una pila, ¿es una expresión de dominio? En cuanto a la pregunta, tenga en cuenta que el problema de decisión que plantea y encontrar todas las coincidencias no es necesariamente igual de difícil; en particular, los emparejamientos pueden entrar en conflicto.
Raphael
@Raphael Hizo un pequeño cambio en la declaración del problema con respecto a . La estructura es una pila en la que los nuevos pedidos se 'insertan' en el libro de pedidos. Sin embargo, la asociación entre empresa, precio y cantidad es importante. Modifique la estructura según sea necesario. q1,q2
check123
@Raphael 'Las coincidencias pueden entrar en conflicto' ¿Un ejemplo?
check123
1) Las pilas normalmente no permiten acceder a ningún elemento que no sea el elemento superior. Quieres acceso aleatorio, ¿verdad? 2) Puede haber dos órdenes de compra que se ajusten a la misma orden de venta, pero ambas no pueden satisfacerse.
Raphael
@Raphael 1) ¡Oh! Sí, puede ser Array es una mejor palabra 2) Si hay conflictos de coincidencia, se resuelven según el principio FIFO, el orden anterior obtiene preferencia (la mayoría de los intercambios siguen este principio)
verifique el

Respuestas:

5

Mantenga su libro de órdenes de compra como una variedad de compañías. Para cada empresa, mantenga una cola de precios prioritaria (máximo para comprar y mínimo para vender). Para cada precio, mantenga una cola de pedidos.

Para verificar las órdenes coincidentes, para cada compañía, llame find-min()y find-max()en la compañía en la matriz de venta y matriz de compra para encontrar los mejores precios de compra / venta. Si max> min, intente completar el pedido. Para completar el pedido, extraiga elementos de sus colas de compra y venta para esa compañía y precio, hasta que una de sus colas de precios esté vacía. Cuando la cola de precios esté vacía, elimine el elemento correspondiente de su cola de prioridad y vuelva a realizar la verificación.

Esta estrategia cuesta tiempo constante por pedido y por cambio de precio, donde es el número de precios para la empresa .O(logpi)pii

Joe
fuente