Pertimbangkan dua 2D-Array (array beli) dan (array jual) di mana masing-masing 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 larik, Jual array
Masalah: Putuskan apakah ada dan dengan dan .
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.
sumber
Jawaban:
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()
danfind-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, danO(logpi) per perubahan harga, di mana pi adalah jumlah harga untuk perusahaan i .
sumber