License: arXiv.org perpetual non-exclusive license
arXiv:2403.03046v1 [cs.DS] 05 Mar 2024

The Exchange Problem

Mohit Garg  and Suneel Sarswat Indian Institute of Science, Bengaluru, India. [email protected]. Supported by a Walmart fellowship.Tata Institute of Fundamental Research, Mumbai, India. [email protected].
Abstract

Auctions are widely used in exchanges to match buy and sell requests. Once the buyers and sellers place their requests, the exchange determines how these requests are to be matched. The two most popular objectives used while determining the matching are maximizing volume at a uniform price and maximizing volume with dynamic pricing. In this work, we study the algorithmic complexity of the problems arising from these matching tasks.

We present a linear time algorithm for uniform price matching which is an improvement over the previous algorithms that take O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time to match n𝑛nitalic_n requests. For dynamic price matching, we establish a lower bound of Ω(nlogn)Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) on the running time, thereby proving that the currently known best algorithm is time-optimal.

Key words:

Call Auctions, Matching Algorithms, Element Distinctness, Time Complexity.

1 Introduction

We study problems of the following nature: The input is a list of trade requests from buyers and sellers of a particular product. Each request consists of a price and a quantity. The buyer’s request, known as a bid, is represented by a pair (p,q)𝑝𝑞(p,q)( italic_p , italic_q ), which indicates that the buyer offers to buy a maximum of q𝑞qitalic_q units of the product while paying at most p𝑝pitalic_p per unit. Similarly, a seller’s request, known as an ask, is also a pair (p,q)𝑝𝑞(p,q)( italic_p , italic_q ), which indicates that the seller offers to sell a maximum of q𝑞qitalic_q units of the product provided they receive at least p𝑝pitalic_p per unit. On receiving the input, we are required to generate a matching, which is a collection of transactions.111We use the term matching, which has been traditionally used for this object in the auction theory literature [NP13, ZZKP10, WWW98, NSS21], while a term like flow might be more suitable for a computer science audience. A transaction between a bid (pb,qb)subscript𝑝𝑏subscript𝑞𝑏(p_{b},q_{b})( italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ) and an ask (pa,qa)subscript𝑝𝑎subscript𝑞𝑎(p_{a},q_{a})( italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT ) consists of a transaction price p[pa,pb]𝑝subscript𝑝𝑎subscript𝑝𝑏p\in[p_{a},p_{b}]italic_p ∈ [ italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ] and a transaction quantity qmin{qb,qa}𝑞subscript𝑞𝑏subscript𝑞𝑎q\leq\min\{q_{b},q_{a}\}italic_q ≤ roman_min { italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT }, indicating that q𝑞qitalic_q units of the product change hands between the traders at price p𝑝pitalic_p per unit. For each trade request (p,q)𝑝𝑞(p,q)( italic_p , italic_q ), the sum of the total transaction quantities of the transactions involving the request must be at most q𝑞qitalic_q. The volume of the matching is the total quantity that changes hands. The matching is uniform if all transactions occur at a common price. We consider the following two tasks.

Task 1:

Determine a matching with the largest volume.

Task 2:

Determine a uniform matching with the largest volume.

The first task can be solved by formulating it as a max-flow problem. However, due to the underlying problem structure, simpler solutions are available for these tasks. In fact, two simple and almost identical algorithms can be used for these tasks. We describe them below.

Algorithms:

These algorithms start with sorting the list of bids in decreasing order of their prices. Next, the list of asks is sorted. For the first task, the sell requests are sorted in decreasing order of their prices. Whereas, for the second task, the sell requests are sorted in increasing order of their prices.

After the sorting step, both algorithms work in linear time as follows. The bid on top of its sorted list (pb,qb)subscript𝑝𝑏subscript𝑞𝑏(p_{b},q_{b})( italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ) is matched with the ask on top of its sorted list (pa,qa)subscript𝑝𝑎subscript𝑞𝑎(p_{a},q_{a})( italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT ) if they are compatible, i.e., pbpasubscript𝑝𝑏subscript𝑝𝑎p_{b}\geq p_{a}italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ≥ italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT. In this case, a transaction between them is established with quantity q=min(qb,qa)𝑞subscript𝑞𝑏subscript𝑞𝑎q=\min(q_{b},q_{a})italic_q = roman_min ( italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT ); a quantity of q𝑞qitalic_q is reduced from their existing quantities of qbsubscript𝑞𝑏q_{b}italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT and qasubscript𝑞𝑎q_{a}italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT; finally, the 00 quantity requests are deleted from the lists. If the requests are incompatible, the topmost ask in the sorted list of asks is deleted. The above steps are then repeatedly applied until one of the lists becomes empty. Finally, for the first task, for each matched pair: (pb,qb),(pa,qa)subscript𝑝𝑏subscript𝑞𝑏subscript𝑝𝑎subscript𝑞𝑎\langle(p_{b},q_{b}),(p_{a},q_{a})\rangle⟨ ( italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ) , ( italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT ) ⟩ any transaction price in the interval [pa,pb]subscript𝑝𝑎subscript𝑝𝑏[p_{a},p_{b}][ italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ] can be put. For the second task, let the last matched pair in the above process be (pb,qb),(pa,qa)subscript𝑝𝑏subscript𝑞𝑏subscript𝑝𝑎subscript𝑞𝑎\langle(p_{b},q_{b}),(p_{a},q_{a})\rangle⟨ ( italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ) , ( italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_q start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT ) ⟩. Then, for all matched pairs any number in the interval [pa,pb]subscript𝑝𝑎subscript𝑝𝑏[p_{a},p_{b}][ italic_p start_POSTSUBSCRIPT italic_a end_POSTSUBSCRIPT , italic_p start_POSTSUBSCRIPT italic_b end_POSTSUBSCRIPT ] can be chosen as the common transaction price.

Clearly, the above algorithms take time O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) in the comparison model. We ask the following question.

Do these algorithms have the optimal running time for the above tasks?

The problems we consider in this work are slight generalizations of the above tasks where bids and asks have additional parameters, and the objectives incorporate a notion of fairness. These problems arise out of call auctions, which are a class of double auctions, that are extensively used to match the buy and sell requests of traders at various centralized marketplaces such as exchanges of stocks and commodities. Numerous works have focused on the mechanism-design and game-theoretic aspects of such auctions (e.g., see [DGHK02] and the citations therein), with only a few of them that include a runtime analysis of their algorithms ([WWW98, NP13, ZZKP10]). The problems considered in this work arise all the time in the real world and could easily be introduced in an undergraduate course in algorithms. For the above tasks, we prove the following.

Theorem 1.1.

Any algorithm for Task 1 requires Ω(nlogn)normal-Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) time in the worst-case, where n𝑛nitalic_n is the number of trade requests.

Theorem 1.2.

There exists an algorithm for Task 2 that runs in O(n)𝑂𝑛O(n)italic_O ( italic_n ) time, where n𝑛nitalic_n is the number of trade requests.

Thus, interestingly, for Task 1, the algorithm described above is time-optimal, whereas for Task 2, the algorithm described above is not time-optimal.

To describe the general problems that we consider, previous results, and our contributions formally, we need the following preliminaries.

1.1 Preliminaries

We now describe call auctions which are slight generalizations of the tasks introduced above. A call auction is used at an exchange to match the bids and asks of traders for a particular product. Bids and asks are collectively termed orders. Orders are collected by the exchange for a fixed duration of time, at the end of which the collected orders are simultaneously matched to produce transactions. Each transaction between a bid and an ask consists of a transaction price and a transaction quantity. Each order consists of four attributes that are natural numbers: a unique identification number (id), a unique timestamp, a limit price, and a quantity that is at least one.222Later, the orders given as input to the algorithms, are all assumed to have distinct ids and distinct timestamps. 𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(w)𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉𝑤\mathsf{timestamp}(w)sansserif_timestamp ( italic_w ) represents the time the order w𝑤witalic_w was received. For an order w𝑤witalic_w, the limit price 𝗉𝗋𝗂𝖼𝖾(w)𝗉𝗋𝗂𝖼𝖾𝑤\mathsf{price}(w)sansserif_price ( italic_w ) is the minimum (if w𝑤witalic_w is an ask) or maximum (if w𝑤witalic_w is a bid) possible transaction price of a transaction involving w𝑤witalic_w. For an order w𝑤witalic_w, the quantity 𝗊𝗍𝗒(w)𝗊𝗍𝗒𝑤\mathsf{qty}(w)sansserif_qty ( italic_w ) represents the total quantity offered for trade, i.e., the sum of transaction quantities of transactions involving w𝑤witalic_w in the matching must be at most 𝗊𝗍𝗒(w)𝗊𝗍𝗒𝑤\mathsf{qty}(w)sansserif_qty ( italic_w ). Given a collection of orders with distinct ids, i.e., given a set of bids and asks with distinct ids, a matching is a collection of transactions that satisfy the natural constraints. We formally define a matching below, along with some other important terms.

Definition 1.3 (tradable, traded quantity 𝖰𝗍𝗒𝖰𝗍𝗒\mathsf{Qty}sansserif_Qty, volume 𝖵𝗈𝗅𝖵𝗈𝗅\mathsf{Vol}sansserif_Vol, matching).

Given a bid b𝑏bitalic_b and an ask a𝑎aitalic_a, we say that b𝑏bitalic_b and a𝑎aitalic_a are tradable if 𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾(a)𝗉𝗋𝗂𝖼𝖾𝑏𝗉𝗋𝗂𝖼𝖾𝑎\mathsf{price}(b)\geq\mathsf{price}(a)sansserif_price ( italic_b ) ≥ sansserif_price ( italic_a ).

For a set of transactions M𝑀Mitalic_M and an order w𝑤witalic_w, 𝖰𝗍𝗒(w,M)𝖰𝗍𝗒𝑤𝑀\mathsf{Qty}(w,M)sansserif_Qty ( italic_w , italic_M ) denotes the sum of transaction quantities of transactions in M𝑀Mitalic_M that involve w𝑤witalic_w, and 𝖵𝗈𝗅(M)𝖵𝗈𝗅𝑀\mathsf{Vol}(M)sansserif_Vol ( italic_M ) denotes the sum of all transaction quantities of the transactions in M𝑀Mitalic_M. With slight abuse of notation for a set of asks or a set of bids ΩΩ\Omegaroman_Ω, we define 𝖵𝗈𝗅(Ω)𝖵𝗈𝗅Ω\mathsf{Vol}(\Omega)sansserif_Vol ( roman_Ω ) to be the sum of the quantities of the orders in ΩΩ\Omegaroman_Ω.

A set of transactions M𝑀Mitalic_M is a matching over a list of bids B𝐵Bitalic_B and asks A𝐴Aitalic_A with distinct ids if (i) For each transaction mM𝑚𝑀m\in Mitalic_m ∈ italic_M, the bid and ask of m𝑚mitalic_m come from B𝐵Bitalic_B and A𝐴Aitalic_A, respectively. (ii) For each transaction mM𝑚𝑀m\in Mitalic_m ∈ italic_M, the bid b𝑏bitalic_b of m𝑚mitalic_m is tradable with the ask a𝑎aitalic_a of m𝑚mitalic_m. (iii) For each order wBA𝑤𝐵𝐴w\in B\cup Aitalic_w ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(w,M)𝗊𝗍𝗒(w)𝖰𝗍𝗒𝑤𝑀𝗊𝗍𝗒𝑤\mathsf{Qty}(w,M)\leq\mathsf{qty}(w)sansserif_Qty ( italic_w , italic_M ) ≤ sansserif_qty ( italic_w ).

There are two main types of call auctions: uniform-price and dynamic-price. In both these auctions, the matching produced needs to be fair, which essentially states that more competitive orders (based on price-time priority) have to be given preference in the matching. We now formally define a fair matching along with the notion of competitiveness.

Definition 1.4 (Competitiveness succeeds\succ, Fair).

For bids b1subscript𝑏1b_{1}italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and b2subscript𝑏2b_{2}italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT we say b1subscript𝑏1b_{1}italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is more competitive than b2subscript𝑏2b_{2}italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, denoted by b1succeedssubscript𝑏1absentb_{1}\succitalic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≻ b2subscript𝑏2b_{2}italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, iff 𝗉𝗋𝗂𝖼𝖾(b1)>𝗉𝗋𝗂𝖼𝖾(b2)𝗉𝗋𝗂𝖼𝖾subscript𝑏1𝗉𝗋𝗂𝖼𝖾subscript𝑏2\mathsf{price}(b_{1})>\mathsf{price}(b_{2})sansserif_price ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) > sansserif_price ( italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) or (𝗉𝗋𝗂𝖼𝖾(b1)=𝗉𝗋𝗂𝖼𝖾(b2)𝗉𝗋𝗂𝖼𝖾subscript𝑏1𝗉𝗋𝗂𝖼𝖾subscript𝑏2\mathsf{price}(b_{1})=\mathsf{price}(b_{2})sansserif_price ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_price ( italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) and 𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(b1)<𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(b2)𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉subscript𝑏1𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉subscript𝑏2\mathsf{timestamp}(b_{1})<\mathsf{timestamp}(b_{2})sansserif_timestamp ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) < sansserif_timestamp ( italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT )). Similarly, for asks a1subscript𝑎1a_{1}italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and a2subscript𝑎2a_{2}italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, we say a1subscript𝑎1a_{1}italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is more competitive than a2subscript𝑎2a_{2}italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, denoted by a1a2succeedssubscript𝑎1subscript𝑎2a_{1}\succ a_{2}italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≻ italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, iff 𝗉𝗋𝗂𝖼𝖾(a1)<𝗉𝗋𝗂𝖼𝖾(a2)𝗉𝗋𝗂𝖼𝖾subscript𝑎1𝗉𝗋𝗂𝖼𝖾subscript𝑎2\mathsf{price}(a_{1})<\mathsf{price}(a_{2})sansserif_price ( italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) < sansserif_price ( italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) or (𝗉𝗋𝗂𝖼𝖾(a1)=𝗉𝗋𝗂𝖼𝖾(a2)𝗉𝗋𝗂𝖼𝖾subscript𝑎1𝗉𝗋𝗂𝖼𝖾subscript𝑎2\mathsf{price}(a_{1})=\mathsf{price}(a_{2})sansserif_price ( italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_price ( italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) and 𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(a1)<𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(a2))\mathsf{timestamp}(a_{1})<\mathsf{timestamp}(a_{2}))sansserif_timestamp ( italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) < sansserif_timestamp ( italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ).

We say a matching M𝑀Mitalic_M is fair on bids if a bid b𝑏bitalic_b participates in M𝑀Mitalic_M, then all bids that are more competitive than b𝑏bitalic_b must be fully traded in M𝑀Mitalic_M. Formally, M𝑀Mitalic_M is fair on bids iff for all pairs of bids b1subscript𝑏1b_{1}italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and b2subscript𝑏2b_{2}italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT such that b1b2succeedssubscript𝑏1subscript𝑏2b_{1}\succ b_{2}italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≻ italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, 𝖰𝗍𝗒(b2,M)1𝖰𝗍𝗒(b1,M)=𝗊𝗍𝗒(b1)𝖰𝗍𝗒subscript𝑏2𝑀1𝖰𝗍𝗒subscript𝑏1𝑀𝗊𝗍𝗒subscript𝑏1\mathsf{Qty}(b_{2},M)\geq 1\implies\mathsf{Qty}(b_{1},M)=\mathsf{qty}(b_{1})sansserif_Qty ( italic_b start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_M ) ≥ 1 ⟹ sansserif_Qty ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_M ) = sansserif_qty ( italic_b start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ). Similarly, a matching M𝑀Mitalic_M is fair on asks iff for all pairs of asks a1subscript𝑎1a_{1}italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and a2subscript𝑎2a_{2}italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT such that a1a2succeedssubscript𝑎1subscript𝑎2a_{1}\succ a_{2}italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ≻ italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, 𝖰𝗍𝗒(a2,M)1𝖰𝗍𝗒(a1,M)=𝗊𝗍𝗒(a1)𝖰𝗍𝗒subscript𝑎2𝑀1𝖰𝗍𝗒subscript𝑎1𝑀𝗊𝗍𝗒subscript𝑎1\mathsf{Qty}(a_{2},M)\geq 1\implies\mathsf{Qty}(a_{1},M)=\mathsf{qty}(a_{1})sansserif_Qty ( italic_a start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , italic_M ) ≥ 1 ⟹ sansserif_Qty ( italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_M ) = sansserif_qty ( italic_a start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ). A matching is fair if it is fair on bids as well as fair on asks.

In uniform price call auctions, the exchange is supposed to output a fair matching with maximum volume subject to the constraint that all transaction prices in the matching are identical. Customarily, the transaction price of a uniform price matching is referred to as the equilibrium price, and the process of discovering this price is called price discovery. In contrast, for dynamic price call auctions, the exchange is supposed to output a fair matching with maximum volume, where the transaction prices need not be the same. It must be noted that drop** the requirement of fairness from a dynamic price matching can only make the problem easier; the following result states that for any matching, there exists a fair matching of the same volume.

Theorem 1.5 (Theorem 15 and Page 13 of [NSS21]).

Given a set of bids B𝐵Bitalic_B, a set of asks A𝐴Aitalic_A, and a matching M𝑀Mitalic_M over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ), one can find a fair matching Msuperscript𝑀normal-′M^{\prime}italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) such that

  • (a)

    𝖵𝗈𝗅(M)=𝖵𝗈𝗅(M)𝖵𝗈𝗅𝑀𝖵𝗈𝗅superscript𝑀\mathsf{Vol}(M)=\mathsf{Vol}(M^{\prime})sansserif_Vol ( italic_M ) = sansserif_Vol ( italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ), and

  • (b)

    if M𝑀Mitalic_M is uniform, then Msuperscript𝑀M^{\prime}italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT is uniform.

Remark 1.6.

It is clear from the above theorem, that unlike uniformity, ensuring fairness does not change the volume of a matching. More precisely, given sets of bids B𝐵Bitalic_B and asks A𝐴Aitalic_A, consider the following matchings over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ). Let M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT be a largest volume matching, M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT be a fair matching with the largest volume, M3subscript𝑀3M_{3}italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT be a uniform matching with the largest volume, and finally let M4subscript𝑀4M_{4}italic_M start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT be a uniform and fair matching with the largest volume. Then,

