Maneira mais eficiente de atender pedidos


8

Considere duas 2D (a matriz de compra) e (a matriz de venda) em que cada elemento está associado a uma matriz de valores de ponto flutuante e a cada valor de ponto flutuante, por sua vez, está associado a uma matriz de números inteiros.BijSijith

Por exemplo

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 similarmente para a matriz de venda.

Isso é semelhante a um sistema de associação de pedidos de uma bolsa de valores / mercadorias

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

Qual é a maneira mais rápida conhecida de resolver o seguinte problema:

Entrada: Comprar série , array Sell Problema: Decida wether existem e com e .BS
(c1p1q1)B(c2p2q2)Sq1,q2>0p2p1

Em resumo, qual é a maneira mais complicada de corresponder aos pedidos de uma troca?

Atualização em resposta a comentários

Vamos dizer que a MSFT tem 25 ações a US $ 60 a serem vendidas e existe um comprador que está disposto a oferecer US $ 61 por 10 ações da MSFT. Em seguida, o comprador recebe 10 compartilhamentos a $ 60 e o livro de pedidos de compra fica vazio enquanto o livro de pedidos de venda agora é atualizado com nova quantidade - 15 compartilhamentos a $ 60.

Agora, pelo contrário, a MSFT tem 25 ações a $ 60 a serem compradas e há um vendedor disposto a receber $ 61 por 10 ações da MSFT. A negociação não será executada porque o vendedor está exigindo um mínimo de US $ 61 e o comprador está oferecendo um máximo de US $ 60. Os pedidos agora são armazenados e aguardam até que novos pedidos sejam recebidos.

(Esse é o princípio da ordem limite , em que o vendedor especifica o preço mínimo pelo qual está disposto a vender e o comprador especifica o preço máximo pelo qual está disposto a comprar).

Após a execução, o livro de pedidos de venda será (25-10)=15@86.5 enquanto o livro de pedidos de compras estará vazio (10-10) = 0.


Eu editei pesadamente; verifique se o significado ainda é o que você pretendia. "Pilha" é realmente a palavra que você deseja usar aqui? Eu acho que a estrutura de dados não é uma pilha, então é uma expressão de domínio? Quanto à pergunta, observe que o problema de decisão que você declara e encontrar todas as correspondências não são necessariamente igualmente difíceis; em particular, as correspondências podem entrar em conflito.
Raphael

@ Rafael fez uma pequena alteração na declaração do problema em relação a . A estrutura é uma pilha em que novos pedidos são 'empurrados' para o livro de pedidos. No entanto, a associação entre empresa, preço e quantidade é importante. Modifique a estrutura conforme necessário. q1,q2
precisa

@Raphael 'Correspondências podem entrar em conflito' Um exemplo?
precisa

1) Normalmente, as pilhas não permitem acessar nada além do elemento mais alto. Você quer acesso aleatório, certo? 2) Pode haver duas ordens de compra que se encaixam na mesma ordem de venda, mas que não podem ser atendidas.
Raphael

@Raphael 1) Oh! Sim pode ser Array é uma palavra melhor 2) Se houver conflitos jogo eles são resolvidos com base no princípio FIFO a ordem mais velho fica preferência (A maioria das bolsas seguir este princípio)
check123

Respostas:


5

Mantenha seu livro de pedidos de compra como uma variedade de empresas. Para cada empresa, mantenha uma fila de preços prioritária (máx. Para compra e mín. Para venda). Para cada preço, mantenha uma fila de pedidos.

Para verificar se há ordens correspondentes, para cada empresa, chamada find-min()e find-max()sobre a empresa na matriz vender e comprar matriz para encontrar os melhores preços de compra / venda. Se max> min, tente atender o pedido. Para atender ao pedido, retire os elementos de suas filas de compra e venda para essa empresa e preço, até que uma das filas de preços esteja vazia. Quando a fila de preços estiver vazia, exclua o elemento correspondente da fila de prioridade e execute a verificação novamente.

Essa estratégia custa tempo constante por pedido e por alteração de preço, em que é o número de preços da empresa .O(logpi)pii

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.