Cara tahu paling efisien untuk mencocokkan pesanan

8

Pertimbangkan dua 2D-Array Bij (array beli) dan Sij (array jual) di mana masing-masing ith elemen dikaitkan dengan array nilai floating-point dan masing-masing nilai floating point, pada gilirannya, dikaitkan dengan array bilangan bulat.

Sebagai contoh

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

dan serupa untuk larik jual.

Ini mirip dengan sistem asosiasi pesanan dari pertukaran saham / komoditas

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

Apa cara tercepat yang diketahui untuk memecahkan masalah berikut:

Input: Beli larikB, Jual array S
Masalah: Putuskan apakah ada(c1p1q1)B dan (c2p2q2)S dengan q1,q2>0 dan p2p1.

Singkatnya, apa cara paling gemuk untuk mencocokkan pesanan untuk pertukaran?

Perbarui dalam menanggapi komentar

Katakanlah, MSFT memiliki 25 saham @ $ 60 untuk dijual dan ada pembeli yang bersedia menawarkan $ 61 untuk 10 saham MSFT. Kemudian pembeli mendapat 10 saham @ $ 60 dan buku pesanan pembelian menjadi kosong sementara buku pesanan jual sekarang diperbarui dengan jumlah baru - 15 saham @ $ 60.

Sekarang ambil kasus sebaliknya, MSFT memiliki 25 saham @ $ 60 untuk dibeli dan ada penjual yang bersedia menerima $ 61 untuk 10 saham MSFT. Maka perdagangan tidak akan dieksekusi karena penjual menuntut minimal $ 61 dan pembeli menawarkan maksimum $ 60. Pesanan sekarang disimpan dan menunggu hingga pesanan baru diterima.

(Ini adalah prinsip limit order , di mana penjual menentukan harga minimum di mana dia bersedia untuk menjual dan pembeli menentukan harga maksimum di mana dia bersedia untuk membeli).

Pasca eksekusi, buku pesanan jual akan (25-10 )[email protected] sementara buku pesanan beli akan kosong (10-10) = 0.

periksa123
sumber
Saya banyak mengedit; harap periksa bahwa artinya masih seperti yang Anda maksudkan. Apakah "tumpukan" benar-benar kata yang ingin Anda gunakan di sini? Saya kira struktur data bukan tumpukan, jadi apakah itu ekspresi domain? Sedangkan untuk pertanyaan, perhatikan bahwa masalah keputusan yang Anda nyatakan dan menemukan semua kecocokan tidak selalu sama sulitnya; khususnya, kecocokan mungkin bertentangan.
Raphael
@ Raphael Membuat perubahan kecil dalam pernyataan masalah sehubungan dengan q1,q2. Strukturnya adalah tumpukan di mana pesanan baru 'didorong' ke buku pesanan. Namun, hubungan antara perusahaan, harga dan kuantitas penting. Ubah struktur sesuai kebutuhan.
check123
@Raphael 'Kecocokan dapat bertentangan' Sebagai contoh?
check123
1) Tumpukan biasanya tidak memungkinkan untuk mengakses apapun kecuali elemen paling atas. Anda ingin akses acak, bukan? 2) Mungkin ada dua pesanan beli yang keduanya cocok dengan pesanan jual yang sama tetapi tidak bisa keduanya dipenuhi.
Raphael
@ Raphael 1) Oh! Ya, boleh jadi Array adalah kata yang lebih baik 2) Jika ada konflik kecocokan, mereka diselesaikan berdasarkan prinsip FIFO, urutan yang lama mendapatkan preferensi (Sebagian besar bursa mengikuti prinsip ini)
check123

Jawaban:

5

Pertahankan buku pesanan beli Anda sebagai berbagai perusahaan. Untuk setiap perusahaan, pertahankan antrian harga yang diprioritaskan (maks untuk pembelian dan min untuk dijual). Untuk setiap harga, simpan antrean pesanan.

Untuk memeriksa pesanan yang cocok, untuk masing-masing perusahaan, hubungi find-min()dan find-max()pada perusahaan dalam larik jual dan larik beli untuk menemukan harga beli / jual terbaik. Jika maks> min, maka cobalah memenuhi pesanan. Untuk memenuhi pesanan, tarik elemen dari antrian beli dan jual untuk perusahaan dan harga itu, sampai salah satu antrian harga Anda kosong. Ketika antrian harga kosong, hapus elemen yang sesuai dari antrian prioritasnya, dan lakukan pemeriksaan lagi.

Strategi ini membutuhkan waktu yang konstan per pesanan, dan O(logpi) per perubahan harga, di mana pi adalah jumlah harga untuk perusahaan i.

Joe
sumber