𝖵𝗈𝗅(M1)=𝖵𝗈𝗅(M2)𝖵𝗈𝗅(M3)=𝖵𝗈𝗅(M4).𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝑀2𝖵𝗈𝗅subscript𝑀3𝖵𝗈𝗅subscript𝑀4\mathsf{Vol}(M_{1})=\mathsf{Vol}(M_{2})\geq\mathsf{Vol}(M_{3})=\mathsf{Vol}(M_% {4}).sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ≥ sansserif_Vol ( italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ) .

Nevertheless, computing M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT can be easier than computing M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, and similarly computing M3subscript𝑀3M_{3}italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT can be easier than computing M4subscript𝑀4M_{4}italic_M start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT. More precisely, computing M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT reduces to computing M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, and computing M3subscript𝑀3M_{3}italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT reduces to computing M4subscript𝑀4M_{4}italic_M start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT.

The two matching problems that we study in this work can be stated as follows.

Problem 1

Given a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A, find a fair matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) of maximum volume.

Problem 2

Given a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A, find a fair and uniform matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) of maximum volume.

To show our lower bound results, we have to explain the model of computation we assume.

The comparison model:

We assume that the prices of the orders in the input are not given explicitly. Rather, two prices can be compared to each other via an oracle in unit time.

The binary query model:

We will also derive a lower bound in a more general model, namely the binary query model, where the oracle can be made to evaluate an arbitrary function f:×{0,1}:𝑓01f:\mathbb{N}\times\mathbb{N}\rightarrow\{0,1\}italic_f : blackboard_N × blackboard_N → { 0 , 1 } on two prices in unit time.

Remark 1.7.

Our upper bound results do adhere to the more restricted comparison model.

We are now ready to state the previous and new results.

1.2 Results, techniques, and discussion

We first briefly summarize the past results that were obtained for Problems 1 and 2. In the following, n𝑛nitalic_n represents the number of orders in the input, i.e., n=|A|+|B|𝑛𝐴𝐵n=|A|+|B|italic_n = | italic_A | + | italic_B |.

  • First, in [WWW98] it was shown that Problem 2 can be solved in O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time.

  • Next, in [ZZKP10] it was shown that Problem 1 can be solved in O(n2)𝑂superscript𝑛2O(n^{2})italic_O ( italic_n start_POSTSUPERSCRIPT 2 end_POSTSUPERSCRIPT ) time under the assumption that all orders have unit quantity. The authors mention that for multi-unit orders, one can simply break an order into multiple single-unit orders and use their algorithm. But, this would then result in overall complexity O(Q2)𝑂superscript𝑄2O(Q^{2})italic_O ( italic_Q start_POSTSUPERSCRIPT 2 end_POSTSUPERSCRIPT ), where Q𝑄Qitalic_Q is the sum of the total demand and total supply, i.e., Q=𝖵𝗈𝗅(A)+𝖵𝗈𝗅(B)𝑄𝖵𝗈𝗅𝐴𝖵𝗈𝗅𝐵Q=\mathsf{Vol}(A)+\mathsf{Vol}(B)italic_Q = sansserif_Vol ( italic_A ) + sansserif_Vol ( italic_B ).

  • This was improved in [NP13] where it was shown that Problem 1 can be solved in O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time for single-unit orders.

  • Finally, inspired from previous works, in [NSS21] algorithms for both Problems 1 and 2 were presented that run in O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time each for arbitrary multi-unit orders. However, the authors did not analyze the time complexity of their algorithms, as they were more focused on formalizing these algorithms in a theorem prover. Their algorithms are general versions of the two algorithms we saw on page 1, where instead of sorting the lists of bids and asks by their prices, they are sorted by their competitiveness. After this modification, the first algorithm yields a maximum volume matching (note that Problem 1 requires the output matching to be also fair), whereas the second algorithm yields a uniform and fair matching with maximum volume (precisely solving Problem 2). For solving Problem 1, in addition to the above algorithm, they use an O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time algorithm that takes an arbitrary matching and outputs a fair matching of the same volume (this is always possible, see Theorem 1.5). It is straightforward to see that their algorithms indeed run in O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time.

Now we describe the results obtained in this work.

For Problem 1, we show that an easier problem, namely finding a maximum volume matching (which need not be fair), requires Ω(nlogn)Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) time for processing n𝑛nitalic_n requests in the comparison model and Ω(nlogn)Ω𝑛𝑛\Omega(n\sqrt{\log n})roman_Ω ( italic_n square-root start_ARG roman_log italic_n end_ARG ) time in the binary query model.

Theorem 1.8 (Result 1).

Any algorithm that takes as input a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A and computes a matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) with the maximum volume has a worst-case running time of Ω(nlogn)normal-Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) in the comparison model and Ω(nlogn)normal-Ω𝑛𝑛\Omega(n\sqrt{\log n})roman_Ω ( italic_n square-root start_ARG roman_log italic_n end_ARG ) in the binary query model, where n=|B|+|A|𝑛𝐵𝐴n=|B|+|A|italic_n = | italic_B | + | italic_A |.

From our earlier discussion, Theorem 1.5 implies that these lower bounds also apply to Problem 1.

As described above, there is an algorithm [NP13, NSS21] for finding a fair and maximum volume matching (which also works for determining a maximum volume matching) that takes O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time. Our lower bound result implies that such an algorithm is time-optimal in the comparison model.

As we will see later, the Proof of Theorem 1.8 also applies to Theorem 1.1. In this proof, we obtain the desired lower bound by reducing the element distinctness problem over a small domain to the maximum volume matching problem.333An entropy-based argument similar to the one used for sorting in [Rad03] also yields a lower bound for the maximum matching problem in the comparison model, but it fails to deliver any non-trivial lower bound in the binary query model. Our result then follows from applying known lower bounds on the time complexity of the element distinctness problem [Bop94, Meh84]. We include a proof of the lower bound in the comparison model making the argument in [Meh84] more precise as it seems to be missing some important details. Our reduction uses a stronger version of the demand-supply inequality of [NP13], which states that the volume of any matching is upper bounded by the sum of the total demand and the total supply at any price.

Theorem 1.9 (demand-supply inequality).

If M𝑀Mitalic_M is a matching over a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A, then for all numbers p𝑝pitalic_p, we have

𝖵𝗈𝗅(M)𝖵𝗈𝗅(Bp)+𝖵𝗈𝗅(Ap)𝖵𝗈𝗅𝑀𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(M)\leq\mathsf{Vol}(B_{\geq p})+\mathsf{Vol}(A_{\leq p})sansserif_Vol ( italic_M ) ≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT ≥ italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT ≤ italic_p end_POSTSUBSCRIPT )

where BpBsubscript𝐵absent𝑝𝐵B_{\geq p}\subseteq Bitalic_B start_POSTSUBSCRIPT ≥ italic_p end_POSTSUBSCRIPT ⊆ italic_B consists of bids whose limit prices are at least p𝑝pitalic_p, ApAsubscript𝐴absent𝑝𝐴A_{\leq p}\subseteq Aitalic_A start_POSTSUBSCRIPT ≤ italic_p end_POSTSUBSCRIPT ⊆ italic_A consists of asks whose limit prices are at most p𝑝pitalic_p.

Our strengthening, which is crucially required for our reduction to work, comes from observing that the above inequality holds even if we replace 𝖵𝗈𝗅(Bp)𝖵𝗈𝗅subscript𝐵absent𝑝\mathsf{Vol}(B_{\geq p})sansserif_Vol ( italic_B start_POSTSUBSCRIPT ≥ italic_p end_POSTSUBSCRIPT ) by 𝖵𝗈𝗅(B>p)𝖵𝗈𝗅subscript𝐵absent𝑝\mathsf{Vol}(B_{>p})sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) or 𝖵𝗈𝗅(Ap)𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(A_{\leq p})sansserif_Vol ( italic_A start_POSTSUBSCRIPT ≤ italic_p end_POSTSUBSCRIPT ) by 𝖵𝗈𝗅(A<p)𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(A_{<p})sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ), and can be stated as follows.

Theorem 1.10 (Result 2).

If M𝑀Mitalic_M is a matching over a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A, then for all numbers p𝑝pitalic_p, we have

𝖵𝗈𝗅(M)𝖵𝗈𝗅(B>p)+𝖵𝗈𝗅(A<p)+min(𝖵𝗈𝗅(B=p),𝖵𝗈𝗅(A=p)),𝖵𝗈𝗅𝑀𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(M)\leq\mathsf{Vol}(B_{>p})+\mathsf{Vol}(A_{<p})+\min(\mathsf{Vol}% (B_{=p}),\mathsf{Vol}(A_{=p})),sansserif_Vol ( italic_M ) ≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ) + roman_min ( sansserif_Vol ( italic_B start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ) , sansserif_Vol ( italic_A start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ) ) ,

where B>pBsubscript𝐵absent𝑝𝐵B_{>p}\subseteq Bitalic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ⊆ italic_B consists of bids whose limit prices are greater than p𝑝pitalic_p, A<pAsubscript𝐴absent𝑝𝐴A_{<p}\subseteq Aitalic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ⊆ italic_A consists of asks whose limit prices are less than p𝑝pitalic_p, and B=pBsubscript𝐵absent𝑝𝐵B_{=p}\subseteq Bitalic_B start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ⊆ italic_B (or A=pAsubscript𝐴absent𝑝𝐴A_{=p}\subseteq Aitalic_A start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ⊆ italic_A) consists of bids (or asks) whose limit prices are exactly p𝑝pitalic_p.

For Problem 2, we obtain a linear time algorithm.

Theorem 1.11 (Result 3).

There exists an algorithm that takes as input a set of bids B𝐵Bitalic_B and a set of asks A𝐴Aitalic_A, and outputs a uniform and fair matching with maximum volume in O(n)𝑂𝑛O(n)italic_O ( italic_n ) time, where n=|B|+|A|𝑛𝐵𝐴n=|B|+|A|italic_n = | italic_B | + | italic_A |.

As noted earlier, this is an improvement over the previous algorithms [WWW98, ZZKP10, NSS21] that take O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time to match n𝑛nitalic_n requests. Note that Theorem 1.11 immediately implies Theorem 1.2, as ensuring fairness does not reduce the size of a uniform matching, as observed earlier.

Our improvement for uniform-price matching, roughly speaking, comes from getting rid of the sorting step in the algorithm of [NSS21] as described earlier. We instead compute the "medians" of the bids and asks in linear time which bisects the sets of bids and asks into two "equal halves" each. Based on whether the medians are tradable or not, we either can get rid of half of the bids and asks, or we can match half of the input in linear time, thus in either case reducing the problem size by half. This results in a linear time algorithm. Note that obtaining a linear time algorithm in the volume of the input orders is much simpler than our result.

1.3 Other related work

In [GS22, GS23], continuous auctions were studied, that form a class of double auctions that complement the call auctions. The authors presented an algorithm that implements the continuous auction and runs in O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time for processing n𝑛nitalic_n instructions (requests/orders). They also showed that their algorithm is time-optimal by reducing the task of sorting to continuous auctions.

Organization of the paper. In Section 2, we prove Theorem 1.10. Then, Theorems 1.8 and 1.1 are proved in Section 3. Next, in Section 4, Theorem 1.11 is proved. Finally, we conclude the paper in Section 5 with some concluding remarks.

2 Stronger demand-supply inequality

In this section, we prove Theorem 1.10.

See 1.10

Proof of Theorem 1.10.

First observe that the volume of any matching is upper bounded by the volume of all bids as well as the volume of all asks, i.e., if M𝑀Mitalic_M is a matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ), then

𝖵𝗈𝗅(M)𝖵𝗈𝗅(B) and 𝖵𝗈𝗅(M)𝖵𝗈𝗅(A).formulae-sequence𝖵𝗈𝗅𝑀𝖵𝗈𝗅𝐵 and 𝖵𝗈𝗅𝑀𝖵𝗈𝗅𝐴\mathsf{Vol}(M)\leq\mathsf{Vol}(B)\quad\text{ and }\quad\mathsf{Vol}(M)\leq% \mathsf{Vol}(A).sansserif_Vol ( italic_M ) ≤ sansserif_Vol ( italic_B ) and sansserif_Vol ( italic_M ) ≤ sansserif_Vol ( italic_A ) .

To prove Theorem 1.10, it suffices to prove the following two inequalities.

𝖵𝗈𝗅(M)𝖵𝗈𝗅𝑀\displaystyle\mathsf{Vol}(M)sansserif_Vol ( italic_M ) 𝖵𝗈𝗅(B>p)+𝖵𝗈𝗅(A<p)+𝖵𝗈𝗅(B=p);absent𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝𝖵𝗈𝗅subscript𝐵absent𝑝\displaystyle\leq\mathsf{Vol}(B_{>p})+\mathsf{Vol}(A_{<p})+\mathsf{Vol}(B_{=p});≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_B start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ) ;
𝖵𝗈𝗅(M)𝖵𝗈𝗅𝑀\displaystyle\mathsf{Vol}(M)sansserif_Vol ( italic_M ) 𝖵𝗈𝗅(B>p)+𝖵𝗈𝗅(A<p)+𝖵𝗈𝗅(A=p).absent𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝\displaystyle\leq\mathsf{Vol}(B_{>p})+\mathsf{Vol}(A_{<p})+\mathsf{Vol}(A_{=p}).≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ) .

To prove the first inequality we partition the matching M𝑀Mitalic_M into two sets: M1={(b,a,q,p)M𝗉𝗋𝗂𝖼𝖾(b)p}subscript𝑀1conditional-set𝑏𝑎𝑞superscript𝑝𝑀𝗉𝗋𝗂𝖼𝖾𝑏𝑝M_{1}=\{(b,a,q,p^{\prime})\in M\mid\mathsf{price}(b)\geq p\}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = { ( italic_b , italic_a , italic_q , italic_p start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) ∈ italic_M ∣ sansserif_price ( italic_b ) ≥ italic_p } consisting of all transactions in M𝑀Mitalic_M whose participating bid price is at least p𝑝pitalic_p and M2={(b,a,q,p)M𝗉𝗋𝗂𝖼𝖾(b)<p}subscript𝑀2conditional-set𝑏𝑎𝑞superscript𝑝𝑀𝗉𝗋𝗂𝖼𝖾𝑏𝑝M_{2}=\{(b,a,q,p^{\prime})\in M\mid\mathsf{price}(b)<p\}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = { ( italic_b , italic_a , italic_q , italic_p start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) ∈ italic_M ∣ sansserif_price ( italic_b ) < italic_p } consisting of all transactions in M𝑀Mitalic_M whose participating bid price is strictly less than p𝑝pitalic_p. Thus, 𝖵𝗈𝗅(M)=𝖵𝗈𝗅(M1)+𝖵𝗈𝗅(M2)𝖵𝗈𝗅𝑀𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝑀2\mathsf{Vol}(M)=\mathsf{Vol}(M_{1})+\mathsf{Vol}(M_{2})sansserif_Vol ( italic_M ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ).

It is easy to see that M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is a matching over sets of bids Bpsubscript𝐵absent𝑝B_{\geq p}italic_B start_POSTSUBSCRIPT ≥ italic_p end_POSTSUBSCRIPT and asks A𝐴Aitalic_A, and hence from the above observation, 𝖵𝗈𝗅(M1)𝖵𝗈𝗅(Bp)=𝖵𝗈𝗅(B>p)+𝖵𝗈𝗅(B=p)𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐵absent𝑝\mathsf{Vol}(M_{1})\leq\mathsf{Vol}(B_{\geq p})=\mathsf{Vol}(B_{>p})+\mathsf{% Vol}(B_{=p})sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT ≥ italic_p end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_B start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ).

Next, we prove that M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is a matching over sets of bids B𝐵Bitalic_B and asks A<psubscript𝐴absent𝑝A_{<p}italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT. Consider a transaction m=(b,a,q,p)𝑚𝑏𝑎𝑞superscript𝑝m=(b,a,q,p^{\prime})italic_m = ( italic_b , italic_a , italic_q , italic_p start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) from M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, which is between a bid b𝑏bitalic_b and an ask a𝑎aitalic_a. Since mM𝑚𝑀m\in Mitalic_m ∈ italic_M, 𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾(a)𝗉𝗋𝗂𝖼𝖾𝑏𝗉𝗋𝗂𝖼𝖾𝑎\mathsf{price}(b)\geq\mathsf{price}(a)sansserif_price ( italic_b ) ≥ sansserif_price ( italic_a ), and from the definition of M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, we have 𝗉𝗋𝗂𝖼𝖾(b)<p𝗉𝗋𝗂𝖼𝖾𝑏𝑝\mathsf{price}(b)<psansserif_price ( italic_b ) < italic_p. This implies 𝗉𝗋𝗂𝖼𝖾(a)<p𝗉𝗋𝗂𝖼𝖾𝑎𝑝\mathsf{price}(a)<psansserif_price ( italic_a ) < italic_p, i.e., asks of M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT come from A<psubscript𝐴absent𝑝A_{<p}italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT. Hence, M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is a matching over (B,A<p)𝐵subscript𝐴absent𝑝(B,A_{<p})( italic_B , italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ), and applying the above observation again, we have 𝖵𝗈𝗅(M2)𝖵𝗈𝗅(A<p)𝖵𝗈𝗅subscript𝑀2𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(M_{2})\leq\mathsf{Vol}(A_{<p})sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ≤ sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ).

Combining, we have 𝖵𝗈𝗅(M)=𝖵𝗈𝗅(M1)+𝖵𝗈𝗅(M2)𝖵𝗈𝗅(B>p)+𝖵𝗈𝗅(B=p)+𝖵𝗈𝗅(A<p)𝖵𝗈𝗅𝑀𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝑀2𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐵absent𝑝𝖵𝗈𝗅subscript𝐴absent𝑝\mathsf{Vol}(M)=\mathsf{Vol}(M_{1})+\mathsf{Vol}(M_{2})\leq\mathsf{Vol}(B_{>p}% )+\mathsf{Vol}(B_{=p})+\mathsf{Vol}(A_{<p})sansserif_Vol ( italic_M ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ≤ sansserif_Vol ( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_B start_POSTSUBSCRIPT = italic_p end_POSTSUBSCRIPT ) + sansserif_Vol ( italic_A start_POSTSUBSCRIPT < italic_p end_POSTSUBSCRIPT ), which completes the proof of first inequality.

Similarly, we can prove the second inequality by first partitioning the matching M𝑀Mitalic_M into M1={(b,a,q,p)M𝗉𝗋𝗂𝖼𝖾(b)>p}subscript𝑀1conditional-set𝑏𝑎𝑞superscript𝑝𝑀𝗉𝗋𝗂𝖼𝖾𝑏𝑝M_{1}=\{(b,a,q,p^{\prime})\in M\mid\mathsf{price}(b)>p\}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = { ( italic_b , italic_a , italic_q , italic_p start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) ∈ italic_M ∣ sansserif_price ( italic_b ) > italic_p } and M2={(b,a,q,p)M𝗉𝗋𝗂𝖼𝖾(b)p}subscript𝑀2conditional-set𝑏𝑎𝑞superscript𝑝𝑀𝗉𝗋𝗂𝖼𝖾𝑏𝑝M_{2}=\{(b,a,q,p^{\prime})\in M\mid\mathsf{price}(b)\leq p\}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = { ( italic_b , italic_a , italic_q , italic_p start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) ∈ italic_M ∣ sansserif_price ( italic_b ) ≤ italic_p }, noticing that M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is a matching over (B>p,A)subscript𝐵absent𝑝𝐴(B_{>p},A)( italic_B start_POSTSUBSCRIPT > italic_p end_POSTSUBSCRIPT , italic_A ) and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is matching over (B,Ap)𝐵subscript𝐴absent𝑝(B,A_{\leq p})( italic_B , italic_A start_POSTSUBSCRIPT ≤ italic_p end_POSTSUBSCRIPT ), and finally, using the observation again to obtain the desired inequality. ∎

3 Maximum volume matching lower bound

In this section we prove Theorem 1.8 (note the proof also works for Theorem 1.1), i.e., we establish a lower bound of Ω(nlogn)Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) on the running time of any algorithm that computes a maximum volume matching on a list of bids B𝐵Bitalic_B and a list of asks A𝐴Aitalic_A, where n=|B|+|A|𝑛𝐵𝐴n=|B|+|A|italic_n = | italic_B | + | italic_A |. Let 𝖬𝖬𝖬𝖬\mathsf{MM}sansserif_MM be an algorithm for the maximum matching problem. We reduce the element distinctness problem on a small domain to 𝖬𝖬𝖬𝖬\mathsf{MM}sansserif_MM in linear time.

Element Distinctness Problem (on small domain): Given an input (x1,,xn)subscript𝑥1subscript𝑥𝑛(x_{1},\cdots,x_{n})( italic_x start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_x start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ), where each xi[n]subscript𝑥𝑖delimited-[]𝑛x_{i}\in[n]italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ [ italic_n ], check whether there are distinct indices i𝑖iitalic_i and j𝑗jitalic_j such xi=xjsubscript𝑥𝑖subscript𝑥𝑗x_{i}=x_{j}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT.444For n1𝑛1n\geq 1italic_n ≥ 1, [n]delimited-[]𝑛[n][ italic_n ] denotes the set {1,2,,n}12𝑛\{1,2,\ldots,n\}{ 1 , 2 , … , italic_n }.

Our result then immediately follows from the fact that the element distinctness problem on a small domain requires time Ω(nlogn)Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ) in the comparison model [Meh84] (for which we include a proof in the next subsection) and time Ω(nlogn)Ω𝑛𝑛\Omega(n\sqrt{\log n})roman_Ω ( italic_n square-root start_ARG roman_log italic_n end_ARG ) in the binary query model [Bop94].

In the reduction, we will make use of the stronger version of the demand-supply inequality Theorem 1.10, which was proved in Section 2.

The reduction. Given an instance X=(x1,,xn)𝑋subscript𝑥1subscript𝑥𝑛X=(x_{1},\cdots,x_{n})italic_X = ( italic_x start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_x start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) for the element distinctness problem, we construct two sets of orders Ω={ω1,ω2,,ωn}Ωsubscript𝜔1subscript𝜔2subscript𝜔𝑛\Omega=\{\omega_{1},\omega_{2},\ldots,\omega_{n}\}roman_Ω = { italic_ω start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_ω start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , … , italic_ω start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT } and Λ={λ1,λ2,,λn}Λsubscript𝜆1subscript𝜆2subscript𝜆𝑛\Lambda=\{\lambda_{1},\lambda_{2},\ldots,\lambda_{n}\}roman_Λ = { italic_λ start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_λ start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT , … , italic_λ start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT } such that the quantity of each order in ΩΛΩΛ\Omega\cup\Lambdaroman_Ω ∪ roman_Λ is set to 1111. We set the prices as follows. 𝗉𝗋𝗂𝖼𝖾(ωi)=i𝗉𝗋𝗂𝖼𝖾subscript𝜔𝑖𝑖\mathsf{price}(\omega_{i})=isansserif_price ( italic_ω start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ) = italic_i and 𝗉𝗋𝗂𝖼𝖾(λi)=xi𝗉𝗋𝗂𝖼𝖾subscript𝜆𝑖subscript𝑥𝑖\mathsf{price}(\lambda_{i})=x_{i}sansserif_price ( italic_λ start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ) = italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT. Observe that the prices of orders in ΩΩ\Omegaroman_Ω are all distinct. Next, we run the maximum matching algorithm 𝖬𝖬𝖬𝖬\mathsf{MM}sansserif_MM twice on these inputs by first treating ΩΩ\Omegaroman_Ω as the set of bids and then treating ΩΩ\Omegaroman_Ω as the set of asks to obtain two matchings M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, respectively; M1=𝖬𝖬(Ω,Λ)subscript𝑀1𝖬𝖬ΩΛM_{1}=\mathsf{MM}(\Omega,\Lambda)italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = sansserif_MM ( roman_Ω , roman_Λ ) and M2=𝖬𝖬(Λ,Ω)subscript𝑀2𝖬𝖬ΛΩM_{2}=\mathsf{MM}(\Lambda,\Omega)italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_MM ( roman_Λ , roman_Ω ).

We now claim that if elements of X𝑋Xitalic_X are all distinct then 𝖵𝗈𝗅(M1)=𝖵𝗈𝗅(M2)=n𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝑀2𝑛\mathsf{Vol}(M_{1})=\mathsf{Vol}(M_{2})=nsansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) = italic_n, otherwise 𝖵𝗈𝗅(M1)<n or 𝖵𝗈𝗅(M2)<n𝖵𝗈𝗅subscript𝑀1𝑛 or 𝖵𝗈𝗅subscript𝑀2𝑛\mathsf{Vol}(M_{1})<n\text{ or }\mathsf{Vol}(M_{2})<nsansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) < italic_n or sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) < italic_n. Note that if we show this claim the reduction is complete, as we can then solve the element distinctness problem mentioned above in time O(n)𝑂𝑛O(n)italic_O ( italic_n ) plus twice the time taken by 𝖬𝖬𝖬𝖬\mathsf{MM}sansserif_MM on 2n2𝑛2n2 italic_n orders.

It is easy to see that if the xisubscript𝑥𝑖x_{i}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT’s are all distinct, then 𝖵𝗈𝗅(M1)=𝖵𝗈𝗅(M2)=n𝖵𝗈𝗅subscript𝑀1𝖵𝗈𝗅subscript𝑀2𝑛\mathsf{Vol}(M_{1})=\mathsf{Vol}(M_{2})=nsansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) = italic_n; the bid with price i𝑖iitalic_i is matched with the ask with price i𝑖iitalic_i.

Now, we show that if the xisubscript𝑥𝑖x_{i}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT’s are not distinct, then 𝖵𝗈𝗅(M1)n1𝖵𝗈𝗅subscript𝑀1𝑛1\mathsf{Vol}(M_{1})\leq n-1sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ≤ italic_n - 1 or 𝖵𝗈𝗅(M2)n1𝖵𝗈𝗅subscript𝑀2𝑛1\mathsf{Vol}(M_{2})\leq n-1sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ≤ italic_n - 1. From the pigeon-hole principle, if two elements are repeating in X𝑋Xitalic_X, then one of the elements from [n]delimited-[]𝑛[n][ italic_n ] must be missing from X𝑋Xitalic_X. Let the smallest missing element in X𝑋Xitalic_X be m𝑚mitalic_m and the smallest repeating element in X𝑋Xitalic_X be r𝑟ritalic_r.

For a set of orders ΩΩ\Omegaroman_Ω, we define Ω=t:={ωΩ𝗉𝗋𝗂𝖼𝖾(ω)=t}assignsubscriptΩabsent𝑡conditional-set𝜔Ω𝗉𝗋𝗂𝖼𝖾𝜔𝑡\Omega_{=t}:=\{\omega\in\Omega\mid\mathsf{price}(\omega)=t\}roman_Ω start_POSTSUBSCRIPT = italic_t end_POSTSUBSCRIPT := { italic_ω ∈ roman_Ω ∣ sansserif_price ( italic_ω ) = italic_t }, Ω<t:={ωΩ𝗉𝗋𝗂𝖼𝖾(ω)<t}assignsubscriptΩabsent𝑡conditional-set𝜔Ω𝗉𝗋𝗂𝖼𝖾𝜔𝑡\Omega_{<t}:=\{\omega\in\Omega\mid\mathsf{price}(\omega)<t\}roman_Ω start_POSTSUBSCRIPT < italic_t end_POSTSUBSCRIPT := { italic_ω ∈ roman_Ω ∣ sansserif_price ( italic_ω ) < italic_t }, and Ω>t:={ωΩ𝗉𝗋𝗂𝖼𝖾(ω)>t}assignsubscriptΩabsent𝑡conditional-set𝜔Ω𝗉𝗋𝗂𝖼𝖾𝜔𝑡\Omega_{>t}:=\{\omega\in\Omega\mid\mathsf{price}(\omega)>t\}roman_Ω start_POSTSUBSCRIPT > italic_t end_POSTSUBSCRIPT := { italic_ω ∈ roman_Ω ∣ sansserif_price ( italic_ω ) > italic_t }. Now, observe that 𝖵𝗈𝗅(Λ=m)=0𝖵𝗈𝗅subscriptΛabsent𝑚0\mathsf{Vol}({\Lambda}_{=m})=0sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) = 0 (since m𝑚mitalic_m is missing from X𝑋Xitalic_X which is the set of prices of ΛΛ\Lambdaroman_Λ), which implies min(𝖵𝗈𝗅(Ω=m),𝖵𝗈𝗅(Λ=m))=0𝖵𝗈𝗅subscriptΩabsent𝑚𝖵𝗈𝗅subscriptΛabsent𝑚0\min(\mathsf{Vol}({\Omega}_{=m}),\mathsf{Vol}({\Lambda}_{=m}))=0roman_min ( sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) , sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) ) = 0.

We now consider two cases: m<r𝑚𝑟m<ritalic_m < italic_r or m>r𝑚𝑟m>ritalic_m > italic_r.

Case: m<r𝑚𝑟m<ritalic_m < italic_r. In this case we will show that 𝖵𝗈𝗅(M1)<n𝖵𝗈𝗅subscript𝑀1𝑛\mathsf{Vol}(M_{1})<nsansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) < italic_n. Observe that the number of elements in X𝑋Xitalic_X that are at most m𝑚mitalic_m is precisely m1𝑚1m-1italic_m - 1, since no element smaller than m𝑚mitalic_m is repeating and m𝑚mitalic_m itself is missing. Here, the input xisubscript𝑥𝑖x_{i}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT’s are set to be the ask prices, i.e., ΛΛ\Lambdaroman_Λ is the set of asks, and ΩΩ\Omegaroman_Ω is the set of bids. Therefore, 𝖵𝗈𝗅(Λ<m)=|{λΛ𝗉𝗋𝗂𝖼𝖾(λ)m}|=m1𝖵𝗈𝗅subscriptΛabsent𝑚conditional-set𝜆Λ𝗉𝗋𝗂𝖼𝖾𝜆𝑚𝑚1\mathsf{Vol}({\Lambda}_{<m})=|\{\lambda\in\Lambda\mid\mathsf{price}(\lambda)% \leq m\}|=m-1sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT < italic_m end_POSTSUBSCRIPT ) = | { italic_λ ∈ roman_Λ ∣ sansserif_price ( italic_λ ) ≤ italic_m } | = italic_m - 1 and 𝖵𝗈𝗅(Ω>m)=nm𝖵𝗈𝗅subscriptΩabsent𝑚𝑛𝑚\mathsf{Vol}({\Omega}_{>m})=n-msansserif_Vol ( roman_Ω start_POSTSUBSCRIPT > italic_m end_POSTSUBSCRIPT ) = italic_n - italic_m . Hence, from Theorem 1.10,

𝖵𝗈𝗅(M1)𝖵𝗈𝗅subscript𝑀1\displaystyle\mathsf{Vol}(M_{1})sansserif_Vol ( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) 𝖵𝗈𝗅(Ω>m)+𝖵𝗈𝗅(Λ<m)+min(𝖵𝗈𝗅(Ω=m),𝖵𝗈𝗅(Λ=m))absent𝖵𝗈𝗅subscriptΩabsent𝑚𝖵𝗈𝗅subscriptΛabsent𝑚𝖵𝗈𝗅subscriptΩabsent𝑚𝖵𝗈𝗅subscriptΛabsent𝑚\displaystyle\leq\mathsf{Vol}({\Omega}_{>m})+\mathsf{Vol}({\Lambda}_{<m})+\min% (\mathsf{Vol}({\Omega}_{=m}),\mathsf{Vol}({\Lambda}_{=m}))≤ sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT > italic_m end_POSTSUBSCRIPT ) + sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT < italic_m end_POSTSUBSCRIPT ) + roman_min ( sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) , sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) )
=(nm)+(m1)+0=n1.absent𝑛𝑚𝑚10𝑛1\displaystyle=(n-m)+(m-1)+0=n-1.= ( italic_n - italic_m ) + ( italic_m - 1 ) + 0 = italic_n - 1 .

Case: m>r𝑚𝑟m>ritalic_m > italic_r. In this case we will show that |M2|<nsubscript𝑀2𝑛|M_{2}|<n| italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT | < italic_n. Note that no element in X𝑋Xitalic_X is missing below m𝑚mitalic_m but some elements are repeating. Thus, the number of elements that are greater than m𝑚mitalic_m are at most nm𝑛𝑚n-mitalic_n - italic_m. Hence, similar to the above case, applying Theorem 1.10, we have 𝖵𝗈𝗅(M2)𝖵𝗈𝗅(Λ>m)+𝖵𝗈𝗅(Ω<m)+min(𝖵𝗈𝗅(Λ=m),𝖵𝗈𝗅(Ω=m))(nm)+(m1)+0=n1.𝖵𝗈𝗅subscript𝑀2𝖵𝗈𝗅subscriptΛabsent𝑚𝖵𝗈𝗅subscriptΩabsent𝑚𝖵𝗈𝗅subscriptΛabsent𝑚𝖵𝗈𝗅subscriptΩabsent𝑚𝑛𝑚𝑚10𝑛1\mathsf{Vol}(M_{2})\leq\mathsf{Vol}({\Lambda}_{>m})+\mathsf{Vol}({\Omega}_{<m}% )+\min(\mathsf{Vol}({\Lambda}_{=m}),\mathsf{Vol}({\Omega}_{=m}))\leq(n-m)+(m-1% )+0=n-1.sansserif_Vol ( italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) ≤ sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT > italic_m end_POSTSUBSCRIPT ) + sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT < italic_m end_POSTSUBSCRIPT ) + roman_min ( sansserif_Vol ( roman_Λ start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) , sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT = italic_m end_POSTSUBSCRIPT ) ) ≤ ( italic_n - italic_m ) + ( italic_m - 1 ) + 0 = italic_n - 1 .

3.1 Element distinctness on small domain

We now show a lower bound on the number of comparisons needed to solve the element distinctness problem on a small domain: Given an input (x1,,xn)subscript𝑥1subscript𝑥𝑛(x_{1},\cdots,x_{n})( italic_x start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_x start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) where each xi[n]subscript𝑥𝑖delimited-[]𝑛x_{i}\in[n]italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ [ italic_n ], check whether there exists i𝑖iitalic_i and j𝑗jitalic_j such that ij𝑖𝑗i\neq jitalic_i ≠ italic_j and xi=xjsubscript𝑥𝑖subscript𝑥𝑗x_{i}=x_{j}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT.

Any algorithm for element distinctness can be seen as a decision tree where each internal node is labeled by a comparison Xi:Xj:subscript𝑋𝑖subscript𝑋𝑗X_{i}:X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT : italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT, for some ij𝑖𝑗i\neq jitalic_i ≠ italic_j, and each leaf is labeled either Yes or No. On a given input (x1,,xn)subscript𝑥1subscript𝑥𝑛(x_{1},\cdots,x_{n})( italic_x start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_x start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) the decision tree is applied as follows. We start at the root node, traverse a path to a leaf, and declare the label of the leaf as the output. On encountering a node labeled Xi:Xj:subscript𝑋𝑖subscript𝑋𝑗X_{i}:X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT : italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT, if xixjsubscript𝑥𝑖subscript𝑥𝑗x_{i}\leq x_{j}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_x start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT, we take its left child as the next node in the path, otherwise, we take its right child. Inputs corresponding to permutations on [n]delimited-[]𝑛[n][ italic_n ] must receive the answer Yes, and inputs where xi=xjsubscript𝑥𝑖subscript𝑥𝑗x_{i}=x_{j}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT for some ij𝑖𝑗i\neq jitalic_i ≠ italic_j must receive the answer No.

We fix a decision tree T𝑇Titalic_T for the element distinctness problem and prove that its height is at least Ω(nlogn)Ω𝑛𝑛\Omega(n\log n)roman_Ω ( italic_n roman_log italic_n ). We make the following claim.

Claim 3.1.

Each permutation on [n]delimited-[]𝑛[n][ italic_n ] ends up in a distinct leaf of T𝑇Titalic_T.

This immediately implies that the number of leaves is at least n!𝑛n!italic_n ! and hence the height of the tree is at least Ω(logn!)=Ω(nlogn)Ω𝑛Ω𝑛𝑛\Omega(\log n!)=\Omega(n\log n)roman_Ω ( roman_log italic_n ! ) = roman_Ω ( italic_n roman_log italic_n ). We now turn to proving the above claim.

For the sake of contradiction we assume two distinct permutations σ=(σ1,,σn)𝜎subscript𝜎1subscript𝜎𝑛\sigma=(\sigma_{1},\cdots,\sigma_{n})italic_σ = ( italic_σ start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_σ start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) and τ=(τ1,,τn)𝜏subscript𝜏1subscript𝜏𝑛\tau=(\tau_{1},\cdots,\tau_{n})italic_τ = ( italic_τ start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_τ start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) end up at the same leaf L𝐿Litalic_L of T𝑇Titalic_T. To obtain a contradiction we will find an input (S1,,Sn)subscript𝑆1subscript𝑆𝑛(S_{1},\cdots,S_{n})( italic_S start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_S start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) where Si=Sjsubscript𝑆𝑖subscript𝑆𝑗S_{i}=S_{j}italic_S start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT = italic_S start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT for some ij𝑖𝑗i\neq jitalic_i ≠ italic_j which also ends up in the leaf L𝐿Litalic_L.

We define a poset P(L)𝑃𝐿P(L)italic_P ( italic_L ) on the set of symbols X={X1,,Xn}𝑋subscript𝑋1subscript𝑋𝑛X=\{X_{1},\cdots,X_{n}\}italic_X = { italic_X start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_X start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT }. In our poset when Xisubscript𝑋𝑖X_{i}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT and Xjsubscript𝑋𝑗X_{j}italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT are related, we will write XiXjsubscript𝑋𝑖subscript𝑋𝑗X_{i}\leq X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT and call it a constraint. For each node labeled Xi:Xj:subscript𝑋𝑖subscript𝑋𝑗X_{i}:X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT : italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT in the path from the root to the leaf L𝐿Litalic_L in the tree T𝑇Titalic_T, we have a constraint of the from XiXjsubscript𝑋𝑖subscript𝑋𝑗X_{i}\leq X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT or XjXisubscript𝑋𝑗subscript𝑋𝑖X_{j}\leq X_{i}italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT (in fact, Xj<Xisubscript𝑋𝑗subscript𝑋𝑖X_{j}<X_{i}italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT < italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT suffices, but we use the weaker form) which must be satisfied for a computation to take this path. Let C𝐶Citalic_C be the set of all such constraints. We define C(L)={C^CC^ such that (X,C^) is a poset}𝐶𝐿conditional-set^𝐶𝐶^𝐶 such that (X,C^) is a posetC(L)=\bigcap\{\hat{C}\mid C\subseteq\hat{C}\text{ such that $(X,\hat{C})$ is a% poset}\}italic_C ( italic_L ) = ⋂ { over^ start_ARG italic_C end_ARG ∣ italic_C ⊆ over^ start_ARG italic_C end_ARG such that ( italic_X , over^ start_ARG italic_C end_ARG ) is a poset }; notice that this is a non-empty intersection, as we have at least one poset, namely the total order Xσ(1)Xσ(2)Xσ(n)subscript𝑋𝜎1subscript𝑋𝜎2subscript𝑋𝜎𝑛X_{\sigma(1)}\leq X_{\sigma(2)}\leq\cdots\leq X_{\sigma(n)}italic_X start_POSTSUBSCRIPT italic_σ ( 1 ) end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_σ ( 2 ) end_POSTSUBSCRIPT ≤ ⋯ ≤ italic_X start_POSTSUBSCRIPT italic_σ ( italic_n ) end_POSTSUBSCRIPT which satisfies all constraints in C𝐶Citalic_C as σ𝜎\sigmaitalic_σ ends up in the leaf L𝐿Litalic_L. We define P(L):=(X,C(L))assign𝑃𝐿𝑋𝐶𝐿P(L):=(X,C(L))italic_P ( italic_L ) := ( italic_X , italic_C ( italic_L ) ).

We say an input (x1,,xn)subscript𝑥1subscript𝑥𝑛(x_{1},\cdots,x_{n})( italic_x start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , ⋯ , italic_x start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT ) respects a poset P𝑃Pitalic_P if xixjsubscript𝑥𝑖subscript𝑥𝑗x_{i}\leq x_{j}italic_x start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_x start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT whenever XiXjsubscript𝑋𝑖subscript𝑋𝑗X_{i}\leq X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT is a constraint in P𝑃Pitalic_P. The following proposition is easy to prove.

Proposition 3.2.

An input reaches the leaf L𝐿Litalic_L iff it respects the poset P(L)𝑃𝐿P(L)italic_P ( italic_L ).

Next, observe that since σ𝜎\sigmaitalic_σ and τ𝜏\tauitalic_τ are two distinct permutations that respect P(L)𝑃𝐿P(L)italic_P ( italic_L ), the length of a largest chain in P(L)𝑃𝐿P(L)italic_P ( italic_L ) is at most n1𝑛1n-1italic_n - 1.555At this point, the proof in [Meh84] instantly concludes that there must be two elements in the poset that are not related and fixes an input which respects the poset and where these two coordinates are equal, to complete the proof, without specifying why such an input exists. We fill such gaps in the proof. Mirsky’s theorem [Mir71] then implies that there is an antichain decomposition of P(L)𝑃𝐿P(L)italic_P ( italic_L ) with at most n1𝑛1n-1italic_n - 1 antichains. Since X𝑋Xitalic_X has n𝑛nitalic_n elements, there must be an antichain in P(L)𝑃𝐿P(L)italic_P ( italic_L ) that has at least two elements. Let A𝐴Aitalic_A be a maximal antichain in P(L)𝑃𝐿P(L)italic_P ( italic_L ) that has at least two elements. We can write X𝑋Xitalic_X as a disjoint union of three sets X=QAR𝑋𝑄𝐴𝑅X=Q\uplus A\uplus Ritalic_X = italic_Q ⊎ italic_A ⊎ italic_R, where Q𝑄Qitalic_Q consists of elements below A𝐴Aitalic_A and R𝑅Ritalic_R consists of elements above A𝐴Aitalic_A in the poset P(L)𝑃𝐿P(L)italic_P ( italic_L ): Q={XiXA there exists XjA such that XiXj}𝑄conditional-setsubscript𝑋𝑖𝑋𝐴 there exists subscript𝑋𝑗𝐴 such that subscript𝑋𝑖subscript𝑋𝑗Q=\{X_{i}\in X\setminus A\mid\text{ there exists }X_{j}\in A\text{ such that }% X_{i}\leq X_{j}\}italic_Q = { italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ italic_X ∖ italic_A ∣ there exists italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ∈ italic_A such that italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT } and R={XiXA there exists XjA such that XjXi}𝑅conditional-setsubscript𝑋𝑖𝑋𝐴 there exists subscript𝑋𝑗𝐴 such that subscript𝑋𝑗subscript𝑋𝑖R=\{X_{i}\in X\setminus A\mid\text{ there exists }X_{j}\in A\text{ such that }% X_{j}\leq X_{i}\}italic_R = { italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ italic_X ∖ italic_A ∣ there exists italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ∈ italic_A such that italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT } (observe that an element cannot be both above and below A𝐴Aitalic_A). The constraints in C(L)𝐶𝐿C(L)italic_C ( italic_L ) restricted to Q𝑄Qitalic_Q and restricted to R𝑅Ritalic_R give rise to the posets: PQsubscript𝑃𝑄P_{Q}italic_P start_POSTSUBSCRIPT italic_Q end_POSTSUBSCRIPT and PRsubscript𝑃𝑅P_{R}italic_P start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT. Now we define the poset (X,D)𝑋𝐷(X,D)( italic_X , italic_D ) such that C(L)D𝐶𝐿𝐷C(L)\subseteq Ditalic_C ( italic_L ) ⊆ italic_D as follows. Take a linear extension of PQsubscript𝑃𝑄P_{Q}italic_P start_POSTSUBSCRIPT italic_Q end_POSTSUBSCRIPT: Xt1Xtqsubscript𝑋subscript𝑡1subscript𝑋subscript𝑡𝑞X_{t_{1}}\leq\cdots\leq X_{t_{q}}italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT ≤ ⋯ ≤ italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q end_POSTSUBSCRIPT end_POSTSUBSCRIPT and add all the implied constraints to D𝐷Ditalic_D. Do not add any constraints between the elements of the antichain A={Xtq+1,Xtq+2,,Xtq+a}𝐴subscript𝑋subscript𝑡𝑞1subscript𝑋subscript𝑡𝑞2subscript𝑋subscript𝑡𝑞𝑎A=\{X_{t_{q+1}},X_{t_{q+2}},\cdots,X_{t_{q+a}}\}italic_A = { italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT , italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + 2 end_POSTSUBSCRIPT end_POSTSUBSCRIPT , ⋯ , italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + italic_a end_POSTSUBSCRIPT end_POSTSUBSCRIPT }. Take a linear extension of PRsubscript𝑃𝑅P_{R}italic_P start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT: Xtq+a+1Xtnsubscript𝑋subscript𝑡𝑞𝑎1subscript𝑋subscript𝑡𝑛X_{t_{q+a+1}}\leq\cdots\leq X_{t_{n}}italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + italic_a + 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT ≤ ⋯ ≤ italic_X start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUBSCRIPT and add all the implied constraints to D𝐷Ditalic_D. Furthermore, add the following constraints to D𝐷Ditalic_D: For each XiXsubscript𝑋𝑖𝑋X_{i}\in Xitalic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ italic_X, add XiXisubscript𝑋𝑖subscript𝑋𝑖X_{i}\leq X_{i}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT. For each XiQsubscript𝑋𝑖𝑄X_{i}\in Qitalic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ italic_Q and XjARsubscript𝑋𝑗𝐴𝑅X_{j}\in A\cup Ritalic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ∈ italic_A ∪ italic_R, add XiXjsubscript𝑋𝑖subscript𝑋𝑗X_{i}\leq X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT. For each XiAsubscript𝑋𝑖𝐴X_{i}\in Aitalic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ∈ italic_A and each XjRsubscript𝑋𝑗𝑅X_{j}\in Ritalic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT ∈ italic_R, add XiXjsubscript𝑋𝑖subscript𝑋𝑗X_{i}\leq X_{j}italic_X start_POSTSUBSCRIPT italic_i end_POSTSUBSCRIPT ≤ italic_X start_POSTSUBSCRIPT italic_j end_POSTSUBSCRIPT. Clearly, C(L)D𝐶𝐿𝐷C(L)\subseteq Ditalic_C ( italic_L ) ⊆ italic_D. Now fix the input S𝑆Sitalic_S such that St1=1,St2=2,,Stq=qformulae-sequencesubscript𝑆subscript𝑡11formulae-sequencesubscript𝑆subscript𝑡22subscript𝑆subscript𝑡𝑞𝑞S_{t_{1}}=1,S_{t_{2}}=2,\cdots,S_{t_{q}}=qitalic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = 1 , italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = 2 , ⋯ , italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_q, Stq+1=Stq+2==Stq+a=q+1subscript𝑆subscript𝑡𝑞1subscript𝑆subscript𝑡𝑞2subscript𝑆subscript𝑡𝑞𝑎𝑞1S_{t_{q+1}}=S_{t_{q+2}}=\cdots=S_{t_{q+a}}=q+1italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + 2 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = ⋯ = italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + italic_a end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_q + 1, Stq+a+1=q+2,Stq+a+2=q+3,,Stn=n(a1))S_{t_{q+a+1}}=q+2,S_{t_{q+a+2}}=q+3,\cdots,S_{t_{n}}=n-(a-1))italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + italic_a + 1 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_q + 2 , italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_q + italic_a + 2 end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_q + 3 , ⋯ , italic_S start_POSTSUBSCRIPT italic_t start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUBSCRIPT = italic_n - ( italic_a - 1 ) ). Now, S𝑆Sitalic_S clearly respects the poset (X,D)𝑋𝐷(X,D)( italic_X , italic_D ). Thus, it also respects the poset P(L)𝑃𝐿P(L)italic_P ( italic_L ) (as C(L)D𝐶𝐿𝐷C(L)\subseteq Ditalic_C ( italic_L ) ⊆ italic_D) and reaches the leaf L𝐿Litalic_L. Since a=|A|2𝑎𝐴2a=|A|\geq 2italic_a = | italic_A | ≥ 2, S𝑆Sitalic_S is a No instance which reaches L𝐿Litalic_L, a contradiction.∎

4 Uniform price matching

In this section, we prove Theorem 1.11, i.e., we obtain a linear time algorithm for uniform price matching. We begin by first describing the previous O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) algorithm as described in [NSS21], which we will critically use in establishing the correctness of our linear time algorithm.

We may assume that the input lists of asks A𝐴Aitalic_A and bids B𝐵Bitalic_B are such that 𝖵𝗈𝗅(A)=𝖵𝗈𝗅(B)𝖵𝗈𝗅𝐴𝖵𝗈𝗅𝐵\mathsf{Vol}(A)=\mathsf{Vol}(B)sansserif_Vol ( italic_A ) = sansserif_Vol ( italic_B ). This can be achieved by adding a dummy order. Say 𝖵𝗈𝗅(A)<𝖵𝗈𝗅(B)𝖵𝗈𝗅𝐴𝖵𝗈𝗅𝐵\mathsf{Vol}(A)<\mathsf{Vol}(B)sansserif_Vol ( italic_A ) < sansserif_Vol ( italic_B ), then add a dummy ask with 𝗉𝗋𝗂𝖼𝖾=𝗉𝗋𝗂𝖼𝖾\mathsf{price}=\inftysansserif_price = ∞ and 𝗊𝗍𝗒=𝖵𝗈𝗅(B)𝖵𝗈𝗅(A)𝗊𝗍𝗒𝖵𝗈𝗅𝐵𝖵𝗈𝗅𝐴\mathsf{qty}=\mathsf{Vol}(B)-\mathsf{Vol}(A)sansserif_qty = sansserif_Vol ( italic_B ) - sansserif_Vol ( italic_A ). If 𝖵𝗈𝗅(A)>𝖵𝗈𝗅(B)𝖵𝗈𝗅𝐴𝖵𝗈𝗅𝐵\mathsf{Vol}(A)>\mathsf{Vol}(B)sansserif_Vol ( italic_A ) > sansserif_Vol ( italic_B ), then add a dummy bid with 𝗉𝗋𝗂𝖼𝖾=1𝗉𝗋𝗂𝖼𝖾1\mathsf{price}=-1sansserif_price = - 1 and 𝗊𝗍𝗒=𝖵𝗈𝗅(A)𝖵𝗈𝗅(B)𝗊𝗍𝗒𝖵𝗈𝗅𝐴𝖵𝗈𝗅𝐵\mathsf{qty}=\mathsf{Vol}(A)-\mathsf{Vol}(B)sansserif_qty = sansserif_Vol ( italic_A ) - sansserif_Vol ( italic_B ). Strictly speaking, according to our definition, we cannot set the 𝗉𝗋𝗂𝖼𝖾𝗉𝗋𝗂𝖼𝖾\mathsf{price}sansserif_price to be \infty or 11-1- 1, but our definitions can be adjusted to allow for this.

4.1 Previous algorithm

We describe the algorithm in [NSS21], which we denote by 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT. The transaction prices that are set by 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT are not guaranteed to be uniform initially. After the matching is produced, a linear time algorithm is employed to put a uniform transaction price for all the transactions. For example, the maximum of the limit prices of the asks that participate in the output matching can be set as the transaction price of all the transactions in the output matching.

Given the list of bids B and asks A, 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT first sorts the lists based on their respective competitiveness with the most competitive order on the top. It then invokes 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match on the sorted lists B𝐵Bitalic_B, A𝐴Aitalic_A, and an empty matching M𝑀Mitalic_M. Throughout the algorithm, M𝑀Mitalic_M can only grow, and at the end of the algorithm, M𝑀Mitalic_M will contain a desired uniform-price matching.

Algorithm 1 Uniform Matching 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT
function 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT(Bids B𝐵Bitalic_B, Asks A𝐴Aitalic_A)
     Sort the lists B𝐵Bitalic_B and A𝐴Aitalic_A based on their respective competitiveness
     return 𝖬𝖺𝗍𝖼𝗁(B,A,)𝖬𝖺𝗍𝖼𝗁𝐵𝐴\mathsf{Match}(B,A,\emptyset)sansserif_Match ( italic_B , italic_A , ∅ )

𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match on (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ) picks the most competitive bid b𝑏bitalic_b and the most competitive ask a𝑎aitalic_a from B𝐵Bitalic_B and A𝐴Aitalic_A respectively, and checks if they are tradable. If they are not tradable, it returns M𝑀Mitalic_M, and the algorithm terminates.

Otherwise, if they are tradable, it adds a transaction between b𝑏bitalic_b and a𝑎aitalic_a with transaction quantity q=min{𝗊𝗍𝗒(a),𝗊𝗍𝗒(b)}𝑞𝗊𝗍𝗒𝑎𝗊𝗍𝗒𝑏q=\min\{\mathsf{qty}(a),\mathsf{qty}(b)\}italic_q = roman_min { sansserif_qty ( italic_a ) , sansserif_qty ( italic_b ) } to M𝑀Mitalic_M, reduces the quantity of a𝑎aitalic_a and b𝑏bitalic_b by q𝑞qitalic_q in the lists B𝐵Bitalic_B and A𝐴Aitalic_A. Note that at least one of b𝑏bitalic_b or a𝑎aitalic_a must be fully exhausted and removed completely from B𝐵Bitalic_B or A𝐴Aitalic_A. It then recursively calls 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match on (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ).

Algorithm 2 The 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match subroutine
function 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match(Bids B𝐵Bitalic_B, Asks A𝐴Aitalic_A, Matching M𝑀Mitalic_M) \triangleright Initially, M=𝑀M=\emptysetitalic_M = ∅.
     if |B|=0𝐵0|B|=0| italic_B | = 0 or |A|=0𝐴0|A|=0| italic_A | = 0 then
         return M      
     
     b𝗉𝗈𝗉(B)𝑏𝗉𝗈𝗉𝐵b\leftarrow\mathsf{pop}(B)italic_b ← sansserif_pop ( italic_B )
     a𝗉𝗈𝗉(A)𝑎𝗉𝗈𝗉𝐴a\leftarrow\mathsf{pop}(A)italic_a ← sansserif_pop ( italic_A )
     
     if 𝗉𝗋𝗂𝖼𝖾(b)<𝗉𝗋𝗂𝖼𝖾(a)𝗉𝗋𝗂𝖼𝖾𝑏𝗉𝗋𝗂𝖼𝖾𝑎\mathsf{price}(b)<\mathsf{price}(a)sansserif_price ( italic_b ) < sansserif_price ( italic_a ) then
         𝗉𝗎𝗌𝗁(B,b)𝗉𝗎𝗌𝗁𝐵𝑏\mathsf{push}(B,b)sansserif_push ( italic_B , italic_b )
         return 𝖬𝖺𝗍𝖼𝗁(B,A,M)𝖬𝖺𝗍𝖼𝗁𝐵𝐴𝑀\mathsf{Match}(B,A,M)sansserif_Match ( italic_B , italic_A , italic_M )      \triangleright otherwise, b and a are tradable
     qmin{𝗊𝗍𝗒(a),𝗊𝗍𝗒(b)}𝑞𝗊𝗍𝗒𝑎𝗊𝗍𝗒𝑏q\leftarrow\min\{\mathsf{qty}(a),\mathsf{qty}(b)\}italic_q ← roman_min { sansserif_qty ( italic_a ) , sansserif_qty ( italic_b ) }
     
     𝗉𝗎𝗌𝗁(M,{(𝗂𝖽(b),𝗂𝖽(a),q,𝗉𝗋𝗂𝖼𝖾(a))})𝗉𝗎𝗌𝗁𝑀𝗂𝖽𝑏𝗂𝖽𝑎𝑞𝗉𝗋𝗂𝖼𝖾𝑎\mathsf{push}(M,\{(\mathsf{id}(b),\mathsf{id}(a),q,\mathsf{price}(a))\})sansserif_push ( italic_M , { ( sansserif_id ( italic_b ) , sansserif_id ( italic_a ) , italic_q , sansserif_price ( italic_a ) ) } )
     
     if 𝗊𝗍𝗒(b)q>0𝗊𝗍𝗒𝑏𝑞0\mathsf{qty}(b)-q>0sansserif_qty ( italic_b ) - italic_q > 0 then
         𝗉𝗎𝗌𝗁(B,(𝗂𝖽(b),𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(b),𝗊𝗍𝗒(b)q,𝗉𝗋𝗂𝖼𝖾(b)))𝗉𝗎𝗌𝗁𝐵𝗂𝖽𝑏𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉𝑏𝗊𝗍𝗒𝑏𝑞𝗉𝗋𝗂𝖼𝖾𝑏\mathsf{push}(B,(\mathsf{id}(b),\mathsf{timestamp}(b),\mathsf{qty}(b)-q,% \mathsf{price}(b)))sansserif_push ( italic_B , ( sansserif_id ( italic_b ) , sansserif_timestamp ( italic_b ) , sansserif_qty ( italic_b ) - italic_q , sansserif_price ( italic_b ) ) )      
     if 𝗊𝗍𝗒(a)q>0𝗊𝗍𝗒𝑎𝑞0\mathsf{qty}(a)-q>0sansserif_qty ( italic_a ) - italic_q > 0 then
         𝗉𝗎𝗌𝗁(A,(𝗂𝖽(a),𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(a),𝗊𝗍𝗒(a)q,𝗉𝗋𝗂𝖼𝖾(a)))𝗉𝗎𝗌𝗁𝐴𝗂𝖽𝑎𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉𝑎𝗊𝗍𝗒𝑎𝑞𝗉𝗋𝗂𝖼𝖾𝑎\mathsf{push}(A,(\mathsf{id}(a),\mathsf{timestamp}(a),\mathsf{qty}(a)-q,% \mathsf{price}(a)))sansserif_push ( italic_A , ( sansserif_id ( italic_a ) , sansserif_timestamp ( italic_a ) , sansserif_qty ( italic_a ) - italic_q , sansserif_price ( italic_a ) ) )      
     
     return 𝖬𝖺𝗍𝖼𝗁(B,A,M)𝖬𝖺𝗍𝖼𝗁𝐵𝐴𝑀\mathsf{Match}(B,A,M)sansserif_Match ( italic_B , italic_A , italic_M )

Clearly 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT takes O(nlogn)𝑂𝑛𝑛O(n\log n)italic_O ( italic_n roman_log italic_n ) time, whereas 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match takes O(n)𝑂𝑛O(n)italic_O ( italic_n ) time, where n=|A|+|B|𝑛𝐴𝐵n=|A|+|B|italic_n = | italic_A | + | italic_B |.

The algorithm can be simply described as first sorting the lists B𝐵Bitalic_B and A𝐴Aitalic_A based on competitiveness, and then doing a top-down greedy matching as long as the current bid and ask are tradable.

The following result states that the above result is correct.

Theorem 4.1 (Theorem 20 of [NSS21]).

𝖴𝖬*(B,A)superscript𝖴𝖬𝐵𝐴\mathsf{UM^{*}}(B,A)sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) outputs a uniform price matching.

We give a brief intuition of the proof of the above result. Let M=𝖴𝖬*(B,A)𝑀superscript𝖴𝖬𝐵𝐴M=\mathsf{UM^{*}}(B,A)italic_M = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ). To see that M𝑀Mitalic_M is a fair matching is trivial, as it starts matching the bids and asks in the decreasing order of competitiveness. Similarly, it is easy to convince oneself that M𝑀Mitalic_M has a uniform price; any price between the limit prices of the last paired bid and ask is acceptable to all orders that participate in the matching; this again follows from the fact that matching is done top down in the order of decreasing competitiveness. Finally, to see that M𝑀Mitalic_M has maximum volume needs some work: fix an optimal matching 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT. We can gradually transform 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT into M𝑀Mitalic_M without altering its volume. The illuminating case to consider is when the most competitive orders b𝑏bitalic_b and a𝑎aitalic_a are fully traded in M𝑀Mitalic_M. Note that the transaction quantity between b𝑏bitalic_b and a𝑎aitalic_a in M𝑀Mitalic_M is q=min{𝗊𝗍𝗒(b),𝗊𝗍𝗒(a)}𝑞𝗊𝗍𝗒𝑏𝗊𝗍𝗒𝑎q=\min\{\mathsf{qty}(b),\mathsf{qty}(a)\}italic_q = roman_min { sansserif_qty ( italic_b ) , sansserif_qty ( italic_a ) }. Since 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT is fair, b𝑏bitalic_b and a𝑎aitalic_a must also be fully traded in 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT. In particular 𝖰𝗍𝗒(b,𝖮𝖯𝖳)q𝖰𝗍𝗒𝑏𝖮𝖯𝖳𝑞\mathsf{Qty}(b,\mathsf{OPT})\geq qsansserif_Qty ( italic_b , sansserif_OPT ) ≥ italic_q and 𝖰𝗍𝗒(a,𝖮𝖯𝖳)q𝖰𝗍𝗒𝑎𝖮𝖯𝖳𝑞\mathsf{Qty}(a,\mathsf{OPT})\geq qsansserif_Qty ( italic_a , sansserif_OPT ) ≥ italic_q. Now, if the transaction quantity between b𝑏bitalic_b and a𝑎aitalic_a in 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT is strictly less than q𝑞qitalic_q, then 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT can be modified by making the transaction quantity between b𝑏bitalic_b and a𝑎aitalic_a equal to q𝑞qitalic_q. Let us say b𝑏bitalic_b is matched with asuperscript𝑎a^{\prime}italic_a start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT and a𝑎aitalic_a is matched with bsuperscript𝑏b^{\prime}italic_b start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT in 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT, then we can reduce the quantity of these transactions by a unit quantity, increase the transaction quantity between b𝑏bitalic_b and a𝑎aitalic_a by unit quantity, and increase the transaction quantity between bsuperscript𝑏b^{\prime}italic_b start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT and asuperscript𝑎a^{\prime}italic_a start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT by a unit quantity (this is possible since every matched bid is tradable with every matched ask as all the transaction prices are identical). Note that in the end, 𝖵𝗈𝗅(𝖮𝖯𝖳)𝖵𝗈𝗅𝖮𝖯𝖳\mathsf{Vol}(\mathsf{OPT})sansserif_Vol ( sansserif_OPT ) remains the same. We can repeat this surgery over and over again till the matched quantity between b𝑏bitalic_b and a𝑎aitalic_a in 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT becomes equal to q𝑞qitalic_q. We remove this transaction from both 𝖮𝖯𝖳𝖮𝖯𝖳\mathsf{OPT}sansserif_OPT and M𝑀Mitalic_M and apply the same argument repeatedly till M=𝖮𝖯𝖳𝑀𝖮𝖯𝖳M=\mathsf{OPT}italic_M = sansserif_OPT.

4.2 Useful lemmas and subroutines

Before we proceed to describe our improved algorithm, we establish certain lemmas and subroutines that will be useful in describing our algorithm and proving its correctness.

We first need some definitions.

Definition 4.2 (𝖲𝗉𝗅𝗂𝗍𝖲𝗉𝗅𝗂𝗍\mathsf{Split}sansserif_Split, 𝖱𝖺𝗇𝗀𝖾𝖱𝖺𝗇𝗀𝖾\mathsf{Range}sansserif_Range).

For a set of bids or a set of asks ΩΩ\Omegaroman_Ω and an element ωΩ𝜔Ω\omega\in\Omegaitalic_ω ∈ roman_Ω, 𝖲𝗉𝗅𝗂𝗍(Ω,ω)𝖲𝗉𝗅𝗂𝗍Ω𝜔\mathsf{Split}(\Omega,\omega)sansserif_Split ( roman_Ω , italic_ω ) returns a partition of Ω=(Ω,Ω)ΩsubscriptΩsucceeds-or-equalssubscriptΩprecedes\Omega=(\Omega_{\succeq},\Omega_{\prec})roman_Ω = ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ), where Ω={xΩxω}subscriptΩsucceeds-or-equalsconditional-set𝑥Ωsucceeds-or-equals𝑥𝜔\Omega_{\succeq}=\{x\in\Omega\mid x\succeq\omega\}roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT = { italic_x ∈ roman_Ω ∣ italic_x ⪰ italic_ω } and Ω={xΩxω}subscriptΩprecedesconditional-set𝑥Ωprecedes𝑥𝜔\Omega_{\prec}=\{x\in\Omega\mid x\prec\omega\}roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT = { italic_x ∈ roman_Ω ∣ italic_x ≺ italic_ω }. Thus, 𝖲𝗉𝗅𝗂𝗍𝖲𝗉𝗅𝗂𝗍\mathsf{Split}sansserif_Split splits ΩΩ\Omegaroman_Ω into two parts, one containing orders that are at least as competitive as ω𝜔\omegaitalic_ω, and the other containing orders that are less competitive than ω𝜔\omegaitalic_ω. Clearly, 𝖲𝗉𝗅𝗂𝗍𝖲𝗉𝗅𝗂𝗍\mathsf{Split}sansserif_Split can be implemented in linear time.

We now define the range of an order in a set of orders ΩΩ\Omegaroman_Ω which are all bids or all asks. Let ω𝜔\omegaitalic_ω be an order in ΩΩ\Omegaroman_Ω. Let 𝖲𝗉𝗅𝗂𝗍(Ω,ω)=(Ω,Ω)𝖲𝗉𝗅𝗂𝗍Ω𝜔subscriptΩsucceeds-or-equalssubscriptΩprecedes\mathsf{Split}(\Omega,\omega)=(\Omega_{\succeq},\Omega_{\prec})sansserif_Split ( roman_Ω , italic_ω ) = ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ). Let Ω=Ω{ω}subscriptΩsucceedssubscriptΩsucceeds-or-equals𝜔\Omega_{\succ}=\Omega_{\succeq}\setminus\{\omega\}roman_Ω start_POSTSUBSCRIPT ≻ end_POSTSUBSCRIPT = roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ∖ { italic_ω }. 𝖱𝖺𝗇𝗀𝖾Ω(ω)={x𝖵𝗈𝗅(Ω)<x𝖵𝗈𝗅(Ω)}subscript𝖱𝖺𝗇𝗀𝖾Ω𝜔conditional-set𝑥𝖵𝗈𝗅subscriptΩsucceeds𝑥𝖵𝗈𝗅subscriptΩsucceeds-or-equals\mathsf{Range}_{\Omega}(\omega)=\{x\in\mathbb{N}\mid\mathsf{Vol}(\Omega_{\succ% })<x\leq\mathsf{Vol}(\Omega_{\succeq})\}sansserif_Range start_POSTSUBSCRIPT roman_Ω end_POSTSUBSCRIPT ( italic_ω ) = { italic_x ∈ blackboard_N ∣ sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ≻ end_POSTSUBSCRIPT ) < italic_x ≤ sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) }. If all orders in ΩΩ\Omegaroman_Ω have unit quantities, then the 𝖱𝖺𝗇𝗀𝖾Ωsubscript𝖱𝖺𝗇𝗀𝖾Ω\mathsf{Range}_{\Omega}sansserif_Range start_POSTSUBSCRIPT roman_Ω end_POSTSUBSCRIPT of the ithsuperscript𝑖thi^{\text{th}}italic_i start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive order is the singleton {i}𝑖\{i\}{ italic_i }. In general, range of the most competitive order ω1subscript𝜔1\omega_{1}italic_ω start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is the set {1,,𝗊𝗍𝗒(ω1)}1𝗊𝗍𝗒subscript𝜔1\{1,\cdots,\mathsf{qty}(\omega_{1})\}{ 1 , ⋯ , sansserif_qty ( italic_ω start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) }. The range of the next most competitive order ω2subscript𝜔2\omega_{2}italic_ω start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is {𝗊𝗍𝗒(ω1)+1,,𝗊𝗍𝗒(ω1)+𝗊𝗍𝗒(ω2)}𝗊𝗍𝗒subscript𝜔11𝗊𝗍𝗒subscript𝜔1𝗊𝗍𝗒subscript𝜔2\{\mathsf{qty}(\omega_{1})+1,\cdots,\mathsf{qty}(\omega_{1})+\mathsf{qty}(% \omega_{2})\}{ sansserif_qty ( italic_ω start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) + 1 , ⋯ , sansserif_qty ( italic_ω start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) + sansserif_qty ( italic_ω start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) }, and so on. Thus, the ranges of orders in ΩΩ\Omegaroman_Ω partition [𝖵𝗈𝗅(Ω)]delimited-[]𝖵𝗈𝗅Ω[\mathsf{Vol}(\Omega)][ sansserif_Vol ( roman_Ω ) ].

Observe the following fact about the previous algorithm 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT.

Lemma 4.3.

If a bid bB𝑏𝐵b\in Bitalic_b ∈ italic_B and an ask aA𝑎𝐴a\in Aitalic_a ∈ italic_A are matched in the matching output by 𝖴𝖬*(B,A)superscript𝖴𝖬𝐵𝐴\mathsf{UM^{*}}(B,A)sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ), then 𝖱𝖺𝗇𝗀𝖾B(b)𝖱𝖺𝗇𝗀𝖾A(a)subscript𝖱𝖺𝗇𝗀𝖾𝐵𝑏subscript𝖱𝖺𝗇𝗀𝖾𝐴𝑎\mathsf{Range}_{B}(b)\cap\mathsf{Range}_{A}(a)\neq\emptysetsansserif_Range start_POSTSUBSCRIPT italic_B end_POSTSUBSCRIPT ( italic_b ) ∩ sansserif_Range start_POSTSUBSCRIPT italic_A end_POSTSUBSCRIPT ( italic_a ) ≠ ∅.

This is trivial to see when all orders in BA𝐵𝐴B\cup Aitalic_B ∪ italic_A have unit quantities since 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT matches the ithsuperscript𝑖thi^{\text{th}}italic_i start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive bid with the ithsuperscript𝑖thi^{\text{th}}italic_i start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive ask for all i𝖵𝗈𝗅(M)𝑖𝖵𝗈𝗅𝑀i\leq\mathsf{Vol}(M)italic_i ≤ sansserif_Vol ( italic_M ), where M=𝖴𝖬*(B,A)𝑀superscript𝖴𝖬𝐵𝐴M=\mathsf{UM^{*}}(B,A)italic_M = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ), and the 𝖱𝖺𝗇𝗀𝖾𝖱𝖺𝗇𝗀𝖾\mathsf{Range}sansserif_Range of the ithsuperscript𝑖thi^{\text{th}}italic_i start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive bid (and ask) is the singleton {i}𝑖\{i\}{ italic_i }. To see why the general statement is true observe that whenever 𝖬𝖺𝗍𝖼𝗁(B^,A^,M^)𝖬𝖺𝗍𝖼𝗁^𝐵^𝐴^𝑀\mathsf{Match}(\hat{B},\hat{A},\hat{M})sansserif_Match ( over^ start_ARG italic_B end_ARG , over^ start_ARG italic_A end_ARG , over^ start_ARG italic_M end_ARG ) is called it potentially matches the most competitive bid bB^𝑏^𝐵b\in\hat{B}italic_b ∈ over^ start_ARG italic_B end_ARG with the most competitive ask aA^𝑎^𝐴a\in\hat{A}italic_a ∈ over^ start_ARG italic_A end_ARG, and 𝖵𝗈𝗅(M^)+1𝖱𝖺𝗇𝗀𝖾B(b)𝖱𝖺𝗇𝗀𝖾A(a)𝖵𝗈𝗅^𝑀1subscript𝖱𝖺𝗇𝗀𝖾𝐵𝑏subscript𝖱𝖺𝗇𝗀𝖾𝐴𝑎\mathsf{Vol}(\hat{M})+1\in\mathsf{Range}_{B}(b)\cap\mathsf{Range}_{A}(a)sansserif_Vol ( over^ start_ARG italic_M end_ARG ) + 1 ∈ sansserif_Range start_POSTSUBSCRIPT italic_B end_POSTSUBSCRIPT ( italic_b ) ∩ sansserif_Range start_POSTSUBSCRIPT italic_A end_POSTSUBSCRIPT ( italic_a ).

Our main workhorse is the 𝖲𝖾𝗅𝖾𝖼𝗍𝖲𝖾𝗅𝖾𝖼𝗍\mathsf{Select}sansserif_Select subroutine which works in linear time by employing the classical algorithm of [BFP+{}^{+}start_FLOATSUPERSCRIPT + end_FLOATSUPERSCRIPT73]. Given a list of orders (all bids or all asks) ΩΩ\Omegaroman_Ω and a number t|Ω|𝑡Ωt\leq|\Omega|italic_t ≤ | roman_Ω |, 𝖲𝖾𝗅𝖾𝖼𝗍(Ω,t)𝖲𝖾𝗅𝖾𝖼𝗍Ω𝑡\mathsf{Select}(\Omega,t)sansserif_Select ( roman_Ω , italic_t ) outputs the tthsuperscript𝑡tht^{\text{th}}italic_t start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive order in ΩΩ\Omegaroman_Ω.

We also use a weighted version of 𝖲𝖾𝗅𝖾𝖼𝗍𝖲𝖾𝗅𝖾𝖼𝗍\mathsf{Select}sansserif_Select called 𝖲𝖾𝗅𝖾𝖼𝗍𝖰𝖲𝖾𝗅𝖾𝖼𝗍𝖰\mathsf{SelectQ}sansserif_SelectQ which takes as input ΩΩ\Omegaroman_Ω and a quantity q𝖵𝗈𝗅(Ω)𝑞𝖵𝗈𝗅Ωq\leq\mathsf{Vol}(\Omega)italic_q ≤ sansserif_Vol ( roman_Ω ) and outputs the unique element ωΩ𝜔Ω\omega\in\Omegaitalic_ω ∈ roman_Ω such that q𝖱𝖺𝗇𝗀𝖾Ω(ω)𝑞subscript𝖱𝖺𝗇𝗀𝖾Ω𝜔q\in\mathsf{Range}_{\Omega}(\omega)italic_q ∈ sansserif_Range start_POSTSUBSCRIPT roman_Ω end_POSTSUBSCRIPT ( italic_ω ). 𝖲𝖾𝗅𝖾𝖼𝗍𝖰𝖲𝖾𝗅𝖾𝖼𝗍𝖰\mathsf{SelectQ}sansserif_SelectQ can be implemented in linear time using the 𝖲𝖾𝗅𝖾𝖼𝗍𝖲𝖾𝗅𝖾𝖼𝗍\mathsf{Select}sansserif_Select algorithm as subroutine as described below.

Algorithm 3 Weighted Selection where weights are quantities
function 𝖲𝖾𝗅𝖾𝖼𝗍𝖰𝖲𝖾𝗅𝖾𝖼𝗍𝖰\mathsf{SelectQ}sansserif_SelectQ(Orders ΩΩ\Omegaroman_Ω, q𝑞qitalic_q)
     ω=𝖲𝖾𝗅𝖾𝖼𝗍(Ω,|Ω|2)𝜔𝖲𝖾𝗅𝖾𝖼𝗍ΩΩ2\omega=\mathsf{Select}(\Omega,\lceil\frac{|\Omega|}{2}\rceil)italic_ω = sansserif_Select ( roman_Ω , ⌈ divide start_ARG | roman_Ω | end_ARG start_ARG 2 end_ARG ⌉ )
     (Ω,Ω)𝖲𝗉𝗅𝗂𝗍(Ω,ω)subscriptΩsucceeds-or-equalssubscriptΩprecedes𝖲𝗉𝗅𝗂𝗍Ω𝜔(\Omega_{\succeq},\Omega_{\prec})\leftarrow\mathsf{Split}(\Omega,\omega)( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) ← sansserif_Split ( roman_Ω , italic_ω )
     
     if 𝖵𝗈𝗅(Ω)𝗊𝗍𝗒(ω)<q𝖵𝗈𝗅(Ω)𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝗊𝗍𝗒𝜔𝑞𝖵𝗈𝗅subscriptΩsucceeds-or-equals\mathsf{Vol}(\Omega_{\succeq})-\mathsf{qty}(\omega)<q\leq\mathsf{Vol}(\Omega_{% \succeq})sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) - sansserif_qty ( italic_ω ) < italic_q ≤ sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) then
         return ω𝜔\omegaitalic_ω      
     if q𝖵𝗈𝗅(Ω)𝗊𝗍𝗒(ω)𝑞𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝗊𝗍𝗒𝜔q\leq\mathsf{Vol}(\Omega_{\succeq})-\mathsf{qty}(\omega)italic_q ≤ sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) - sansserif_qty ( italic_ω ) then
         return 𝖲𝖾𝗅𝖾𝖼𝗍𝖰(Ω,q)𝖲𝖾𝗅𝖾𝖼𝗍𝖰subscriptΩsucceeds-or-equals𝑞\mathsf{SelectQ}(\Omega_{\succeq},q)sansserif_SelectQ ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_q )      
     if q>𝖵𝗈𝗅(Ω)𝑞𝖵𝗈𝗅subscriptΩsucceeds-or-equalsq>\mathsf{Vol}(\Omega_{\succeq})italic_q > sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) then
         return 𝖲𝖾𝗅𝖾𝖼𝗍𝖰(Ω,q𝖵𝗈𝗅(Ω))𝖲𝖾𝗅𝖾𝖼𝗍𝖰subscriptΩprecedes𝑞𝖵𝗈𝗅subscriptΩsucceeds-or-equals\mathsf{SelectQ}(\Omega_{\prec},q-\mathsf{Vol}(\Omega_{\succeq}))sansserif_SelectQ ( roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_q - sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) )      

We get the following recurrence relationship on the running time of 𝖲𝖾𝗅𝖾𝖼𝗍𝖰𝖲𝖾𝗅𝖾𝖼𝗍𝖰\mathsf{SelectQ}sansserif_SelectQ: T(n)T(n/2+1)+O(n)𝑇𝑛𝑇𝑛21𝑂𝑛T(n)\leq T(\lceil n/2\rceil+1)+O(n)italic_T ( italic_n ) ≤ italic_T ( ⌈ italic_n / 2 ⌉ + 1 ) + italic_O ( italic_n ), which yields T(n)=O(n)𝑇𝑛𝑂𝑛T(n)=O(n)italic_T ( italic_n ) = italic_O ( italic_n ), where n=|Ω|𝑛Ωn=|\Omega|italic_n = | roman_Ω |.

The next subroutine we consider is 𝖲𝗉𝗅𝗂𝗍(Ω,ω)𝖲𝗉𝗅𝗂𝗍Ω𝜔\mathsf{Split}(\Omega,\omega)sansserif_Split ( roman_Ω , italic_ω ), which partitions ΩΩ\Omegaroman_Ω into two parts consisting of orders in ΩΩ\Omegaroman_Ω which are at least as competitive as ω𝜔\omegaitalic_ω, and orders which are strictly less competitive than ω𝜔\omegaitalic_ω. We now want to define a subroutine 𝖲𝗉𝗅𝗂𝗍𝖰𝖲𝗉𝗅𝗂𝗍𝖰\mathsf{SplitQ}sansserif_SplitQ which takes as input a list of orders ΩΩ\Omegaroman_Ω and a quantity q𝖵𝗈𝗅(Ω)𝑞𝖵𝗈𝗅Ωq\leq\mathsf{Vol}(\Omega)italic_q ≤ sansserif_Vol ( roman_Ω ). We want to ‘partition’ ΩΩ\Omegaroman_Ω into two parts so that the volume of the more competitive part is precisely q𝑞qitalic_q. For this, we first find the element ωΩ𝜔Ω\omega\in\Omegaitalic_ω ∈ roman_Ω such that q𝖱𝖺𝗇𝗀𝖾Ω(ω)𝑞subscript𝖱𝖺𝗇𝗀𝖾Ω𝜔q\in\mathsf{Range}_{\Omega}(\omega)italic_q ∈ sansserif_Range start_POSTSUBSCRIPT roman_Ω end_POSTSUBSCRIPT ( italic_ω ). We then 𝖲𝗉𝗅𝗂𝗍(Ω,ω)𝖲𝗉𝗅𝗂𝗍Ω𝜔\mathsf{Split}(\Omega,\omega)sansserif_Split ( roman_Ω , italic_ω ) to obtain (Ω,Ω)subscriptΩsucceeds-or-equalssubscriptΩprecedes(\Omega_{\succeq},\Omega_{\prec})( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ). If 𝖵𝗈𝗅(Ω)=q𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝑞\mathsf{Vol}(\Omega_{\succeq})=qsansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) = italic_q, then we are immediately done. Else 𝖵𝗈𝗅(Ω)>q𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝑞\mathsf{Vol}(\Omega_{\succeq})>qsansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) > italic_q and 𝖵𝗈𝗅(Ω{ω})<q𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝜔𝑞\mathsf{Vol}(\Omega_{\succeq}\setminus\{\omega\})<qsansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ∖ { italic_ω } ) < italic_q. Thus we must break a part of ω𝜔\omegaitalic_ω and put it in ΩsubscriptΩprecedes\Omega_{\prec}roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT so that 𝖵𝗈𝗅(Ω)𝖵𝗈𝗅subscriptΩsucceeds-or-equals\mathsf{Vol}(\Omega_{\succeq})sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) is precisely q𝑞qitalic_q. This can be achieved in linear time by the following subroutine 𝖲𝗉𝗅𝗂𝗍𝖰(Ω,q)𝖲𝗉𝗅𝗂𝗍𝖰Ω𝑞\mathsf{SplitQ}(\Omega,q)sansserif_SplitQ ( roman_Ω , italic_q ). Apart from outputting the partition as described above, it also returns the order ω𝜔\omegaitalic_ω. 𝖲𝗉𝗅𝗂𝗍𝖰𝖲𝗉𝗅𝗂𝗍𝖰\mathsf{SplitQ}sansserif_SplitQ clearly runs in linear time.

Algorithm 4 Splitting an order list by a particular quantity.
function 𝖲𝗉𝗅𝗂𝗍𝖰𝖲𝗉𝗅𝗂𝗍𝖰\mathsf{SplitQ}sansserif_SplitQ(Orders ΩΩ\Omegaroman_Ω, quantity q𝑞qitalic_q)\triangleright Promise: q𝖵𝗈𝗅(Ω)𝑞𝖵𝗈𝗅Ωq\leq\mathsf{Vol}(\Omega)italic_q ≤ sansserif_Vol ( roman_Ω )
     w=𝖲𝖾𝗅𝖾𝖼𝗍𝖰(Ω,q)𝑤𝖲𝖾𝗅𝖾𝖼𝗍𝖰Ω𝑞w=\mathsf{SelectQ}(\Omega,q)italic_w = sansserif_SelectQ ( roman_Ω , italic_q )
     (Ω,Ω)𝖲𝗉𝗅𝗂𝗍(Ω,ω)subscriptΩsucceeds-or-equalssubscriptΩprecedes𝖲𝗉𝗅𝗂𝗍Ω𝜔(\Omega_{\succeq},\Omega_{\prec})\leftarrow\mathsf{Split}(\Omega,\omega)( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) ← sansserif_Split ( roman_Ω , italic_ω )
     
     qextra=𝖵𝗈𝗅(Ω)qsubscript𝑞extra𝖵𝗈𝗅subscriptΩsucceeds-or-equals𝑞q_{\text{extra}}=\mathsf{Vol}(\Omega_{\succeq})-qitalic_q start_POSTSUBSCRIPT extra end_POSTSUBSCRIPT = sansserif_Vol ( roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) - italic_q
     
     if qextra>0subscript𝑞extra0q_{\text{extra}}>0italic_q start_POSTSUBSCRIPT extra end_POSTSUBSCRIPT > 0 then
         Ω[Ω{ω}]{(𝗂𝖽(ω),𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(ω),𝗊𝗍𝗒(ω)qextra,𝗉𝗋𝗂𝖼𝖾(ω))}subscriptΩsucceeds-or-equalsdelimited-[]subscriptΩsucceeds-or-equals𝜔𝗂𝖽𝜔𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉𝜔𝗊𝗍𝗒𝜔subscript𝑞extra𝗉𝗋𝗂𝖼𝖾𝜔\Omega_{\succeq}\leftarrow[\Omega_{\succeq}\setminus\{\omega\}]\cup\{(\mathsf{% id}(\omega),\mathsf{timestamp}(\omega),\mathsf{qty}(\omega)-q_{\text{extra}},% \mathsf{price}(\omega))\}roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ← [ roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ∖ { italic_ω } ] ∪ { ( sansserif_id ( italic_ω ) , sansserif_timestamp ( italic_ω ) , sansserif_qty ( italic_ω ) - italic_q start_POSTSUBSCRIPT extra end_POSTSUBSCRIPT , sansserif_price ( italic_ω ) ) }
         ΩΩ{(𝗂𝖽(ω),𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉(ω),qextra,𝗉𝗋𝗂𝖼𝖾(ω))}subscriptΩprecedes-or-equalssubscriptΩprecedes𝗂𝖽𝜔𝗍𝗂𝗆𝖾𝗌𝗍𝖺𝗆𝗉𝜔subscript𝑞extra𝗉𝗋𝗂𝖼𝖾𝜔\Omega_{\preceq}\leftarrow\Omega_{\prec}\cup\{(\mathsf{id}(\omega),\mathsf{% timestamp}(\omega),q_{\text{extra}},\mathsf{price}(\omega))\}roman_Ω start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ← roman_Ω start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ∪ { ( sansserif_id ( italic_ω ) , sansserif_timestamp ( italic_ω ) , italic_q start_POSTSUBSCRIPT extra end_POSTSUBSCRIPT , sansserif_price ( italic_ω ) ) }      
     return (ω𝜔\omegaitalic_ω, ΩsubscriptΩsucceeds-or-equals\Omega_{\succeq}roman_Ω start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT, ΩsubscriptΩprecedes-or-equals\Omega_{\preceq}roman_Ω start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT)

We are now ready to state another lemma regarding the previous algorithm 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT.

Lemma 4.4.

Let b^Bnormal-^𝑏𝐵\hat{b}\in Bover^ start_ARG italic_b end_ARG ∈ italic_B be the t𝑡ℎsuperscript𝑡𝑡ℎt^{\text{th}}italic_t start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive bid that gets completely traded in M=𝖴𝖬*(B,A)𝑀superscript𝖴𝖬𝐵𝐴M=\mathsf{UM^{*}}(B,A)italic_M = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ). Let 𝖲𝗉𝗅𝗂𝗍(B,b^)=(B,B)𝖲𝗉𝗅𝗂𝗍𝐵normal-^𝑏subscript𝐵succeeds-or-equalssubscript𝐵precedes\mathsf{Split}(B,\hat{b})=(B_{\succeq},B_{\prec})sansserif_Split ( italic_B , over^ start_ARG italic_b end_ARG ) = ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) and q=𝖵𝗈𝗅(B)𝑞𝖵𝗈𝗅subscript𝐵succeeds-or-equalsq=\mathsf{Vol}(B_{\succeq})italic_q = sansserif_Vol ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ). Let 𝖲𝗉𝗅𝗂𝗍𝖰(A,q)=(a^,A,A)𝖲𝗉𝗅𝗂𝗍𝖰𝐴𝑞normal-^𝑎subscript𝐴succeeds-or-equalssubscript𝐴precedes-or-equals\mathsf{SplitQ}(A,q)=(\hat{a},A_{\succeq},A_{\preceq})sansserif_SplitQ ( italic_A , italic_q ) = ( over^ start_ARG italic_a end_ARG , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ). Then, M𝑀Mitalic_M can be partitioned into (M1,M2)subscript𝑀1subscript𝑀2(M_{1},M_{2})( italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) such that M1=𝖴𝖬*(B,A)subscript𝑀1superscript𝖴𝖬subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equalsM_{1}=\mathsf{UM^{*}}(B_{\succeq},A_{\succeq})italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) and M2=𝖴𝖬*(B,A)subscript𝑀2superscript𝖴𝖬subscript𝐵precedessubscript𝐴precedes-or-equalsM_{2}=\mathsf{UM^{*}}(B_{\prec},A_{\preceq})italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ).

The above statement is easy to check. Since b^^𝑏\hat{b}over^ start_ARG italic_b end_ARG gets completely traded in M𝑀Mitalic_M, all orders in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT must get traded with the most competitive asks in A𝐴Aitalic_A whose total quantity is q𝑞qitalic_q, which is precisely the set Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT. Let M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT consist of the transactions produced while matching orders in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT. Then M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT will be obtained by running the 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT on (B,A)subscript𝐵precedessubscript𝐴succeeds-or-equals(B_{\prec},A_{\succeq})( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ).

Note that a symmetric statement holds where we start with the assumption that the tthsuperscript𝑡tht^{\text{th}}italic_t start_POSTSUPERSCRIPT th end_POSTSUPERSCRIPT most competitive ask gets traded in M𝑀Mitalic_M.

We are now ready to describe our improved algorithm.

4.3 Improved algorithm

Our improved algorithm 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT takes as input a list of bids B𝐵Bitalic_B and a list of asks A𝐴Aitalic_A. It immediately invokes 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT on (B,A,M=)𝐵𝐴𝑀(B,A,M=\emptyset)( italic_B , italic_A , italic_M = ∅ ). M𝑀Mitalic_M will grow into the final matching output by the algorithm.

Algorithm 5 Efficient Uniform Algorithm
function 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT(Bids B𝐵Bitalic_B, Asks A𝐴Aitalic_A)
     𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽𝐵𝐴\mathsf{Uniform_{bid}}(B,A,\emptyset)sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B , italic_A , ∅ )

There are two main subroutines of our algorithm 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT and 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT which are symmetric in nature and they alternatively call each other. This is done to ensure that in two successive return calls the problem size, i.e., |B|+|A|𝐵𝐴|B|+|A|| italic_B | + | italic_A | reduces by a factor of two, as 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT halves the number of the bids, whereas 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT halves the number of the asks. So just understanding 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT will be sufficient for understanding our algorithm.

On receiving (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ) 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT first finds the median bid b𝑏bitalic_b by invoking 𝖲𝖾𝗅𝖾𝖼𝗍(B,B2)𝖲𝖾𝗅𝖾𝖼𝗍𝐵𝐵2\mathsf{Select}(B,\lceil\frac{B}{2}\rceil)sansserif_Select ( italic_B , ⌈ divide start_ARG italic_B end_ARG start_ARG 2 end_ARG ⌉ ). It then splits B𝐵Bitalic_B into two halves (B,B)subscript𝐵succeeds-or-equalssubscript𝐵precedes(B_{\succeq},B_{\prec})( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) based on the median bid b𝑏bitalic_b by invoking 𝖲𝗉𝗅𝗂𝗍(B,b)𝖲𝗉𝗅𝗂𝗍𝐵𝑏\mathsf{Split}(B,b)sansserif_Split ( italic_B , italic_b ). Let q=𝖵𝗈𝗅(B)𝑞𝖵𝗈𝗅subscript𝐵succeeds-or-equalsq=\mathsf{Vol}(B_{\succeq})italic_q = sansserif_Vol ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ). It then finds the element aA𝑎𝐴a\in Aitalic_a ∈ italic_A such that q𝖱𝖺𝗇𝗀𝖾A(a)𝑞subscript𝖱𝖺𝗇𝗀𝖾𝐴𝑎q\in\mathsf{Range}_{A}(a)italic_q ∈ sansserif_Range start_POSTSUBSCRIPT italic_A end_POSTSUBSCRIPT ( italic_a ) and splits A𝐴Aitalic_A into its most competitive and least competitive asks (A,A)subscript𝐴succeeds-or-equalssubscript𝐴precedes-or-equals(A_{\succeq},A_{\preceq})( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) such that 𝖵𝗈𝗅(A)=q𝖵𝗈𝗅subscript𝐴succeeds-or-equals𝑞\mathsf{Vol}(A_{\succeq})=qsansserif_Vol ( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) = italic_q by applying 𝖲𝗉𝗅𝗂𝗍𝖰(A,q)𝖲𝗉𝗅𝗂𝗍𝖰𝐴𝑞\mathsf{SplitQ}(A,q)sansserif_SplitQ ( italic_A , italic_q ).

After that, the algorithm checks if b𝑏bitalic_b and a𝑎aitalic_a are tradable. Two cases arise. If b𝑏bitalic_b and a𝑎aitalic_a are tradable, then every order in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT and Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT are tradable and they will exhaustively be matched to each other to produce a matching of volume q𝑞qitalic_q in linear time using the 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match subroutine. 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT adds this 𝖵𝗈𝗅𝖵𝗈𝗅\mathsf{Vol}sansserif_Vol q𝑞qitalic_q matching to M𝑀Mitalic_M and recursively calls 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT on (B,A,M)subscript𝐵precedessubscript𝐴precedes-or-equals𝑀(B_{\prec},A_{\preceq},M)( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , italic_M ). Intuitively, the previous algorithm would also match all orders in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT and Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT exhaustively to each other to produce a matching of size q𝑞qitalic_q and proceed to matching orders in Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT and Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT.

In the case b𝑏bitalic_b and a𝑎aitalic_a are not tradable, then 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT discards (B,A)subscript𝐵precedessubscript𝐴precedes-or-equals(B_{\prec},A_{\preceq})( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) and calls 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT on (B,A,M)subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals𝑀(B_{\succeq},A_{\succeq},M)( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_M ). Intuitively, the previous algorithm will halt (i.e., produce its last transaction) before it even comes down to examining orders in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT and Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT.

Algorithm 6 Uniform Matching by bisecting bids
function 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT(Bids B𝐵Bitalic_B, Asks A𝐴Aitalic_A, Matching M𝑀Mitalic_M)
     if |B|=0𝐵0|B|=0| italic_B | = 0 or |A|=0𝐴0|A|=0| italic_A | = 0 or (B={b}𝐵𝑏B=\{b\}italic_B = { italic_b } and A={a}𝐴𝑎A=\{a\}italic_A = { italic_a } and 𝗉𝗋𝗂𝖼𝖾(a)>𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾𝑎𝗉𝗋𝗂𝖼𝖾𝑏\mathsf{price}(a)>\mathsf{price}(b)sansserif_price ( italic_a ) > sansserif_price ( italic_b )then
         return M𝑀Mitalic_M      
     
     b=𝖲𝖾𝗅𝖾𝖼𝗍(B,|B|2)𝑏𝖲𝖾𝗅𝖾𝖼𝗍𝐵𝐵2b=\mathsf{Select}(B,\lceil\frac{|B|}{2}\rceil)italic_b = sansserif_Select ( italic_B , ⌈ divide start_ARG | italic_B | end_ARG start_ARG 2 end_ARG ⌉ )
     (B,B)𝖲𝗉𝗅𝗂𝗍(B,b)subscript𝐵succeeds-or-equalssubscript𝐵precedes𝖲𝗉𝗅𝗂𝗍𝐵𝑏(B_{\succeq},B_{\prec})\leftarrow\mathsf{Split}(B,b)( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) ← sansserif_Split ( italic_B , italic_b )
     
     (a,A,A)𝖲𝗉𝗅𝗂𝗍𝖰(A,𝖵𝗈𝗅(B))𝑎subscript𝐴succeeds-or-equalssubscript𝐴precedes-or-equals𝖲𝗉𝗅𝗂𝗍𝖰𝐴𝖵𝗈𝗅subscript𝐵succeeds-or-equals(a,A_{\succeq},A_{\preceq})\leftarrow\mathsf{SplitQ}(A,\mathsf{Vol}(B_{\succeq% }))( italic_a , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) ← sansserif_SplitQ ( italic_A , sansserif_Vol ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) )
     
     if 𝗉𝗋𝗂𝖼𝖾(a)𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾𝑎𝗉𝗋𝗂𝖼𝖾𝑏\mathsf{price}(a)\leq\mathsf{price}(b)sansserif_price ( italic_a ) ≤ sansserif_price ( italic_b ) then
         MM𝖬𝖺𝗍𝖼𝗁(B,A)𝑀𝑀𝖬𝖺𝗍𝖼𝗁subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equalsM\leftarrow M\cup\mathsf{Match}(B_{\succeq},A_{\succeq})italic_M ← italic_M ∪ sansserif_Match ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT )
         return 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵precedessubscript𝐴precedes-or-equals𝑀\mathsf{Uniform_{ask}}(B_{\prec},A_{\preceq},M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , italic_M )      \triangleright Otherwise, b𝑏bitalic_b and a𝑎aitalic_a are not tradable
     return 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals𝑀\mathsf{Uniform_{ask}}(B_{\succeq},A_{\succeq},M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_M )
Algorithm 7 Uniform Matching by bisecting asks
function 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT(Bids B𝐵Bitalic_B, Asks A𝐴Aitalic_A, Matching M𝑀Mitalic_M)
     if |B|=0𝐵0|B|=0| italic_B | = 0 or |A|=0𝐴0|A|=0| italic_A | = 0 or (B={b}𝐵𝑏B=\{b\}italic_B = { italic_b } and A={a}𝐴𝑎A=\{a\}italic_A = { italic_a } and 𝗉𝗋𝗂𝖼𝖾(a)>𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾𝑎𝗉𝗋𝗂𝖼𝖾𝑏\mathsf{price}(a)>\mathsf{price}(b)sansserif_price ( italic_a ) > sansserif_price ( italic_b )then
         return M𝑀Mitalic_M      
     
     a=𝖲𝖾𝗅𝖾𝖼𝗍(A,|A|2)𝑎𝖲𝖾𝗅𝖾𝖼𝗍𝐴𝐴2a=\mathsf{Select}(A,\lceil\frac{|A|}{2}\rceil)italic_a = sansserif_Select ( italic_A , ⌈ divide start_ARG | italic_A | end_ARG start_ARG 2 end_ARG ⌉ )
     (A,A)𝖲𝗉𝗅𝗂𝗍(A,a)subscript𝐴succeeds-or-equalssubscript𝐴precedes𝖲𝗉𝗅𝗂𝗍𝐴𝑎(A_{\succeq},A_{\prec})\leftarrow\mathsf{Split}(A,a)( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) ← sansserif_Split ( italic_A , italic_a )
     
     (b,B,B)𝖲𝗉𝗅𝗂𝗍𝖰(B,𝖵𝗈𝗅(A))𝑏subscript𝐵succeeds-or-equalssubscript𝐵precedes-or-equals𝖲𝗉𝗅𝗂𝗍𝖰𝐵𝖵𝗈𝗅subscript𝐴succeeds-or-equals(b,B_{\succeq},B_{\preceq})\leftarrow\mathsf{SplitQ}(B,\mathsf{Vol}(A_{\succeq% }))( italic_b , italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_B start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) ← sansserif_SplitQ ( italic_B , sansserif_Vol ( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) )
     
     if 𝗉𝗋𝗂𝖼𝖾(a)𝗉𝗋𝗂𝖼𝖾(b)𝗉𝗋𝗂𝖼𝖾𝑎𝗉𝗋𝗂𝖼𝖾𝑏\mathsf{price}(a)\leq\mathsf{price}(b)sansserif_price ( italic_a ) ≤ sansserif_price ( italic_b ) then
         MM𝖬𝖺𝗍𝖼𝗁(B,A)𝑀𝑀𝖬𝖺𝗍𝖼𝗁subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equalsM\leftarrow M\cup\mathsf{Match}(B_{\succeq},A_{\succeq})italic_M ← italic_M ∪ sansserif_Match ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT )
         return 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝐵precedes-or-equalssubscript𝐴precedes𝑀\mathsf{Uniform_{bid}}(B_{\preceq},A_{\prec},M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_M )      \triangleright Otherwise, b𝑏bitalic_b and a𝑎aitalic_a are not tradable
     return 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals𝑀\mathsf{Uniform_{bid}}(B_{\succeq},A_{\succeq},M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_M )

Having described our algorithm 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT, we now turn to prove its correctness. The main theorem that establishes the correctness is as follows.

Theorem 4.5.

Given a list of bids B𝐵Bitalic_B and a list of asks A𝐴Aitalic_A, let 𝖮𝖯𝖳=𝖴𝖬*(B,A)𝖮𝖯𝖳superscript𝖴𝖬𝐵𝐴\mathsf{OPT}=\mathsf{UM^{*}}(B,A)sansserif_OPT = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) and M=𝖴𝗇𝗂𝖿𝗈𝗋𝗆*(B,A)𝑀superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝐵𝐴M=\mathsf{Uniform}^{*}(B,A)italic_M = sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ). Then, for each order wBA𝑤𝐵𝐴w\in B\cup Aitalic_w ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(w,𝖮𝖯𝖳)=𝖰𝗍𝗒(w,M)𝖰𝗍𝗒𝑤𝖮𝖯𝖳𝖰𝗍𝗒𝑤𝑀\mathsf{Qty}(w,\mathsf{OPT})=\mathsf{Qty}(w,M)sansserif_Qty ( italic_w , sansserif_OPT ) = sansserif_Qty ( italic_w , italic_M ).

Once we prove the above theorem, the correctness follows from the following proposition and Theorem 4.1.

Proposition 4.6.

If M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT is a uniform price matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is a matching over (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) such that for all wBA𝑤𝐵𝐴w\in B\cup Aitalic_w ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(w,M1)=𝖰𝗍𝗒(w,M2)𝖰𝗍𝗒𝑤subscript𝑀1𝖰𝗍𝗒𝑤subscript𝑀2\mathsf{Qty}(w,M_{1})=\mathsf{Qty}(w,M_{2})sansserif_Qty ( italic_w , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_w , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ), then M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT is a uniform price matching.

The proposition is obvious: the volumes of M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT must be the same from the condition above. Also, since the same orders participate in both M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT, transactions in M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT can be assigned the same uniform price that is in M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT. Finally, fairness also follows immediately since the more competitive orders are fully traded in M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT, they must be fully traded in M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT as 𝖰𝗍𝗒(w,M1)=𝖰𝗍𝗒(w,M2)𝖰𝗍𝗒𝑤subscript𝑀1𝖰𝗍𝗒𝑤subscript𝑀2\mathsf{Qty}(w,M_{1})=\mathsf{Qty}(w,M_{2})sansserif_Qty ( italic_w , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_w , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) for all orders w𝑤witalic_w.

We now turn to proving Theorem 4.5.

Proof of Theorem 4.5.

For a list of orders ΩΩ\Omegaroman_Ω, we use ΩΩabsent\Omega{\downarrow}roman_Ω ↓ to denote the list obtained by sorting ΩΩ\Omegaroman_Ω by decreasing competitiveness.

We make the following claim.

Claim 4.7.

Let B𝐵Bitalic_B be a list of bids, A𝐴Aitalic_A be a list of asks, and M𝑀Mitalic_M be a matching such that 𝖵𝗈𝗅(B)=𝖵𝗈𝗅(A)𝖵𝗈𝗅𝐵𝖵𝗈𝗅𝐴\mathsf{Vol}(B)=\mathsf{Vol}(A)sansserif_Vol ( italic_B ) = sansserif_Vol ( italic_A ). Let M1=𝖬𝖺𝗍𝖼𝗁(B,A,M)M_{1}=\mathsf{Match}(B{\downarrow},A{\downarrow},M)italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = sansserif_Match ( italic_B ↓ , italic_A ↓ , italic_M ), M2=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)subscript𝑀2subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽𝐵𝐴𝑀M_{2}=\mathsf{Uniform_{bid}}(B,A,M)italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ), and M3=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)subscript𝑀3subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄𝐵𝐴𝑀M_{3}=\mathsf{Uniform_{ask}}(B,A,M)italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT = sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ). Then, for all ωBA𝜔𝐵𝐴\omega\in B\cup Aitalic_ω ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M2)=𝖰𝗍𝗒(ω,M3)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀2𝖰𝗍𝗒𝜔subscript𝑀3\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{2})=\mathsf{Qty}(\omega,M_{3})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ).

If the claim is true, then Theorem 4.5 follows immediately by observing that without loss of generality we had assumed that our inputs B𝐵Bitalic_B and A𝐴Aitalic_A are such that 𝖵𝗈𝗅(B)=𝖵𝗈𝗅(A)𝖵𝗈𝗅𝐵𝖵𝗈𝗅𝐴\mathsf{Vol}(B)=\mathsf{Vol}(A)sansserif_Vol ( italic_B ) = sansserif_Vol ( italic_A ) (which was achieved by adding a dummy untradable order), 𝖴𝖬*(B,A)=𝖬𝖺𝗍𝖼𝗁(B,A,)\mathsf{UM^{*}}(B,A)=\mathsf{Match}(B{\downarrow},A{\downarrow},\emptyset)sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) = sansserif_Match ( italic_B ↓ , italic_A ↓ , ∅ ), and 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*(B,A)=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,)superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝐵𝐴subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽𝐵𝐴\mathsf{Uniform}^{*}(B,A)=\mathsf{Uniform_{bid}}(B,A,\emptyset)sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) = sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B , italic_A , ∅ ).

We now prove the claim by induction on |B|+|A|𝐵𝐴|B|+|A|| italic_B | + | italic_A |.

We focus on showing the following part: for all ωBA𝜔𝐵𝐴\omega\in B\cup Aitalic_ω ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M2)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀2\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{2})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ). A symmetric argument will yield 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M3)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀3\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{3})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ).

The base cases include |B|=|A|=0𝐵𝐴0|B|=|A|=0| italic_B | = | italic_A | = 0 and |B|=|A|=1𝐵𝐴1|B|=|A|=1| italic_B | = | italic_A | = 1. The proof in these cases follows easily.

Thus, we are left with cases where |B|1𝐵1|B|\geq 1| italic_B | ≥ 1, |A|1𝐴1|A|\geq 1| italic_A | ≥ 1, and |B|+|A|3𝐵𝐴3|B|+|A|\geq 3| italic_B | + | italic_A | ≥ 3. Now, we argue that it suffices to consider cases where |B|2𝐵2|B|\geq 2| italic_B | ≥ 2. Let us analyze what happens when we run 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT on (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ), where |B|=1𝐵1|B|=1| italic_B | = 1 and |A|2𝐴2|A|\geq 2| italic_A | ≥ 2. 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT will compute B=Bsubscript𝐵succeeds-or-equals𝐵B_{\succeq}=Bitalic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT = italic_B and A=Asubscript𝐴succeeds-or-equals𝐴A_{\succeq}=Aitalic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT = italic_A (as B𝐵Bitalic_B is a singleton and 𝖵𝗈𝗅(B)=𝖵𝗈𝗅(A)𝖵𝗈𝗅𝐵𝖵𝗈𝗅𝐴\mathsf{Vol}(B)=\mathsf{Vol}(A)sansserif_Vol ( italic_B ) = sansserif_Vol ( italic_A )). 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT checks whether the ‘median’ bid b𝑏bitalic_b (the only bid in B𝐵Bitalic_B) and the ask a𝑎aitalic_a (the least competitive ask in A𝐴Aitalic_A) are tradable or not. If they are tradable, then each order in ωBA𝜔𝐵𝐴\omega\in B\cup Aitalic_ω ∈ italic_B ∪ italic_A will be exhaustively matched. Since it is a uniform price matching, every bid-ask pair is tradable, so 𝖬𝖺𝗍𝖼𝗁𝖬𝖺𝗍𝖼𝗁\mathsf{Match}sansserif_Match on (B,A,M)(B{\downarrow},A{\downarrow},M)( italic_B ↓ , italic_A ↓ , italic_M ) will also match every order in BA𝐵𝐴B\cup Aitalic_B ∪ italic_A exhaustively, and the claim follows easily. If they are not tradable, then 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT will return 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄𝐵𝐴𝑀\mathsf{Uniform_{ask}}(B,A,M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ), i.e., 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽𝐵𝐴𝑀subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄𝐵𝐴𝑀\mathsf{Uniform_{bid}}(B,A,M)=\mathsf{Uniform_{ask}}(B,A,M)sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ) = sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ), and in this case |A|2𝐴2|A|\geq 2| italic_A | ≥ 2 and will be handled when we apply the symmetric argument to prove 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M3)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀3\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{3})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT ).

Thus, we may assume that |B|2𝐵2|B|\geq 2| italic_B | ≥ 2 and this will imply that both Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT and Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT will turn out to be proper subsets of B𝐵Bitalic_B when we run 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT on (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ).

We fix sets B𝐵Bitalic_B, A𝐴Aitalic_A, and M𝑀Mitalic_M such that |B|2𝐵2|B|\geq 2| italic_B | ≥ 2. Also, M1=𝖬𝖺𝗍𝖼𝗁(B,A,M)M_{1}=\mathsf{Match}(B{\downarrow},A{\downarrow},M)italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = sansserif_Match ( italic_B ↓ , italic_A ↓ , italic_M ) and M2=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)subscript𝑀2subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽𝐵𝐴𝑀M_{2}=\mathsf{Uniform_{bid}}(B,A,M)italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B , italic_A , italic_M ). We need to show that for all ωBA𝜔𝐵𝐴\omega\in B\cup Aitalic_ω ∈ italic_B ∪ italic_A, 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M2)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀2\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{2})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ).

In the proof below, we will be using the following facts.

  • 𝖴𝖬*(B,A)=𝖬𝖺𝗍𝖼𝗁(B,A,);\mathsf{UM^{*}}(B^{\prime},A^{\prime})=\mathsf{Match}(B^{\prime}{\downarrow},A% ^{\prime}{\downarrow},\emptyset);sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = sansserif_Match ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ↓ , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ↓ , ∅ ) ;

  • 𝖬𝖺𝗍𝖼𝗁(B,A,M)=M𝖬𝖺𝗍𝖼𝗁(B,A,);𝖬𝖺𝗍𝖼𝗁superscript𝐵superscript𝐴superscript𝑀superscript𝑀𝖬𝖺𝗍𝖼𝗁superscript𝐵superscript𝐴\mathsf{Match}(B^{\prime},A^{\prime},M^{\prime})=M^{\prime}\cup\mathsf{Match}(% B^{\prime},A^{\prime},\emptyset);sansserif_Match ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ∪ sansserif_Match ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , ∅ ) ;

  • 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽(B,A,M)=M𝖬𝖺𝗍𝖼𝗁(B,A,);subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽superscript𝐵superscript𝐴superscript𝑀superscript𝑀𝖬𝖺𝗍𝖼𝗁superscript𝐵superscript𝐴\mathsf{Uniform_{bid}}(B^{\prime},A^{\prime},M^{\prime})=M^{\prime}\cup\mathsf% {Match}(B^{\prime},A^{\prime},\emptyset);sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ∪ sansserif_Match ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , ∅ ) ;

  • 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)=M𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,)subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄superscript𝐵superscript𝐴superscript𝑀superscript𝑀subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄superscript𝐵superscript𝐴\mathsf{Uniform_{ask}}(B^{\prime},A^{\prime},M^{\prime})=M^{\prime}\cup\mathsf% {Uniform_{ask}}(B^{\prime},A^{\prime},\emptyset)sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ∪ sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , italic_A start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT , ∅ ), where the union is a disjoint union (which is a list concatenation operation when thinking of the matchings as lists).

𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT on (B,A,M)𝐵𝐴𝑀(B,A,M)( italic_B , italic_A , italic_M ) first finds the ‘medians’ bid b𝑏bitalic_b and ask a𝑎aitalic_a, and the partitions (B,B)subscript𝐵succeeds-or-equalssubscript𝐵precedes(B_{\succeq},B_{\prec})( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ) of B𝐵Bitalic_B, (A,A)subscript𝐴succeeds-or-equalssubscript𝐴precedes-or-equals(A_{\succeq},A_{\preceq})( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) of A𝐴Aitalic_A. Let q=𝖵𝗈𝗅(B)=𝖵𝗈𝗅(A)𝑞𝖵𝗈𝗅subscript𝐵succeeds-or-equals𝖵𝗈𝗅subscript𝐴succeeds-or-equalsq=\mathsf{Vol}(B_{\succeq})=\mathsf{Vol}(A_{\succeq})italic_q = sansserif_Vol ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) = sansserif_Vol ( italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ). 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT then checks whether b𝑏bitalic_b and a𝑎aitalic_a are tradable which gives rise to two cases.

Case: b𝑏bitalic_b and a𝑎aitalic_a are tradable: In this case, Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT is matched completely with Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT to produce a matching Msuperscript𝑀M^{\prime}italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT with quantity q𝑞qitalic_q and the final output matching is

M2=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,MM)=MM𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,).subscript𝑀2subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵precedessubscript𝐴precedes-or-equals𝑀superscript𝑀𝑀superscript𝑀subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵precedessubscript𝐴precedes-or-equalsM_{2}=\mathsf{Uniform_{ask}}(B_{\prec},A_{\preceq},M\cup M^{\prime})=M\cup M^{% \prime}\cup\mathsf{Uniform_{ask}}(B_{\prec},A_{\preceq},\emptyset).italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , italic_M ∪ italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = italic_M ∪ italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ∪ sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , ∅ ) .

Also, 𝖬𝖺𝗍𝖼𝗁(B,A,M)=M𝖬𝖺𝗍𝖼𝗁(B,A,)=M𝖴𝖬*(B,A)\mathsf{Match}(B{\downarrow},A{\downarrow},M)=M\cup\mathsf{Match}(B{\downarrow% },A{\downarrow},\emptyset)=M\cup\mathsf{UM^{*}}(B,A)sansserif_Match ( italic_B ↓ , italic_A ↓ , italic_M ) = italic_M ∪ sansserif_Match ( italic_B ↓ , italic_A ↓ , ∅ ) = italic_M ∪ sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ). We now invoke Lemma 4.4 by setting b^^𝑏\hat{b}over^ start_ARG italic_b end_ARG to b𝑏bitalic_b to argue that the matching output by 𝖴𝖬*superscript𝖴𝖬\mathsf{UM^{*}}sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT on (B,A)𝐵𝐴(B,A)( italic_B , italic_A ) is
𝖴𝖬*(B,A)𝖴𝖬*(B,A)superscript𝖴𝖬subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equalssuperscript𝖴𝖬subscript𝐵precedessubscript𝐴precedes-or-equals\mathsf{UM^{*}}(B_{\succeq},A_{\succeq})\cup\mathsf{UM^{*}}(B_{\prec},A_{% \preceq})sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) ∪ sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ). Thus,

M1=M𝖴𝖬*(B,A)𝖴𝖬*(B,A)=M𝖴𝖬*(B,A)𝖬𝖺𝗍𝖼𝗁(B,A,).M_{1}=M\cup\mathsf{UM^{*}}(B_{\succeq},A_{\succeq})\cup\mathsf{UM^{*}}(B_{% \prec},A_{\preceq})=M\cup\mathsf{UM^{*}}(B_{\succeq},A_{\succeq})\cup\mathsf{% Match}(B_{\prec}{\downarrow},A_{\preceq}{\downarrow},\emptyset).italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = italic_M ∪ sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) ∪ sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ) = italic_M ∪ sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) ∪ sansserif_Match ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ↓ , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ↓ , ∅ ) .

Note that we have expressed both M1subscript𝑀1M_{1}italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT and M2subscript𝑀2M_{2}italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT as a disjoint union (list concatenation) of three sets. Fix an ωAB𝜔𝐴𝐵\omega\in A\cup Bitalic_ω ∈ italic_A ∪ italic_B. Now, 𝖰𝗍𝗒(ω,M)=𝖰𝗍𝗒(ω,M)𝖰𝗍𝗒𝜔𝑀𝖰𝗍𝗒𝜔𝑀\mathsf{Qty}(\omega,M)=\mathsf{Qty}(\omega,M)sansserif_Qty ( italic_ω , italic_M ) = sansserif_Qty ( italic_ω , italic_M ) (trivially), 𝖰𝗍𝗒(ω,M)=𝖰𝗍𝗒(ω,𝖴𝖬*(B,A))𝖰𝗍𝗒𝜔superscript𝑀𝖰𝗍𝗒𝜔superscript𝖴𝖬subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals\mathsf{Qty}(\omega,M^{\prime})=\mathsf{Qty}(\omega,\mathsf{UM^{*}}(B_{\succeq% },A_{\succeq}))sansserif_Qty ( italic_ω , italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT ) = sansserif_Qty ( italic_ω , sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ) ) (as Msuperscript𝑀M^{\prime}italic_M start_POSTSUPERSCRIPT ′ end_POSTSUPERSCRIPT is obtained by exhaustively matching all orders in (B,A)subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals(B_{\succeq},A_{\succeq})( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT )), and 𝖰𝗍𝗒(ω,𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,))=𝖰𝗍𝗒(ω,𝖬𝖺𝗍𝖼𝗁(B,A,))\mathsf{Qty}(\omega,\mathsf{Uniform_{ask}}(B_{\prec},A_{\preceq},\emptyset))=% \mathsf{Qty}(\omega,\mathsf{Match}(B_{\prec}{\downarrow},A_{\preceq}{% \downarrow},\emptyset))sansserif_Qty ( italic_ω , sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT , ∅ ) ) = sansserif_Qty ( italic_ω , sansserif_Match ( italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ↓ , italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT ↓ , ∅ ) ) (from induction). Thus, we have 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M2)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀2\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{2})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ).

Case: b𝑏bitalic_b and a𝑎aitalic_a are not tradable 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT completely discards Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT and Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT and outputs the matching

M2=𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,M)=M𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄(B,A,).subscript𝑀2subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals𝑀𝑀subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equalsM_{2}=\mathsf{Uniform_{ask}}(B_{\succeq},A_{\succeq},M)=M\cup\mathsf{Uniform_{% ask}}(B_{\succeq},A_{\succeq},\emptyset).italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_M ) = italic_M ∪ sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , ∅ ) .

Also, M1=𝖬𝖺𝗍𝖼𝗁(B,A,M)=M𝖬𝖺𝗍𝖼𝗁(B,A,).M_{1}=\mathsf{Match}(B{\downarrow},A{\downarrow},M)=M\cup\mathsf{Match}(B{% \downarrow},A{\downarrow},\emptyset).italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = sansserif_Match ( italic_B ↓ , italic_A ↓ , italic_M ) = italic_M ∪ sansserif_Match ( italic_B ↓ , italic_A ↓ , ∅ ) . Observe that no bid in Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT is tradable with any ask in Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT, as bids in Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT are strictly less competitive than b𝑏bitalic_b and asks in Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT are at most as competitive as a𝑎aitalic_a, and b𝑏bitalic_b and a𝑎aitalic_a are not tradable. We further claim that 𝖬𝖺𝗍𝖼𝗁(B,A,)=𝖴𝖬*(B,A)\mathsf{Match}(B{\downarrow},A{\downarrow},\emptyset)=\mathsf{UM^{*}}(B,A)sansserif_Match ( italic_B ↓ , italic_A ↓ , ∅ ) = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) does not match any orders from BAsubscript𝐵precedessubscript𝐴precedes-or-equalsB_{\prec}\cup A_{\preceq}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT ∪ italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT. To see this, we invoke Lemma 4.3. Note that except for bid b𝑏bitalic_b and ask a𝑎aitalic_a, the respective ranges of orders in Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT and Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT have numbers strictly less than q𝑞qitalic_q and the respective ranges of orders in Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT and Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT have numbers that are all strictly greater than q𝑞qitalic_q, as q𝖱𝖺𝗇𝗀𝖾A(a)𝖱𝖺𝗇𝗀𝖾B(b)𝑞subscript𝖱𝖺𝗇𝗀𝖾𝐴𝑎subscript𝖱𝖺𝗇𝗀𝖾𝐵𝑏q\in\mathsf{Range}_{A}(a)\cap\mathsf{Range}_{B}(b)italic_q ∈ sansserif_Range start_POSTSUBSCRIPT italic_A end_POSTSUBSCRIPT ( italic_a ) ∩ sansserif_Range start_POSTSUBSCRIPT italic_B end_POSTSUBSCRIPT ( italic_b ). Thus, any potential matches between Bsubscript𝐵precedesB_{\prec}italic_B start_POSTSUBSCRIPT ≺ end_POSTSUBSCRIPT and Asubscript𝐴succeeds-or-equalsA_{\succeq}italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT or between Asubscript𝐴precedes-or-equalsA_{\preceq}italic_A start_POSTSUBSCRIPT ⪯ end_POSTSUBSCRIPT and Bsubscript𝐵succeeds-or-equalsB_{\succeq}italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT can only happen between b𝑏bitalic_b and a𝑎aitalic_a, but they are not tradable (as per the case). Thus, we conclude that the 𝖴𝖬*(B,A)=𝖴𝖬*(B,A)superscript𝖴𝖬𝐵𝐴superscript𝖴𝖬subscript𝐵succeeds-or-equalssubscript𝐴succeeds-or-equals\mathsf{UM^{*}}(B,A)=\mathsf{UM^{*}}(B_{\succeq},A_{\succeq})sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B , italic_A ) = sansserif_UM start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ). Therefore,

M1=M𝖬𝖺𝗍𝖼𝗁(B,A,).M_{1}=M\cup\mathsf{Match}(B_{\succeq}{\downarrow},A_{\succeq}{\downarrow},% \emptyset).italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = italic_M ∪ sansserif_Match ( italic_B start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ↓ , italic_A start_POSTSUBSCRIPT ⪰ end_POSTSUBSCRIPT ↓ , ∅ ) .

From induction, arguing as before, we get for all orders ωAB𝜔𝐴𝐵\omega\in A\cup Bitalic_ω ∈ italic_A ∪ italic_B, 𝖰𝗍𝗒(ω,M1)=𝖰𝗍𝗒(ω,M2)𝖰𝗍𝗒𝜔subscript𝑀1𝖰𝗍𝗒𝜔subscript𝑀2\mathsf{Qty}(\omega,M_{1})=\mathsf{Qty}(\omega,M_{2})sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) = sansserif_Qty ( italic_ω , italic_M start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT ), and we are done. ∎

We now analyze the running time of 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT. Let T(n)𝑇𝑛T(n)italic_T ( italic_n ) represent the running time of 𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT, where the number of orders |B|+|A|=n𝐵𝐴𝑛|B|+|A|=n| italic_B | + | italic_A | = italic_n.

𝖴𝗇𝗂𝖿𝗈𝗋𝗆*superscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆\mathsf{Uniform}^{*}sansserif_Uniform start_POSTSUPERSCRIPT * end_POSTSUPERSCRIPT calls 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT, which in turn calls 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT after decreasing the number of the bids by a factor of two. 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖺𝗌𝗄\mathsf{Uniform_{ask}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_ask end_POSTSUBSCRIPT then calls 𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽subscript𝖴𝗇𝗂𝖿𝗈𝗋𝗆𝖻𝗂𝖽\mathsf{Uniform_{bid}}sansserif_Uniform start_POSTSUBSCRIPT sansserif_bid end_POSTSUBSCRIPT again after decreasing the number of the asks by a factor of two. So after two successive returns, we can see that the number of bids and asks decreases by a factor of two. Also, since all the subroutines take linear time, by simple inspection, we conclude

T(n)T(n2+1)+cn𝑇𝑛𝑇𝑛21𝑐𝑛T(n)\leq T(\lceil\frac{n}{2}\rceil+1)+cnitalic_T ( italic_n ) ≤ italic_T ( ⌈ divide start_ARG italic_n end_ARG start_ARG 2 end_ARG ⌉ + 1 ) + italic_c italic_n, where c𝑐citalic_c is an absolute constant. Thus, clearly T(n)=O(n)𝑇𝑛𝑂𝑛T(n)=O(n)italic_T ( italic_n ) = italic_O ( italic_n ).

This completes the proof of Theorem 1.11.

5 Conclusions

The problems we consider are clearly of fundamental interest and we achieve asymptotically tight results for them using elementary techniques. Surprisingly, despite their fundamental nature and wide practical applicability, prior to this work, the complexity aspects of such problems were not deeply studied. The following natural questions arise from our work.

  • In this work, the most classical exchange model is assumed; there are execution principles other than price-time priority (like pro-rata matching) which are also being employed in the real world. These alternative principles present opportunities for studying algorithmic complexity beyond the traditional price-time priority model.

  • Furthermore, it might be interesting to consider similar problems in the context of decentralized exchanges.

  • Finally, bridging the gap between the upper and lower bounds on the time complexity of Problem 1 in the binary query model remains open.

Acknowledgement

The authors express their gratitude to Jaikumar Radhakrishnan for bringing the element distinctness problem to their attention and for engaging in insightful discussions that enriched their understanding of it. They are also thankful to him for hel** improve the presentation of this work.

References

  • [BFP+{}^{+}start_FLOATSUPERSCRIPT + end_FLOATSUPERSCRIPT73] Manuel Blum, Robert W. Floyd, Vaughan R. Pratt, Ronald L. Rivest, and Robert Endre Tarjan. Time bounds for selection. J. Comput. Syst. Sci., 7(4):448–461, 1973.
  • [Bop94] Ravi B. Boppana. The decision-tree complexity of element distinctness. Inf. Process. Lett., 52(6):329–331, 1994.
  • [DGHK02] Kaustubh Deshmukh, Andrew V. Goldberg, Jason D. Hartline, and Anna R. Karlin. Truthful and competitive double auctions. In Rolf H. Möhring and Rajeev Raman, editors, Algorithms - ESA 2002, 10th Annual European Symposium, Rome, Italy, September 17-21, 2002, Proceedings, volume 2461 of Lecture Notes in Computer Science, pages 361–373. Springer, 2002.
  • [GS22] Mohit Garg and Suneel Sarswat. The design and regulation of exchanges: A formal approach. In Anuj Dawar and Venkatesan Guruswami, editors, 42nd IARCS Annual Conference on Foundations of Software Technology and Theoretical Computer Science, FSTTCS 2022, December 18-20, 2022, IIT Madras, Chennai, India, volume 250 of LIPIcs, pages 39:1–39:21. Schloss Dagstuhl - Leibniz-Zentrum für Informatik, 2022.
  • [GS23] M Garg and S Sarswat. Efficient and Verified Continuous Double Auctions. In R. Piskac and A. Voronkov, editors, Short Papers of the 24th International Conference on Logic for Programming Artificial Intelligence and Reasoning, 2023.
  • [Meh84] Kurt Mehlhorn. Data Structures and Algorithms 1: Sorting and Searching, volume 1 of EATCS Monographs on Theoretical Computer Science. Springer, 1984.
  • [Mir71] L. Mirsky. A dual of dilworth’s decomposition theorem. The American Mathematical Monthly, 78(8):876–877, 1971.
  • [NP13] **zhong Niu and Simon Parsons. Maximizing matching in double-sided auctions. In Maria L. Gini, Onn Shehory, Takayuki Ito, and Catholijn M. Jonker, editors, International conference on Autonomous Agents and Multi-Agent Systems, AAMAS ’13, Saint Paul, MN, USA, May 6-10, 2013, pages 1283–1284. IFAAMAS, 2013.
  • [NSS21] Raja Natarajan, Suneel Sarswat, and Abhishek Kr Singh. Verified double sided auctions for financial markets. In Liron Cohen and Cezary Kaliszyk, editors, 12th International Conference on Interactive Theorem Proving, ITP 2021, June 29 to July 1, 2021, Rome, Italy (Virtual Conference), volume 193 of LIPIcs, pages 28:1–28:18. Schloss Dagstuhl - Leibniz-Zentrum für Informatik, 2021.
  • [Rad03] Jaikumar Radhakrishnan. Entropy and counting. Computational mathematics, modelling and algorithms, 146, 2003.
  • [WWW98] Peter R. Wurman, William E. Walsh, and Michael P. Wellman. Flexible double auctions for electronic commerce: theory and implementation. Decis. Support Syst., 24(1):17–27, 1998.
  • [ZZKP10] Dengji Zhao, Dongmo Zhang, Md Khan, and Laurent Perrussel. Maximal matching for double auction. In Jiuyong Li, editor, AI 2010: Advances in Artificial Intelligence - 23rd Australasian Joint Conference, Adelaide, Australia, December 7-10, 2010. Proceedings, volume 6464 of Lecture Notes in Computer Science, pages 516–525. Springer, 2010.