Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
License: arXiv.org perpetual non-exclusive license
arXiv:2403.11018v1 [cs.DS] 16 Mar 2024
\orcid

0000-0003-1072-8559 \reportnumALG-24-007 \reporturlhttps://reports.cicirello.org/24/007/ALG-24-007.pdf \ACMF.2.1; G.3; G.4; I.1.2 \MSC68Q25; 68Q87; 68W40; 60-04

On the Average Runtime of an Open Source Binomial Random Variate Generation Algorithm

Vincent A. Cicirello Computer Science
Stockton University
Galloway, NJ 08205 USA
https://www.cicirello.org/
(2024; March 2024)
Abstract

The BTPE algorithm (Binomial, Triangle, Parallelogram, Exponential) of Kachitvichyanukul and Schmeiser is one of the faster and more widely utilized algorithms for generating binomial random variates. Cicirello’s open source Java library, ρμ𝜌𝜇\rho\muitalic_ρ italic_μ, includes an implementation of BTPE as well as a variety of other random number related utilities. In this report, I explore the average case runtime of the BTPE algorithm when generating random values from binomial distribution B(n,p)𝐵𝑛𝑝B(n,p)italic_B ( italic_n , italic_p ). Beginning with Kachitvichyanukul and Schmeiser’s formula for the expected number of acceptance-rejection sampling iterations, I analyze the limit behavior as n𝑛nitalic_n approaches infinity, and show that the average runtime of BTPE converges to a constant. I instrument the open source Java implementation from the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library to experimentally validate the analysis.

keywords:
binomial; BTPE; inverse transform; Java; open source; random variate; runtime analysis

1 Introduction

In this report, I explore the average runtime behavior of binomial random variate generation within the open source Java library ρμ𝜌𝜇\rho\muitalic_ρ italic_μ [5]. The ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library provides a variety of random number related enhancements beyond what is provided by the Java API itself. The core functionality of ρμ𝜌𝜇\rho\muitalic_ρ italic_μ is provided through a hierarchy of wrapper classes. This set of ρμ𝜌𝜇\rho\muitalic_ρ italic_μ’s wrapper classes directly corresponds to the hierarchy of random number generator interfaces introduced in Java 17 [19]. In some cases, ρμ𝜌𝜇\rho\muitalic_ρ italic_μ overrides Java’s random number generators with faster algorithms, such as for random integers subject to a bound. In other cases, ρμ𝜌𝜇\rho\muitalic_ρ italic_μ adds functionality, such as additional distributions, i.e., the binomial, Cauchy, among others [5]. The initial motivation of the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library was to provide a source of enhanced and more efficient randomness for other libraries, such as JavaPermutationTools [3] and Chips-n-Salsa [4].

Among the randomness enhancements of the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library is support for generating binomial random variates, which are important to many applications [18, 17, 9, 22, 15, 2, 12, 21, 14]. There are many algorithms for generating binomial random variates [10, 11, 16, 1, 14, 13]. The ρμ𝜌𝜇\rho\muitalic_ρ italic_μ [5] library implements the BTPE Algorithm (Binomial, Triangle, Parallelogram, Exponential) [10], and falls back upon the inverse transform [10, 13] for cases that cannot be handled by BTPE.

The runtime of many algorithms for generating random values from binomial distribution B(n,p)𝐵𝑛𝑝B(n,p)italic_B ( italic_n , italic_p ) grows with some function of n𝑛nitalic_n and p𝑝pitalic_p. For example, the runtime of the inverse transform method is O(np)𝑂𝑛𝑝O(np)italic_O ( italic_n italic_p ) [10, 13]. One technique many binomial random variate algorithms utilize is acceptance–rejection sampling [8], and the iterations of such sampling is often what leads to such runtimes. BTPE does use acceptance–rejection sampling, but seems to require relatively few iterations. At the time of introduction, Kachitvichyanukul and Schmeiser determined the expected number of iterations as a function of n𝑛nitalic_n and p𝑝pitalic_p [10] (see Section 2.1). However, the aim of my present report is to provide simpler insight into the average case runtime than is provided by Kachitvichyanukul and Schmeiser’s formula.

In this report, I explore the limit of Kachitvichyanukul and Schmeiser’s formula as n𝑛nitalic_n approaches infinity (Section 3), for two cases of p𝑝pitalic_p, including the minimum p𝑝pitalic_p supported by BTPE (i.e., p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG), which maximizes the expected number of rejection sampling iterations, and p=0.5𝑝0.5p=0.5italic_p = 0.5, which is when the expected number of rejection sampling iterations is minimized. Both cases lead to average runtimes that are constants in the limit for large n𝑛nitalic_n. In Section 4, I validate the findings experimentally using the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library, and utilizing my prior empirical study [6]. I discuss the findings and offer conclusions in Section 5, including the main result that the average runtime of BTPE is Θ(1)Θ1\Theta(1)roman_Θ ( 1 ). I now begin in Section 2 with some required background.

2 Preliminaries

2.1 Rejection Sampling Iterations of BTPE

The BTPE [10] algorithm separates the binomial distribution B(n,p)𝐵𝑛𝑝B(n,p)italic_B ( italic_n , italic_p ) into four parts, using triangular functions in the middle portions, and exponential functions in the tails, and it uses acceptance–rejection sampling [8]. For complete details of BTPE, which are beyond the scope of this paper, I refer the reader to the article that introduced it [10].

To generate a random value from binomial distribution B(n,p)𝐵𝑛𝑝B(n,p)italic_B ( italic_n , italic_p ), each acceptance–rejection iteration of BTPE generates two random values from U(0,1)𝑈01U(0,1)italic_U ( 0 , 1 ), i.e., uniformly distributed over the interval [0.0,1.0)0.01.0[0.0,1.0)[ 0.0 , 1.0 ). When they introduced BTPE, Kachitvichyanukul and Schmeiser determined that the expected number of iterations, E[I]𝐸delimited-[]𝐼E[I]italic_E [ italic_I ] of BTPE is [10]:

E[I]=p4(nM)rM(1r)nM,𝐸delimited-[]𝐼subscript𝑝4binomial𝑛𝑀superscript𝑟𝑀superscript1𝑟𝑛𝑀E[I]=p_{4}\binom{n}{M}r^{M}(1-r)^{n-M},italic_E [ italic_I ] = italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG italic_M end_ARG ) italic_r start_POSTSUPERSCRIPT italic_M end_POSTSUPERSCRIPT ( 1 - italic_r ) start_POSTSUPERSCRIPT italic_n - italic_M end_POSTSUPERSCRIPT , (1)

and since each iteration generates two random uniform values from U(0,1)𝑈01U(0,1)italic_U ( 0 , 1 ), the expected number of uniform variates, E[V]𝐸delimited-[]𝑉E[V]italic_E [ italic_V ], required by BTPE is thus:

E[V]=2p4(nM)rM(1r)nM.𝐸delimited-[]𝑉2subscript𝑝4binomial𝑛𝑀superscript𝑟𝑀superscript1𝑟𝑛𝑀E[V]=2p_{4}\binom{n}{M}r^{M}(1-r)^{n-M}.italic_E [ italic_V ] = 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG italic_M end_ARG ) italic_r start_POSTSUPERSCRIPT italic_M end_POSTSUPERSCRIPT ( 1 - italic_r ) start_POSTSUPERSCRIPT italic_n - italic_M end_POSTSUPERSCRIPT . (2)

Equations 1 and 2 involve r𝑟ritalic_r, M𝑀Mitalic_M, and p4subscript𝑝4p_{4}italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT, which in turn depend upon a few others, all of which are functions of n𝑛nitalic_n and p𝑝pitalic_p. Kachitvichyanukul and Schmeiser [10] define these as follows:

r=min(p,1p),𝑟𝑝1𝑝\displaystyle r=\min(p,1-p),italic_r = roman_min ( italic_p , 1 - italic_p ) , (3)
q=1r,𝑞1𝑟\displaystyle q=1-r,italic_q = 1 - italic_r , (4)
fM=nr+r,subscript𝑓𝑀𝑛𝑟𝑟\displaystyle f_{M}=nr+r,italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_n italic_r + italic_r , (5)
M=fM,𝑀subscript𝑓𝑀\displaystyle M=\lfloor f_{M}\rfloor,italic_M = ⌊ italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ⌋ , (6)
p1=2.195nrq4.6q+0.5,subscript𝑝12.195𝑛𝑟𝑞4.6𝑞0.5\displaystyle p_{1}=\left\lfloor 2.195\sqrt{nrq}-4.6q\right\rfloor+0.5,italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT = ⌊ 2.195 square-root start_ARG italic_n italic_r italic_q end_ARG - 4.6 italic_q ⌋ + 0.5 , (7)
xM=M+0.5,subscript𝑥𝑀𝑀0.5\displaystyle x_{M}=M+0.5,italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_M + 0.5 , (8)
xL=xMp1,subscript𝑥𝐿subscript𝑥𝑀subscript𝑝1\displaystyle x_{L}=x_{M}-p_{1},italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , (9)
xR=xM+p1,subscript𝑥𝑅subscript𝑥𝑀subscript𝑝1\displaystyle x_{R}=x_{M}+p_{1},italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT , (10)
c=0.134+20.515.3+M,𝑐0.13420.515.3𝑀\displaystyle c=0.134+\frac{20.5}{15.3+M},italic_c = 0.134 + divide start_ARG 20.5 end_ARG start_ARG 15.3 + italic_M end_ARG , (11)
aL=fMxLfMxLr,subscript𝑎𝐿subscript𝑓𝑀subscript𝑥𝐿subscript𝑓𝑀subscript𝑥𝐿𝑟\displaystyle a_{L}=\frac{f_{M}-x_{L}}{f_{M}-x_{L}r},italic_a start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT = divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT italic_r end_ARG , (12)
λL=aL(1+aL2),subscript𝜆𝐿subscript𝑎𝐿1subscript𝑎𝐿2\displaystyle\lambda_{L}=a_{L}\left(1+\frac{a_{L}}{2}\right),italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT = italic_a start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT ( 1 + divide start_ARG italic_a start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG 2 end_ARG ) , (13)
aR=xRfMxRq,subscript𝑎𝑅subscript𝑥𝑅subscript𝑓𝑀subscript𝑥𝑅𝑞\displaystyle a_{R}=\frac{x_{R}-f_{M}}{x_{R}q},italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT = divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT italic_q end_ARG , (14)
λR=aR(1+aR2),subscript𝜆𝑅subscript𝑎𝑅1subscript𝑎𝑅2\displaystyle\lambda_{R}=a_{R}\left(1+\frac{a_{R}}{2}\right),italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT = italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT ( 1 + divide start_ARG italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG start_ARG 2 end_ARG ) , (15)
p2=p1(1+2c),subscript𝑝2subscript𝑝112𝑐\displaystyle p_{2}=p_{1}(1+2c),italic_p start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT = italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) , (16)
p3=p2+cλL,subscript𝑝3subscript𝑝2𝑐subscript𝜆𝐿\displaystyle p_{3}=p_{2}+\frac{c}{\lambda_{L}},italic_p start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT = italic_p start_POSTSUBSCRIPT 2 end_POSTSUBSCRIPT + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG , (17)
p4=p3+cλR.subscript𝑝4subscript𝑝3𝑐subscript𝜆𝑅\displaystyle p_{4}=p_{3}+\frac{c}{\lambda_{R}}.italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT = italic_p start_POSTSUBSCRIPT 3 end_POSTSUBSCRIPT + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG . (18)

Also note that BTPE is only relevant when: min(p,1p)10n𝑝1𝑝10𝑛\min(p,1-p)\geq\frac{10}{n}roman_min ( italic_p , 1 - italic_p ) ≥ divide start_ARG 10 end_ARG start_ARG italic_n end_ARG. Kachitvichyanukul and Schmeiser recommend using the inverse transform method [13] as a fallback for cases when BTPE is not relevant. This is what is done in the implementation in the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library [5].

The expected number of acceptance–rejection sampling iterations, expressed in Equation 2, is maximized when min(p,1p)𝑝1𝑝\min(p,1-p)roman_min ( italic_p , 1 - italic_p ) is minimal. Thus, the expected number of rejection sampling iterations is maximized for the cases p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG and p=n10n𝑝𝑛10𝑛p=\frac{n-10}{n}italic_p = divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG. Due to symmetry, these two cases lead to the same expected number of rejection sampling iterations. The nearer p𝑝pitalic_p is to 0.50.50.50.5, the fewer iterations BTPE requires on average. Table 1 shows how the expected number of required uniform variates changes as n𝑛nitalic_n increases for these two cases of p𝑝pitalic_p. It includes the minimum n𝑛nitalic_n supported by BTPE (e.g., n=20𝑛20n=20italic_n = 20), and then considers n𝑛nitalic_n at increasing powers of two to show how the number of uniform variates used by BTPE to generate one binomial random variate varies as n𝑛nitalic_n increases rapidly.

Table 1: Expected number of uniform variates to generate one binomial random variate as predicted by Equation 2 as n𝑛nitalic_n increases.
E[V]𝐸delimited-[]𝑉E[V]italic_E [ italic_V ] from Equation 2
n𝑛nitalic_n p{10n,n10n}𝑝10𝑛𝑛10𝑛p\in\left\{\frac{10}{n},\frac{n-10}{n}\right\}italic_p ∈ { divide start_ARG 10 end_ARG start_ARG italic_n end_ARG , divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG } p=0.5𝑝0.5p=0.5italic_p = 0.5
20202020 3.996 3.996
25superscript252^{5}2 start_POSTSUPERSCRIPT 5 end_POSTSUPERSCRIPT 3.837 3.599
26superscript262^{6}2 start_POSTSUPERSCRIPT 6 end_POSTSUPERSCRIPT 3.792 3.337
27superscript272^{7}2 start_POSTSUPERSCRIPT 7 end_POSTSUPERSCRIPT 3.790 2.985
28superscript282^{8}2 start_POSTSUPERSCRIPT 8 end_POSTSUPERSCRIPT 3.793 2.632
29superscript292^{9}2 start_POSTSUPERSCRIPT 9 end_POSTSUPERSCRIPT 3.796 2.420
210superscript2102^{10}2 start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT 3.797 2.317
211superscript2112^{11}2 start_POSTSUPERSCRIPT 11 end_POSTSUPERSCRIPT 3.798 2.307
212superscript2122^{12}2 start_POSTSUPERSCRIPT 12 end_POSTSUPERSCRIPT 3.798 2.276
213superscript2132^{13}2 start_POSTSUPERSCRIPT 13 end_POSTSUPERSCRIPT 3.799 2.300
214superscript2142^{14}2 start_POSTSUPERSCRIPT 14 end_POSTSUPERSCRIPT 3.799 2.299
215superscript2152^{15}2 start_POSTSUPERSCRIPT 15 end_POSTSUPERSCRIPT 3.799 2.300
216superscript2162^{16}2 start_POSTSUPERSCRIPT 16 end_POSTSUPERSCRIPT 3.799 2.302
217superscript2172^{17}2 start_POSTSUPERSCRIPT 17 end_POSTSUPERSCRIPT 3.799 2.310
218superscript2182^{18}2 start_POSTSUPERSCRIPT 18 end_POSTSUPERSCRIPT 3.799 2.310
219superscript2192^{19}2 start_POSTSUPERSCRIPT 19 end_POSTSUPERSCRIPT 3.799 2.313
220superscript2202^{20}2 start_POSTSUPERSCRIPT 20 end_POSTSUPERSCRIPT 3.799 2.314

2.2 Stirling’s Formula

While computing the limiting behavior of BTPE, we will encounter some factorials. Stirling’s formula [7] will be useful in the analysis. Stirling’s formula is as follows:

n!=2πn(ne)neαn,𝑛2𝜋𝑛superscript𝑛𝑒𝑛superscript𝑒subscript𝛼𝑛n!=\sqrt{2\pi n}\left(\frac{n}{e}\right)^{n}e^{\alpha_{n}},italic_n ! = square-root start_ARG 2 italic_π italic_n end_ARG ( divide start_ARG italic_n end_ARG start_ARG italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT , (19)

where

112n+1<αn<112n.112𝑛1subscript𝛼𝑛112𝑛\frac{1}{12n+1}<\alpha_{n}<\frac{1}{12n}.divide start_ARG 1 end_ARG start_ARG 12 italic_n + 1 end_ARG < italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT < divide start_ARG 1 end_ARG start_ARG 12 italic_n end_ARG . (20)

A consequence of using Stirling’s formula is that it will introduce terms involving eαnsuperscript𝑒subscript𝛼𝑛e^{\alpha_{n}}italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT, either generally for n𝑛nitalic_n or in other cases for specific values of n𝑛nitalic_n. The following observations will be useful:

limnαn=0,subscript𝑛subscript𝛼𝑛0\displaystyle\lim_{n\to\infty}\alpha_{n}=0\>,roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT = 0 , (21)
limnαn/2=0,subscript𝑛subscript𝛼𝑛20\displaystyle\lim_{n\to\infty}\alpha_{n/2}=0\>,roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT = 0 , (22)
limnαn10=0,subscript𝑛subscript𝛼𝑛100\displaystyle\lim_{n\to\infty}\alpha_{n-10}=0\>,roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_α start_POSTSUBSCRIPT italic_n - 10 end_POSTSUBSCRIPT = 0 , (23)
limneαn=1,subscript𝑛superscript𝑒subscript𝛼𝑛1\displaystyle\lim_{n\to\infty}e^{\alpha_{n}}=1\>,roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT = 1 , (24)
limneαn/2=1,subscript𝑛superscript𝑒subscript𝛼𝑛21\displaystyle\lim_{n\to\infty}e^{\alpha_{n/2}}=1\>,roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT = 1 , (25)
limneαn10=1.subscript𝑛superscript𝑒subscript𝛼𝑛101\displaystyle\lim_{n\to\infty}e^{\alpha_{n-10}}=1\>.roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n - 10 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT = 1 . (26)

3 Limit Analysis

Let’s now proceed to compute the limit:

limnE[V]=limn2p4(nM)rM(1r)nM,subscript𝑛𝐸delimited-[]𝑉subscript𝑛2subscript𝑝4binomial𝑛𝑀superscript𝑟𝑀superscript1𝑟𝑛𝑀\lim_{n\to\infty}E[V]=\lim_{n\to\infty}2p_{4}\binom{n}{M}r^{M}(1-r)^{n-M},roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG italic_M end_ARG ) italic_r start_POSTSUPERSCRIPT italic_M end_POSTSUPERSCRIPT ( 1 - italic_r ) start_POSTSUPERSCRIPT italic_n - italic_M end_POSTSUPERSCRIPT , (27)

for two cases, when p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG and when p=0.5𝑝0.5p=0.5italic_p = 0.5 in Sections 3.1 and 3.2, respectively.

3.1 Case 1: Maximum Rejection Sampling Iterations

Consider the limit from Equation 27 when p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG, which is the lowest p𝑝pitalic_p (in terms of n𝑛nitalic_n) supported by BTPE. Begin by computing the values of the various constants from Section 2.1 in terms of n𝑛nitalic_n and p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG as follows:

r=min(p,1p)=10n,𝑟𝑝1𝑝10𝑛\displaystyle r=\min(p,1-p)=\frac{10}{n}\>,italic_r = roman_min ( italic_p , 1 - italic_p ) = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG , (28)
q=1r=n10n,𝑞1𝑟𝑛10𝑛\displaystyle q=1-r=\frac{n-10}{n}\>,italic_q = 1 - italic_r = divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG , (29)
fM=nr+r=n(10n)+10n=10+10n,subscript𝑓𝑀𝑛𝑟𝑟𝑛10𝑛10𝑛1010𝑛\displaystyle f_{M}=nr+r=n\left(\frac{10}{n}\right)+\frac{10}{n}=10+\frac{10}{% n}\>,italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_n italic_r + italic_r = italic_n ( divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) + divide start_ARG 10 end_ARG start_ARG italic_n end_ARG = 10 + divide start_ARG 10 end_ARG start_ARG italic_n end_ARG , (30)
M=fM=10+10n=10,𝑀subscript𝑓𝑀1010𝑛10\displaystyle M=\lfloor f_{M}\rfloor=\left\lfloor 10+\frac{10}{n}\right\rfloor% =10\>,italic_M = ⌊ italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ⌋ = ⌊ 10 + divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ⌋ = 10 , (31)
c=0.134+20.515.3+M=0.134+20.515.3+100.944,𝑐0.13420.515.3𝑀0.13420.515.3100.944\displaystyle c=0.134+\frac{20.5}{15.3+M}=0.134+\frac{20.5}{15.3+10}\approx 0.% 944\>,italic_c = 0.134 + divide start_ARG 20.5 end_ARG start_ARG 15.3 + italic_M end_ARG = 0.134 + divide start_ARG 20.5 end_ARG start_ARG 15.3 + 10 end_ARG ≈ 0.944 , (32)
xM=M+0.5=10+0.5=10.5.subscript𝑥𝑀𝑀0.5100.510.5\displaystyle x_{M}=M+0.5=10+0.5=10.5\>.italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_M + 0.5 = 10 + 0.5 = 10.5 . (33)

From Equation (20), find the following, which we need later:

1121<α10<1120,1121subscript𝛼101120\displaystyle\frac{1}{121}<\alpha_{10}<\frac{1}{120}\>,divide start_ARG 1 end_ARG start_ARG 121 end_ARG < italic_α start_POSTSUBSCRIPT 10 end_POSTSUBSCRIPT < divide start_ARG 1 end_ARG start_ARG 120 end_ARG , (34)
α100.0083,subscript𝛼100.0083\displaystyle\alpha_{10}\approx 0.0083\>,italic_α start_POSTSUBSCRIPT 10 end_POSTSUBSCRIPT ≈ 0.0083 , (35)
eα101.008.superscript𝑒subscript𝛼101.008\displaystyle e^{\alpha_{10}}\approx 1.008\>.italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT 10 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT ≈ 1.008 . (36)

We will also need the following limit:

limnp1=limn2.195nrq4.6q+0.5=limn2.195n(10n)(n10n)4.6(n10n)+0.5=limn2.19510(n10n)4.6(n10n)+0.5=2.195104.6+0.5=2.5.subscript𝑛subscript𝑝1subscript𝑛2.195𝑛𝑟𝑞4.6𝑞0.5subscript𝑛2.195𝑛10𝑛𝑛10𝑛4.6𝑛10𝑛0.5subscript𝑛2.19510𝑛10𝑛4.6𝑛10𝑛0.52.195104.60.52.5\begin{split}\lim_{n\to\infty}p_{1}&=\lim_{n\to\infty}\left\lfloor 2.195\sqrt{% nrq}-4.6q\right\rfloor+0.5\\ &=\lim_{n\to\infty}\left\lfloor 2.195\sqrt{n\left(\frac{10}{n}\right)\left(% \frac{n-10}{n}\right)}-4.6\left(\frac{n-10}{n}\right)\right\rfloor+0.5\\ &=\lim_{n\to\infty}\left\lfloor 2.195\sqrt{10\left(\frac{n-10}{n}\right)}-4.6% \left(\frac{n-10}{n}\right)\right\rfloor+0.5\\ &=\left\lfloor 2.195\sqrt{10}-4.6\right\rfloor+0.5\\ &=2.5\>.\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ⌊ 2.195 square-root start_ARG italic_n italic_r italic_q end_ARG - 4.6 italic_q ⌋ + 0.5 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ⌊ 2.195 square-root start_ARG italic_n ( divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) end_ARG - 4.6 ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) ⌋ + 0.5 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ⌊ 2.195 square-root start_ARG 10 ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) end_ARG - 4.6 ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) ⌋ + 0.5 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = ⌊ 2.195 square-root start_ARG 10 end_ARG - 4.6 ⌋ + 0.5 end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = 2.5 . end_CELL end_ROW (37)

We will also need the limits of λLsubscript𝜆𝐿\lambda_{L}italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT and λRsubscript𝜆𝑅\lambda_{R}italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT as n𝑛nitalic_n approaches infinity, as follows:

limnλL=limnaL(1+aL2)=limn(fMxLfMxLr)(1+fMxL2(fMxLr))=limn(fMxM+p1fMr(xMp1))(1+fMxM+p12(fMr(xMp1)))=limn(fM8fM8r)(1+fM82(fM8r))=limn(10n+10n810n+10n80n)(1+10n+10n82(10n+10n80n))=(10810)(1+10820)=0.22subscript𝑛subscript𝜆𝐿subscript𝑛subscript𝑎𝐿1subscript𝑎𝐿2subscript𝑛subscript𝑓𝑀subscript𝑥𝐿subscript𝑓𝑀subscript𝑥𝐿𝑟1subscript𝑓𝑀subscript𝑥𝐿2subscript𝑓𝑀subscript𝑥𝐿𝑟subscript𝑛subscript𝑓𝑀subscript𝑥𝑀subscript𝑝1subscript𝑓𝑀𝑟subscript𝑥𝑀subscript𝑝11subscript𝑓𝑀subscript𝑥𝑀subscript𝑝12subscript𝑓𝑀𝑟subscript𝑥𝑀subscript𝑝1subscript𝑛subscript𝑓𝑀8subscript𝑓𝑀8𝑟1subscript𝑓𝑀82subscript𝑓𝑀8𝑟subscript𝑛10𝑛10𝑛810𝑛10𝑛80𝑛110𝑛10𝑛8210𝑛10𝑛80𝑛108101108200.22\begin{split}\lim_{n\to\infty}\lambda_{L}&=\lim_{n\to\infty}a_{L}\left(1+\frac% {a_{L}}{2}\right)\\ &=\lim_{n\to\infty}\left(\frac{f_{M}-x_{L}}{f_{M}-x_{L}r}\right)\left(1+\frac{% f_{M}-x_{L}}{2(f_{M}-x_{L}r)}\right)\\ &=\lim_{n\to\infty}\left(\frac{f_{M}-x_{M}+p_{1}}{f_{M}-r(x_{M}-p_{1})}\right)% \left(1+\frac{f_{M}-x_{M}+p_{1}}{2(f_{M}-r(x_{M}-p_{1}))}\right)\\ &=\lim_{n\to\infty}\left(\frac{f_{M}-8}{f_{M}-8r}\right)\left(1+\frac{f_{M}-8}% {2(f_{M}-8r)}\right)\\ &=\lim_{n\to\infty}\left(\frac{\frac{10n+10}{n}-8}{\frac{10n+10}{n}-\frac{80}{% n}}\right)\left(1+\frac{\frac{10n+10}{n}-8}{2(\frac{10n+10}{n}-\frac{80}{n})}% \right)\\ &=\left(\frac{10-8}{10}\right)\left(1+\frac{10-8}{20}\right)\\ &=0.22\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_a start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT ( 1 + divide start_ARG italic_a start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG 2 end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT italic_r end_ARG ) ( 1 + divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG start_ARG 2 ( italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT italic_r ) end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_r ( italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) end_ARG ) ( 1 + divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG 2 ( italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_r ( italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) ) end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - 8 end_ARG start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - 8 italic_r end_ARG ) ( 1 + divide start_ARG italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - 8 end_ARG start_ARG 2 ( italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT - 8 italic_r ) end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG - 8 end_ARG start_ARG divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG - divide start_ARG 80 end_ARG start_ARG italic_n end_ARG end_ARG ) ( 1 + divide start_ARG divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG - 8 end_ARG start_ARG 2 ( divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG - divide start_ARG 80 end_ARG start_ARG italic_n end_ARG ) end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = ( divide start_ARG 10 - 8 end_ARG start_ARG 10 end_ARG ) ( 1 + divide start_ARG 10 - 8 end_ARG start_ARG 20 end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = 0.22 end_CELL end_ROW (38)

and

limnλR=limnaR(1+aR2)=limn(xRfMxRq)(1+xRfM2xRq)=limn(xM+p1fMq(xM+p1))(1+xM+p1fM2q(xM+p1))=limn(13fM13q)(1+13fM26q)=limn(1310n+10n13n130n)(1+1310n+10n26n260n)=(131013)(1+131026)0.257.subscript𝑛subscript𝜆𝑅subscript𝑛subscript𝑎𝑅1subscript𝑎𝑅2subscript𝑛subscript𝑥𝑅subscript𝑓𝑀subscript𝑥𝑅𝑞1subscript𝑥𝑅subscript𝑓𝑀2subscript𝑥𝑅𝑞subscript𝑛subscript𝑥𝑀subscript𝑝1subscript𝑓𝑀𝑞subscript𝑥𝑀subscript𝑝11subscript𝑥𝑀subscript𝑝1subscript𝑓𝑀2𝑞subscript𝑥𝑀subscript𝑝1subscript𝑛13subscript𝑓𝑀13𝑞113subscript𝑓𝑀26𝑞subscript𝑛1310𝑛10𝑛13𝑛130𝑛11310𝑛10𝑛26𝑛260𝑛13101311310260.257\begin{split}\lim_{n\to\infty}\lambda_{R}&=\lim_{n\to\infty}a_{R}\left(1+\frac% {a_{R}}{2}\right)\\ &=\lim_{n\to\infty}\left(\frac{x_{R}-f_{M}}{x_{R}q}\right)\left(1+\frac{x_{R}-% f_{M}}{2x_{R}q}\right)\\ &=\lim_{n\to\infty}\left(\frac{x_{M}+p_{1}-f_{M}}{q(x_{M}+p_{1})}\right)\left(% 1+\frac{x_{M}+p_{1}-f_{M}}{2q(x_{M}+p_{1})}\right)\\ &=\lim_{n\to\infty}\left(\frac{13-f_{M}}{13q}\right)\left(1+\frac{13-f_{M}}{26% q}\right)\\ &=\lim_{n\to\infty}\left(\frac{13-\frac{10n+10}{n}}{\frac{13n-130}{n}}\right)% \left(1+\frac{13-\frac{10n+10}{n}}{\frac{26n-260}{n}}\right)\\ &=\left(\frac{13-10}{13}\right)\left(1+\frac{13-10}{26}\right)\\ &\approx 0.257.\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT ( 1 + divide start_ARG italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG start_ARG 2 end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT italic_q end_ARG ) ( 1 + divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG 2 italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT italic_q end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG italic_q ( italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) end_ARG ) ( 1 + divide start_ARG italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG 2 italic_q ( italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ) end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG 13 - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG 13 italic_q end_ARG ) ( 1 + divide start_ARG 13 - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG 26 italic_q end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT ( divide start_ARG 13 - divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG end_ARG start_ARG divide start_ARG 13 italic_n - 130 end_ARG start_ARG italic_n end_ARG end_ARG ) ( 1 + divide start_ARG 13 - divide start_ARG 10 italic_n + 10 end_ARG start_ARG italic_n end_ARG end_ARG start_ARG divide start_ARG 26 italic_n - 260 end_ARG start_ARG italic_n end_ARG end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = ( divide start_ARG 13 - 10 end_ARG start_ARG 13 end_ARG ) ( 1 + divide start_ARG 13 - 10 end_ARG start_ARG 26 end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ 0.257 . end_CELL end_ROW (39)

We finally can compute the limit of Equation (27):

limnE[V]=limn2p4(nM)rM(1r)nM=limn2p4(n10)(10n)10(n10n)n10=limn2p4(n!10!(n10)!)(10n)10(n10n)n10=limn2p4(n(n10)nneαn20π 1010(n10)n10eαn10eα10)(10n)10(n10n)n10=limn2p4(n(n10)20πeα10)limn2p4(n(n10)1.00820π)limn0.2503p4n(n10)limn0.2503p4limn0.2503(p1(1+2c)+cλL+cλR)limn0.2503(2.888p1+0.944λL+0.944λR)limn0.2503(7.22+0.944λL+0.944λR)0.2503(7.22+0.9440.22+0.9440.257)0.2503(7.22+4.291+3.673)3.801.subscript𝑛𝐸delimited-[]𝑉subscript𝑛2subscript𝑝4binomial𝑛𝑀superscript𝑟𝑀superscript1𝑟𝑛𝑀subscript𝑛2subscript𝑝4binomial𝑛10superscript10𝑛10superscript𝑛10𝑛𝑛10subscript𝑛2subscript𝑝4𝑛10𝑛10superscript10𝑛10superscript𝑛10𝑛𝑛10subscript𝑛2subscript𝑝4𝑛𝑛10superscript𝑛𝑛superscript𝑒subscript𝛼𝑛20𝜋superscript1010superscript𝑛10𝑛10superscript𝑒subscript𝛼𝑛10superscript𝑒subscript𝛼10superscript10𝑛10superscript𝑛10𝑛𝑛10subscript𝑛2subscript𝑝4𝑛𝑛1020𝜋superscript𝑒subscript𝛼10subscript𝑛2subscript𝑝4𝑛𝑛101.00820𝜋subscript𝑛0.2503subscript𝑝4𝑛𝑛10subscript𝑛0.2503subscript𝑝4subscript𝑛0.2503subscript𝑝112𝑐𝑐subscript𝜆𝐿𝑐subscript𝜆𝑅subscript𝑛0.25032.888subscript𝑝10.944subscript𝜆𝐿0.944subscript𝜆𝑅subscript𝑛0.25037.220.944subscript𝜆𝐿0.944subscript𝜆𝑅0.25037.220.9440.220.9440.2570.25037.224.2913.6733.801\begin{split}\lim_{n\to\infty}E[V]&=\lim_{n\to\infty}2p_{4}\binom{n}{M}r^{M}(1% -r)^{n-M}\\ &=\lim_{n\to\infty}2p_{4}\binom{n}{10}\left(\frac{10}{n}\right)^{10}\left(% \frac{n-10}{n}\right)^{n-10}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{n!}{10!(n-10)!}\right)\left(\frac{10}{n}% \right)^{10}\left(\frac{n-10}{n}\right)^{n-10}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{\frac{n}{(n-10)}}\,n^{n}\,e^{\alpha% _{n}}}{\sqrt{20\pi}\,10^{10}(n-10)^{n-10}\,e^{\alpha_{n-10}}\,e^{\alpha_{10}}}% \right)\left(\frac{10}{n}\right)^{10}\left(\frac{n-10}{n}\right)^{n-10}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{\frac{n}{(n-10)}}}{\sqrt{20\pi}\,e^% {\alpha_{10}}}\right)\approx\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{\frac{n}{% (n-10)}}}{1.008\sqrt{20\pi}}\right)\approx\lim_{n\to\infty}0.2503p_{4}\sqrt{% \frac{n}{(n-10)}}\\ &\approx\lim_{n\to\infty}0.2503p_{4}\\ &\approx\lim_{n\to\infty}0.2503\left(p_{1}(1+2c)+\frac{c}{\lambda_{L}}+\frac{c% }{\lambda_{R}}\right)\\ &\approx\lim_{n\to\infty}0.2503\left(2.888\,p_{1}+\frac{0.944}{\lambda_{L}}+% \frac{0.944}{\lambda_{R}}\right)\\ &\approx\lim_{n\to\infty}0.2503\left(7.22+\frac{0.944}{\lambda_{L}}+\frac{0.94% 4}{\lambda_{R}}\right)\\ &\approx 0.2503\left(7.22+\frac{0.944}{0.22}+\frac{0.944}{0.257}\right)\approx 0% .2503\left(7.22+4.291+3.673\right)\\ &\approx 3.801.\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG italic_M end_ARG ) italic_r start_POSTSUPERSCRIPT italic_M end_POSTSUPERSCRIPT ( 1 - italic_r ) start_POSTSUPERSCRIPT italic_n - italic_M end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG 10 end_ARG ) ( divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT italic_n - 10 end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG italic_n ! end_ARG start_ARG 10 ! ( italic_n - 10 ) ! end_ARG ) ( divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT italic_n - 10 end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG divide start_ARG italic_n end_ARG start_ARG ( italic_n - 10 ) end_ARG end_ARG italic_n start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG start_ARG square-root start_ARG 20 italic_π end_ARG 10 start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT ( italic_n - 10 ) start_POSTSUPERSCRIPT italic_n - 10 end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n - 10 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT 10 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG ) ( divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT ( divide start_ARG italic_n - 10 end_ARG start_ARG italic_n end_ARG ) start_POSTSUPERSCRIPT italic_n - 10 end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG divide start_ARG italic_n end_ARG start_ARG ( italic_n - 10 ) end_ARG end_ARG end_ARG start_ARG square-root start_ARG 20 italic_π end_ARG italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT 10 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG ) ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG divide start_ARG italic_n end_ARG start_ARG ( italic_n - 10 ) end_ARG end_ARG end_ARG start_ARG 1.008 square-root start_ARG 20 italic_π end_ARG end_ARG ) ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.2503 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT square-root start_ARG divide start_ARG italic_n end_ARG start_ARG ( italic_n - 10 ) end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.2503 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.2503 ( italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.2503 ( 2.888 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT + divide start_ARG 0.944 end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG + divide start_ARG 0.944 end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.2503 ( 7.22 + divide start_ARG 0.944 end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG + divide start_ARG 0.944 end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ 0.2503 ( 7.22 + divide start_ARG 0.944 end_ARG start_ARG 0.22 end_ARG + divide start_ARG 0.944 end_ARG start_ARG 0.257 end_ARG ) ≈ 0.2503 ( 7.22 + 4.291 + 3.673 ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ 3.801 . end_CELL end_ROW (40)

Thus, the expected number of uniform random variates required by BTPE to generate one binomial random variate converges to approximately 3.801 as n𝑛nitalic_n grows large (approximately 1.90 rejection sampling iterations on average) for the case of minimum supported p𝑝pitalic_p. Observe in Table 1 that BTPE approaches this limit case rapidly.

3.2 Case 2: Central Case

Now consider the limit from Equation 27 for the case of p=0.5𝑝0.5p=0.5italic_p = 0.5.

Let us begin by computing some of the constants from Section 2.1 for this case. When computing M𝑀Mitalic_M, assume that n𝑛nitalic_n is even, without loss of generality:

r=min(p,1p)=12,𝑟𝑝1𝑝12\displaystyle r=\min(p,1-p)=\frac{1}{2},italic_r = roman_min ( italic_p , 1 - italic_p ) = divide start_ARG 1 end_ARG start_ARG 2 end_ARG , (41)
q=1r=12,𝑞1𝑟12\displaystyle q=1-r=\frac{1}{2},italic_q = 1 - italic_r = divide start_ARG 1 end_ARG start_ARG 2 end_ARG , (42)
fM=nr+r=n+12,subscript𝑓𝑀𝑛𝑟𝑟𝑛12\displaystyle f_{M}=nr+r=\frac{n+1}{2},italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_n italic_r + italic_r = divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG , (43)
M=fM=n2.𝑀subscript𝑓𝑀𝑛2\displaystyle M=\lfloor f_{M}\rfloor=\frac{n}{2}\>.italic_M = ⌊ italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ⌋ = divide start_ARG italic_n end_ARG start_ARG 2 end_ARG . (44)

Now substitute these, and other Section 2.1 definitions, into Equation 27 and simplify:

limnE[V]=limn2p4(nM)rM(1r)nM=limn2p4(nn2)(12)n2(112)nn2=limn2p4(n!(n2)!(n2)!)(12)n=limn2p4(2πn(ne)neαnπn(n2e)n/2eαn/2πn(n2e)n/2eαn/2)(12)n=limn2p4(2πn(ne)neαnπn(ne)n(12)ne2αn/2)(12)n=limn2p4(2/πn)(eαne2αn/2)limn1.596(p4n)limn1.596(1n)(p1(1+2c)+cλL+cλR)limn1.596(1n)(p1(1+2c)+2cλR)limn1.596(p1(1+2c)n+2cnλR).subscript𝑛𝐸delimited-[]𝑉subscript𝑛2subscript𝑝4binomial𝑛𝑀superscript𝑟𝑀superscript1𝑟𝑛𝑀subscript𝑛2subscript𝑝4binomial𝑛𝑛2superscript12𝑛2superscript112𝑛𝑛2subscript𝑛2subscript𝑝4𝑛𝑛2𝑛2superscript12𝑛subscript𝑛2subscript𝑝42𝜋𝑛superscript𝑛𝑒𝑛superscript𝑒subscript𝛼𝑛𝜋𝑛superscript𝑛2𝑒𝑛2superscript𝑒subscript𝛼𝑛2𝜋𝑛superscript𝑛2𝑒𝑛2superscript𝑒subscript𝛼𝑛2superscript12𝑛subscript𝑛2subscript𝑝42𝜋𝑛superscript𝑛𝑒𝑛superscript𝑒subscript𝛼𝑛𝜋𝑛superscript𝑛𝑒𝑛superscript12𝑛superscript𝑒2subscript𝛼𝑛2superscript12𝑛subscript𝑛2subscript𝑝42𝜋𝑛superscript𝑒subscript𝛼𝑛superscript𝑒2subscript𝛼𝑛2subscript𝑛1.596subscript𝑝4𝑛subscript𝑛1.5961𝑛subscript𝑝112𝑐𝑐subscript𝜆𝐿𝑐subscript𝜆𝑅subscript𝑛1.5961𝑛subscript𝑝112𝑐2𝑐subscript𝜆𝑅subscript𝑛1.596subscript𝑝112𝑐𝑛2𝑐𝑛subscript𝜆𝑅\begin{split}\lim_{n\to\infty}E[V]&=\lim_{n\to\infty}2p_{4}\binom{n}{M}r^{M}(1% -r)^{n-M}\\ &=\lim_{n\to\infty}2p_{4}\binom{n}{\frac{n}{2}}\left(\frac{1}{2}\right)^{\frac% {n}{2}}\left(1-\frac{1}{2}\right)^{n-\frac{n}{2}}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{n!}{\left(\frac{n}{2}\right)!\left(\frac{% n}{2}\right)!}\right)\left(\frac{1}{2}\right)^{n}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{2\pi n}\left(\frac{n}{e}\right)^{n}% e^{\alpha_{n}}}{\sqrt{\pi n}\left(\frac{n}{2e}\right)^{n/2}e^{\alpha_{n/2}}% \sqrt{\pi n}\left(\frac{n}{2e}\right)^{n/2}e^{\alpha_{n/2}}}\right)\left(\frac% {1}{2}\right)^{n}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{2\pi n}\left(\frac{n}{e}\right)^{n}% e^{\alpha_{n}}}{\pi n\left(\frac{n}{e}\right)^{n}\left(\frac{1}{2}\right)^{n}e% ^{2\alpha_{n/2}}}\right)\left(\frac{1}{2}\right)^{n}\\ &=\lim_{n\to\infty}2p_{4}\left(\frac{\sqrt{2/\pi}}{\sqrt{n}}\right)\left(\frac% {e^{\alpha_{n}}}{e^{2\alpha_{n/2}}}\right)\\ &\approx\lim_{n\to\infty}1.596\left(\frac{p_{4}}{\sqrt{n}}\right)\\ &\approx\lim_{n\to\infty}1.596\left(\frac{1}{\sqrt{n}}\right)\left(p_{1}(1+2c)% +\frac{c}{\lambda_{L}}+\frac{c}{\lambda_{R}}\right)\\ &\approx\lim_{n\to\infty}1.596\left(\frac{1}{\sqrt{n}}\right)\left(p_{1}(1+2c)% +\frac{2c}{\lambda_{R}}\right)\\ &\approx\lim_{n\to\infty}1.596\left(\frac{p_{1}(1+2c)}{\sqrt{n}}+\frac{2c}{% \sqrt{n}\lambda_{R}}\right).\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG italic_M end_ARG ) italic_r start_POSTSUPERSCRIPT italic_M end_POSTSUPERSCRIPT ( 1 - italic_r ) start_POSTSUPERSCRIPT italic_n - italic_M end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( FRACOP start_ARG italic_n end_ARG start_ARG divide start_ARG italic_n end_ARG start_ARG 2 end_ARG end_ARG ) ( divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT divide start_ARG italic_n end_ARG start_ARG 2 end_ARG end_POSTSUPERSCRIPT ( 1 - divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT italic_n - divide start_ARG italic_n end_ARG start_ARG 2 end_ARG end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG italic_n ! end_ARG start_ARG ( divide start_ARG italic_n end_ARG start_ARG 2 end_ARG ) ! ( divide start_ARG italic_n end_ARG start_ARG 2 end_ARG ) ! end_ARG ) ( divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG 2 italic_π italic_n end_ARG ( divide start_ARG italic_n end_ARG start_ARG italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG start_ARG square-root start_ARG italic_π italic_n end_ARG ( divide start_ARG italic_n end_ARG start_ARG 2 italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n / 2 end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT square-root start_ARG italic_π italic_n end_ARG ( divide start_ARG italic_n end_ARG start_ARG 2 italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n / 2 end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG ) ( divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG 2 italic_π italic_n end_ARG ( divide start_ARG italic_n end_ARG start_ARG italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG start_ARG italic_π italic_n ( divide start_ARG italic_n end_ARG start_ARG italic_e end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT ( divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT italic_e start_POSTSUPERSCRIPT 2 italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG ) ( divide start_ARG 1 end_ARG start_ARG 2 end_ARG ) start_POSTSUPERSCRIPT italic_n end_POSTSUPERSCRIPT end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 2 italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT ( divide start_ARG square-root start_ARG 2 / italic_π end_ARG end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ) ( divide start_ARG italic_e start_POSTSUPERSCRIPT italic_α start_POSTSUBSCRIPT italic_n end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG start_ARG italic_e start_POSTSUPERSCRIPT 2 italic_α start_POSTSUBSCRIPT italic_n / 2 end_POSTSUBSCRIPT end_POSTSUPERSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( divide start_ARG italic_p start_POSTSUBSCRIPT 4 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( divide start_ARG 1 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ) ( italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT end_ARG + divide start_ARG italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( divide start_ARG 1 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ) ( italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) + divide start_ARG 2 italic_c end_ARG start_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG + divide start_ARG 2 italic_c end_ARG start_ARG square-root start_ARG italic_n end_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) . end_CELL end_ROW (45)

The next-to-last step above utilizes the fact that λR=λLsubscript𝜆𝑅subscript𝜆𝐿\lambda_{R}=\lambda_{L}italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT = italic_λ start_POSTSUBSCRIPT italic_L end_POSTSUBSCRIPT when p=0.5𝑝0.5p=0.5italic_p = 0.5.

Before continuing to simplify Equation 45, compute the following limits. First:

limnc=limn0.134+20.515.3+M=limn0.134+20.515.3+n2=0.134.subscript𝑛𝑐subscript𝑛0.13420.515.3𝑀subscript𝑛0.13420.515.3𝑛20.134\lim_{n\to\infty}c=\lim_{n\to\infty}0.134+\frac{20.5}{15.3+M}=\lim_{n\to\infty% }0.134+\frac{20.5}{15.3+\frac{n}{2}}=0.134.roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_c = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.134 + divide start_ARG 20.5 end_ARG start_ARG 15.3 + italic_M end_ARG = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 0.134 + divide start_ARG 20.5 end_ARG start_ARG 15.3 + divide start_ARG italic_n end_ARG start_ARG 2 end_ARG end_ARG = 0.134 . (46)

Now, compute the limit limnp1nsubscript𝑛subscript𝑝1𝑛\lim_{n\to\infty}\frac{p_{1}}{\sqrt{n}}roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG. Since p1subscript𝑝1p_{1}italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT involves a floor, compute bounds on this limit. Although we will see that the upper and lower bounds are equal, and thus via the squeeze theorem is also equal to our target limit.

limn2.195nrq4.6q+0.5nlimnp1nlimn2.195nrq4.6q+0.5nlimn2.195n/42.3+0.5nlimnp1nlimn2.195n/42.3+0.5nlimn1.0975n2.3+0.5nlimnp1nlimn1.0975n2.3+0.5nlimn1.0975n2.8nlimnp1nlimn1.0975n1.8n1.0975limnp1n 1.0975subscript𝑛2.195𝑛𝑟𝑞4.6𝑞0.5𝑛subscript𝑛subscript𝑝1𝑛subscript𝑛2.195𝑛𝑟𝑞4.6𝑞0.5𝑛subscript𝑛2.195𝑛42.30.5𝑛subscript𝑛subscript𝑝1𝑛subscript𝑛2.195𝑛42.30.5𝑛subscript𝑛1.0975𝑛2.30.5𝑛subscript𝑛subscript𝑝1𝑛subscript𝑛1.0975𝑛2.30.5𝑛subscript𝑛1.0975𝑛2.8𝑛subscript𝑛subscript𝑝1𝑛subscript𝑛1.0975𝑛1.8𝑛1.0975subscript𝑛subscript𝑝1𝑛1.0975\begin{split}\lim_{n\to\infty}\frac{\left\lfloor 2.195\sqrt{nrq}-4.6q\right% \rfloor+0.5}{\sqrt{n}}\>&\leq\lim_{n\to\infty}\frac{p_{1}}{\sqrt{n}}\leq\>\lim% _{n\to\infty}\frac{\left\lfloor 2.195\sqrt{nrq}-4.6q\right\rfloor+0.5}{\sqrt{n% }}\\ \lim_{n\to\infty}\frac{\left\lfloor 2.195\sqrt{n/4}-2.3\right\rfloor+0.5}{% \sqrt{n}}\>&\leq\lim_{n\to\infty}\frac{p_{1}}{\sqrt{n}}\leq\>\lim_{n\to\infty}% \frac{\left\lfloor 2.195\sqrt{n/4}-2.3\right\rfloor+0.5}{\sqrt{n}}\\ \lim_{n\to\infty}\frac{\left\lfloor 1.0975\sqrt{n}-2.3\right\rfloor+0.5}{\sqrt% {n}}\>&\leq\lim_{n\to\infty}\frac{p_{1}}{\sqrt{n}}\leq\>\lim_{n\to\infty}\frac% {\left\lfloor 1.0975\sqrt{n}-2.3\right\rfloor+0.5}{\sqrt{n}}\\ \lim_{n\to\infty}\frac{1.0975\sqrt{n}-2.8}{\sqrt{n}}\>&\leq\lim_{n\to\infty}% \frac{p_{1}}{\sqrt{n}}\leq\>\lim_{n\to\infty}\frac{1.0975\sqrt{n}-1.8}{\sqrt{n% }}\\ 1.0975\>&\leq\lim_{n\to\infty}\frac{p_{1}}{\sqrt{n}}\leq\>1.0975\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 2.195 square-root start_ARG italic_n italic_r italic_q end_ARG - 4.6 italic_q ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL start_CELL ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 2.195 square-root start_ARG italic_n italic_r italic_q end_ARG - 4.6 italic_q ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 2.195 square-root start_ARG italic_n / 4 end_ARG - 2.3 ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL start_CELL ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 2.195 square-root start_ARG italic_n / 4 end_ARG - 2.3 ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 1.0975 square-root start_ARG italic_n end_ARG - 2.3 ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL start_CELL ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG ⌊ 1.0975 square-root start_ARG italic_n end_ARG - 2.3 ⌋ + 0.5 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 1.0975 square-root start_ARG italic_n end_ARG - 2.8 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL start_CELL ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 1.0975 square-root start_ARG italic_n end_ARG - 1.8 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL 1.0975 end_CELL start_CELL ≤ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG ≤ 1.0975 end_CELL end_ROW (47)

The next limit that we need is limn2nλRsubscript𝑛2𝑛subscript𝜆𝑅\lim_{n\to\infty}\frac{2}{\sqrt{n}\lambda_{R}}roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2 end_ARG start_ARG square-root start_ARG italic_n end_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG as follows:

limn2nλR=limn2n(aR(1+aR2))=limn2xRqn(xRfM)(1+xRfM2xRq)=limnxRn(xRfM)(1+xRfMxR)subscript𝑛2𝑛subscript𝜆𝑅subscript𝑛2𝑛subscript𝑎𝑅1subscript𝑎𝑅2subscript𝑛2subscript𝑥𝑅𝑞𝑛subscript𝑥𝑅subscript𝑓𝑀1subscript𝑥𝑅subscript𝑓𝑀2subscript𝑥𝑅𝑞subscript𝑛subscript𝑥𝑅𝑛subscript𝑥𝑅subscript𝑓𝑀1subscript𝑥𝑅subscript𝑓𝑀subscript𝑥𝑅\begin{split}\lim_{n\to\infty}\frac{2}{\sqrt{n}\lambda_{R}}&=\lim_{n\to\infty}% \frac{2}{\sqrt{n}\left(a_{R}\left(1+\frac{a_{R}}{2}\right)\right)}\\ &=\lim_{n\to\infty}\frac{2x_{R}q}{\sqrt{n}(x_{R}-f_{M})\left(1+\frac{x_{R}-f_{% M}}{2x_{R}q}\right)}\\ &=\lim_{n\to\infty}\frac{x_{R}}{\sqrt{n}(x_{R}-f_{M})\left(1+\frac{x_{R}-f_{M}% }{x_{R}}\right)}\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2 end_ARG start_ARG square-root start_ARG italic_n end_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2 end_ARG start_ARG square-root start_ARG italic_n end_ARG ( italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT ( 1 + divide start_ARG italic_a start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG start_ARG 2 end_ARG ) ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2 italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT italic_q end_ARG start_ARG square-root start_ARG italic_n end_ARG ( italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ) ( 1 + divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG 2 italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT italic_q end_ARG ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG ( italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ) ( 1 + divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_ARG end_CELL end_ROW (48)

Now consider the following:

xRfM=xM+p1n+12=M+12+p1n+12=n2+12+p1n+12=p1.subscript𝑥𝑅subscript𝑓𝑀subscript𝑥𝑀subscript𝑝1𝑛12𝑀12subscript𝑝1𝑛12𝑛212subscript𝑝1𝑛12subscript𝑝1x_{R}-f_{M}=x_{M}+p_{1}-\frac{n+1}{2}=M+\frac{1}{2}+p_{1}-\frac{n+1}{2}=\frac{% n}{2}+\frac{1}{2}+p_{1}-\frac{n+1}{2}=p_{1}.italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT = italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT - divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG = italic_M + divide start_ARG 1 end_ARG start_ARG 2 end_ARG + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT - divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG = divide start_ARG italic_n end_ARG start_ARG 2 end_ARG + divide start_ARG 1 end_ARG start_ARG 2 end_ARG + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT - divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG = italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT . (49)

Now continue simplifying Equation 48, keeping Equation 47 in mind as well as that p1Θ(n)subscript𝑝1Θ𝑛p_{1}\in\Theta(\sqrt{n})italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ∈ roman_Θ ( square-root start_ARG italic_n end_ARG ) as follows:

limn2nλR=limnxRn(xRfM)(1+xRfMxR)=limnxM+p1p1n(1+p1xM+p1)=limnn+12+p1p1n(1+p1n+12+p1)=limnn+1+2p12p1n(1+2p1n+1+2p1)=limnn+1+2p12p1n=limnn+1n+2p1n2p1=limn2.195+n2p1=limnn2p1=12(1.0975)=12.1950.456.subscript𝑛2𝑛subscript𝜆𝑅subscript𝑛subscript𝑥𝑅𝑛subscript𝑥𝑅subscript𝑓𝑀1subscript𝑥𝑅subscript𝑓𝑀subscript𝑥𝑅subscript𝑛subscript𝑥𝑀subscript𝑝1subscript𝑝1𝑛1subscript𝑝1subscript𝑥𝑀subscript𝑝1subscript𝑛𝑛12subscript𝑝1subscript𝑝1𝑛1subscript𝑝1𝑛12subscript𝑝1subscript𝑛𝑛12subscript𝑝12subscript𝑝1𝑛12subscript𝑝1𝑛12subscript𝑝1subscript𝑛𝑛12subscript𝑝12subscript𝑝1𝑛subscript𝑛𝑛1𝑛2subscript𝑝1𝑛2subscript𝑝1subscript𝑛2.195𝑛2subscript𝑝1subscript𝑛𝑛2subscript𝑝1121.097512.1950.456\begin{split}\lim_{n\to\infty}\frac{2}{\sqrt{n}\lambda_{R}}&=\lim_{n\to\infty}% \frac{x_{R}}{\sqrt{n}(x_{R}-f_{M})\left(1+\frac{x_{R}-f_{M}}{x_{R}}\right)}\\ &=\lim_{n\to\infty}\frac{x_{M}+p_{1}}{p_{1}\sqrt{n}\left(1+\frac{p_{1}}{x_{M}+% p_{1}}\right)}\\ &=\lim_{n\to\infty}\frac{\frac{n+1}{2}+p_{1}}{p_{1}\sqrt{n}\left(1+\frac{p_{1}% }{\frac{n+1}{2}+p_{1}}\right)}\\ &=\lim_{n\to\infty}\frac{n+1+2p_{1}}{2p_{1}\sqrt{n}\left(1+\frac{2p_{1}}{n+1+2% p_{1}}\right)}\\ &=\lim_{n\to\infty}\frac{n+1+2p_{1}}{2p_{1}\sqrt{n}}\\ &=\lim_{n\to\infty}\frac{\sqrt{n}+\frac{1}{\sqrt{n}}+2\frac{p_{1}}{\sqrt{n}}}{% 2p_{1}}\\ &=\lim_{n\to\infty}\frac{2.195+\sqrt{n}}{2p_{1}}\\ &=\lim_{n\to\infty}\frac{\sqrt{n}}{2p_{1}}=\frac{1}{2(1.0975)}=\frac{1}{2.195}% \approx 0.456\>.\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2 end_ARG start_ARG square-root start_ARG italic_n end_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG ( italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT ) ( 1 + divide start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT - italic_f start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT end_ARG start_ARG italic_x start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT square-root start_ARG italic_n end_ARG ( 1 + divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG italic_x start_POSTSUBSCRIPT italic_M end_POSTSUBSCRIPT + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT square-root start_ARG italic_n end_ARG ( 1 + divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG divide start_ARG italic_n + 1 end_ARG start_ARG 2 end_ARG + italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_n + 1 + 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT square-root start_ARG italic_n end_ARG ( 1 + divide start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG italic_n + 1 + 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG ) end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG italic_n + 1 + 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT square-root start_ARG italic_n end_ARG end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG square-root start_ARG italic_n end_ARG + divide start_ARG 1 end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG + 2 divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG end_ARG start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG 2.195 + square-root start_ARG italic_n end_ARG end_ARG start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL = roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT divide start_ARG square-root start_ARG italic_n end_ARG end_ARG start_ARG 2 italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT end_ARG = divide start_ARG 1 end_ARG start_ARG 2 ( 1.0975 ) end_ARG = divide start_ARG 1 end_ARG start_ARG 2.195 end_ARG ≈ 0.456 . end_CELL end_ROW (50)

Now continue simplifying Equation 45, utilizing Equations 4647, and 50 as follows:

limnE[V]limn1.596(p1(1+2c)n+2cnλR)limn1.596(1.0975(1+2c)+0.456c)1.596(1.09751.268+0.4560.134)2.319.subscript𝑛𝐸delimited-[]𝑉subscript𝑛1.596subscript𝑝112𝑐𝑛2𝑐𝑛subscript𝜆𝑅subscript𝑛1.5961.097512𝑐0.456𝑐1.5961.09751.2680.4560.1342.319\begin{split}\lim_{n\to\infty}E[V]&\approx\lim_{n\to\infty}1.596\left(\frac{p_% {1}(1+2c)}{\sqrt{n}}+\frac{2c}{\sqrt{n}\lambda_{R}}\right)\\ &\approx\lim_{n\to\infty}1.596\left(1.0975(1+2c)+0.456c\right)\\ &\approx 1.596\left(1.0975\cdot 1.268+0.456\cdot 0.134\right)\\ &\approx 2.319.\end{split}start_ROW start_CELL roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( divide start_ARG italic_p start_POSTSUBSCRIPT 1 end_POSTSUBSCRIPT ( 1 + 2 italic_c ) end_ARG start_ARG square-root start_ARG italic_n end_ARG end_ARG + divide start_ARG 2 italic_c end_ARG start_ARG square-root start_ARG italic_n end_ARG italic_λ start_POSTSUBSCRIPT italic_R end_POSTSUBSCRIPT end_ARG ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT 1.596 ( 1.0975 ( 1 + 2 italic_c ) + 0.456 italic_c ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ 1.596 ( 1.0975 ⋅ 1.268 + 0.456 ⋅ 0.134 ) end_CELL end_ROW start_ROW start_CELL end_CELL start_CELL ≈ 2.319 . end_CELL end_ROW (51)

Thus, when p=0.5𝑝0.5p=0.5italic_p = 0.5 the expected number of uniform random variates required by BTPE to generate one binomial random variate converges to approximately 2.319 as n𝑛nitalic_n grows large (approximately 1.16 rejection sampling iterations on average). Observe in Table 1, that this limit case is reached quickly.

4 Experimental Validation

In earlier work, I used the open source Java library ρμ𝜌𝜇\rho\muitalic_ρ italic_μ to empirically explore the behavior of my BTPE implementation [6]. I wrapped an instance of Java’s SplittableRandom class, which implements the splitmix [20] pseudorandom number generator (PRNG). The purpose was to instrument the PRNG in order to count the number of uniform random variates, U(0,1)𝑈01U(0,1)italic_U ( 0 , 1 ), generated (i.e., calls to the nextDouble() method) while generating a binomial random variate. I then supply this wrapped PRNG instance as the source of randomness for ρμ𝜌𝜇\rho\muitalic_ρ italic_μ’s implementation of BTPE.

That prior paper [6] considered many combinations of n𝑛nitalic_n and p𝑝pitalic_p. Here I focus on the same values of n{25,26,,220}𝑛superscript25superscript26superscript220n\in\{2^{5},2^{6},\ldots,2^{20}\}italic_n ∈ { 2 start_POSTSUPERSCRIPT 5 end_POSTSUPERSCRIPT , 2 start_POSTSUPERSCRIPT 6 end_POSTSUPERSCRIPT , … , 2 start_POSTSUPERSCRIPT 20 end_POSTSUPERSCRIPT }. But, I only focus on two specific cases of p𝑝pitalic_p, the two cases utilized earlier in the paper: p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG from Section 3.1 and p=0.5𝑝0.5p=0.5italic_p = 0.5 from Section 3.2. For each binomial distribution B(n,p)𝐵𝑛𝑝B(n,p)italic_B ( italic_n , italic_p ), I generate 10,000 binomial random variates, and I compute the average number of uniform variates per binomial, with 95% confidence intervals. I compare the experimental mean to the prediction of the number of uniform variates from Equation 2, and test significance with a t𝑡titalic_t-test. The experiments used OpenJDK 17 on a Windows 10 PC with a 3.4 GHz AMD A10-5700 CPU and 8 GB RAM. I used ρμ𝜌𝜇\rho\muitalic_ρ italic_μ 3.1.1. Both the source code for the experiments (https://github.com/cicirello/btpe-iterations), as well as for ρμ𝜌𝜇\rho\muitalic_ρ italic_μ (https://github.com/cicirello/rho-mu) is maintained on GitHub. The API documentation for the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ library is available on the web: https://rho-mu.cicirello.org/.

Table 2: Average number of calls to U(0,1)𝑈01U(0,1)italic_U ( 0 , 1 ) by ρμ𝜌𝜇\rho\muitalic_ρ italic_μ’s BTPE implementation compared to the prediction of Equation 2. 95% confidence intervals are shown, as well as the p𝑝pitalic_p-values from t𝑡titalic_t-tests.
B(n,10n)𝐵𝑛10𝑛B(n,\frac{10}{n})italic_B ( italic_n , divide start_ARG 10 end_ARG start_ARG italic_n end_ARG ) B(n,0.5)𝐵𝑛0.5B(n,0.5)italic_B ( italic_n , 0.5 )
n𝑛nitalic_n predicted mean p𝑝pitalic_p-value predicted mean p𝑝pitalic_p-value
25superscript252^{5}2 start_POSTSUPERSCRIPT 5 end_POSTSUPERSCRIPT 3.837 3.829±0.052plus-or-minus3.8290.0523.829\pm 0.0523.829 ± 0.052 0.76 3.599 3.582±0.046plus-or-minus3.5820.0463.582\pm 0.0463.582 ± 0.046 0.46
26superscript262^{6}2 start_POSTSUPERSCRIPT 6 end_POSTSUPERSCRIPT 3.792 3.786±0.050plus-or-minus3.7860.0503.786\pm 0.0503.786 ± 0.050 0.80 3.337 3.334±0.042plus-or-minus3.3340.0423.334\pm 0.0423.334 ± 0.042 0.89
27superscript272^{7}2 start_POSTSUPERSCRIPT 7 end_POSTSUPERSCRIPT 3.790 3.810±0.051plus-or-minus3.8100.0513.810\pm 0.0513.810 ± 0.051 0.45 2.985 3.004±0.034plus-or-minus3.0040.0343.004\pm 0.0343.004 ± 0.034 0.27
28superscript282^{8}2 start_POSTSUPERSCRIPT 8 end_POSTSUPERSCRIPT 3.793 3.765±0.051plus-or-minus3.7650.0513.765\pm 0.0513.765 ± 0.051 0.27 2.632 2.637±0.025plus-or-minus2.6370.0252.637\pm 0.0252.637 ± 0.025 0.66
29superscript292^{9}2 start_POSTSUPERSCRIPT 9 end_POSTSUPERSCRIPT 3.796 3.796±0.051plus-or-minus3.7960.0513.796\pm 0.0513.796 ± 0.051 0.99 2.420 2.412±0.019plus-or-minus2.4120.0192.412\pm 0.0192.412 ± 0.019 0.41
210superscript2102^{10}2 start_POSTSUPERSCRIPT 10 end_POSTSUPERSCRIPT 3.797 3.818±0.051plus-or-minus3.8180.0513.818\pm 0.0513.818 ± 0.051 0.42 2.317 2.304±0.016plus-or-minus2.3040.0162.304\pm 0.0162.304 ± 0.016 0.11
211superscript2112^{11}2 start_POSTSUPERSCRIPT 11 end_POSTSUPERSCRIPT 3.798 3.875±0.052plus-or-minus3.8750.0523.875\pm 0.0523.875 ± 0.052 0.00 2.307 2.308±0.017plus-or-minus2.3080.0172.308\pm 0.0172.308 ± 0.017 0.85
212superscript2122^{12}2 start_POSTSUPERSCRIPT 12 end_POSTSUPERSCRIPT 3.798 3.808±0.051plus-or-minus3.8080.0513.808\pm 0.0513.808 ± 0.051 0.72 2.276 2.276±0.015plus-or-minus2.2760.0152.276\pm 0.0152.276 ± 0.015 0.98
213superscript2132^{13}2 start_POSTSUPERSCRIPT 13 end_POSTSUPERSCRIPT 3.799 3.809±0.051plus-or-minus3.8090.0513.809\pm 0.0513.809 ± 0.051 0.70 2.300 2.288±0.016plus-or-minus2.2880.0162.288\pm 0.0162.288 ± 0.016 0.13
214superscript2142^{14}2 start_POSTSUPERSCRIPT 14 end_POSTSUPERSCRIPT 3.799 3.798±0.051plus-or-minus3.7980.0513.798\pm 0.0513.798 ± 0.051 0.97 2.299 2.304±0.017plus-or-minus2.3040.0172.304\pm 0.0172.304 ± 0.017 0.55
215superscript2152^{15}2 start_POSTSUPERSCRIPT 15 end_POSTSUPERSCRIPT 3.799 3.808±0.052plus-or-minus3.8080.0523.808\pm 0.0523.808 ± 0.052 0.73 2.300 2.286±0.016plus-or-minus2.2860.0162.286\pm 0.0162.286 ± 0.016 0.08
216superscript2162^{16}2 start_POSTSUPERSCRIPT 16 end_POSTSUPERSCRIPT 3.799 3.828±0.052plus-or-minus3.8280.0523.828\pm 0.0523.828 ± 0.052 0.27 2.302 2.306±0.017plus-or-minus2.3060.0172.306\pm 0.0172.306 ± 0.017 0.65
217superscript2172^{17}2 start_POSTSUPERSCRIPT 17 end_POSTSUPERSCRIPT 3.799 3.825±0.052plus-or-minus3.8250.0523.825\pm 0.0523.825 ± 0.052 0.32 2.310 2.301±0.016plus-or-minus2.3010.0162.301\pm 0.0162.301 ± 0.016 0.29
218superscript2182^{18}2 start_POSTSUPERSCRIPT 18 end_POSTSUPERSCRIPT 3.799 3.818±0.051plus-or-minus3.8180.0513.818\pm 0.0513.818 ± 0.051 0.46 2.310 2.313±0.017plus-or-minus2.3130.0172.313\pm 0.0172.313 ± 0.017 0.73
219superscript2192^{19}2 start_POSTSUPERSCRIPT 19 end_POSTSUPERSCRIPT 3.799 3.792±0.050plus-or-minus3.7920.0503.792\pm 0.0503.792 ± 0.050 0.80 2.313 2.314±0.017plus-or-minus2.3140.0172.314\pm 0.0172.314 ± 0.017 0.91
220superscript2202^{20}2 start_POSTSUPERSCRIPT 20 end_POSTSUPERSCRIPT 3.799 3.807±0.051plus-or-minus3.8070.0513.807\pm 0.0513.807 ± 0.051 0.74 2.314 2.309±0.017plus-or-minus2.3090.0172.309\pm 0.0172.309 ± 0.017 0.58

Table 2 shows the results. The raw and processed data are available on GitHub (https://github.com/cicirello/btpe-iterations). The empirical results confirm the analytical prediction of Equation (2). Observe that there is no significant difference between the analytical prediction and the empirically computed means. T-test p𝑝pitalic_p-values are above 0.05 in almost all cases (well above in most cases). There is only a single case, B(211,10/211)𝐵superscript21110superscript211B(2^{11},10/2^{11})italic_B ( 2 start_POSTSUPERSCRIPT 11 end_POSTSUPERSCRIPT , 10 / 2 start_POSTSUPERSCRIPT 11 end_POSTSUPERSCRIPT ), in Table 2 where a t𝑡titalic_t-test p𝑝pitalic_p-value is less than 0.05, seemingly suggesting that the implementation behaves differently than theory predicts in this case. However, this case is explainable by random chance. There are 32 cases represented in Table 2, so this one case is approximately 3% of the cases tested. My more in depth empirical study explored a much larger number of cases experimentally, finding no significant difference between predicted and observed behavior in all but 4% of cases [6]. At significance level 0.05, we should expect false-positives in approximately 5% of cases.

5 Discussion and Conclusions

In this report, I analyzed the runtime behavior of the BTPE algorithm for binomial random variate generation, and observed the following concerning average performance:

  • The average number of acceptance–rejection sampling iterations, E[I]𝐸delimited-[]𝐼E[I]italic_E [ italic_I ], and average number of uniform random numbers generated while generating a binomial random variate, E[V]𝐸delimited-[]𝑉E[V]italic_E [ italic_V ], are as follows:

    1E[I]<2,1𝐸delimited-[]𝐼2\displaystyle 1\leq E[I]<2,1 ≤ italic_E [ italic_I ] < 2 , (52)
    2E[V]<4.2𝐸delimited-[]𝑉4\displaystyle 2\leq E[V]<4.2 ≤ italic_E [ italic_V ] < 4 . (53)

    At least one iteration is necessary (the above lower bound), and the above upper bounds derive from the case of minimum supported n=20𝑛20n=20italic_n = 20 for p=0.5𝑝0.5p=0.5italic_p = 0.5, which is the case requiring the maximum number of rejection sampling iterations on average (Table 1).

  • For large n𝑛nitalic_n and the case of p=10n𝑝10𝑛p=\frac{10}{n}italic_p = divide start_ARG 10 end_ARG start_ARG italic_n end_ARG, which maximizes the expected number of rejection sampling iterations, we find that the expected number of uniform random numbers required to generate one binomial random variate is a constant:

    limnE[V]3.801.subscript𝑛𝐸delimited-[]𝑉3.801\lim_{n\to\infty}E[V]\approx 3.801.roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] ≈ 3.801 . (54)
  • For large n𝑛nitalic_n and the case of p=0.5𝑝0.5p=0.5italic_p = 0.5, the case that minimizes the expected number of rejection sampling iterations, we find that the expected number of uniform random numbers required to generate one binomial random variate is also a constant:

    limnE[V]2.319.subscript𝑛𝐸delimited-[]𝑉2.319\lim_{n\to\infty}E[V]\approx 2.319.roman_lim start_POSTSUBSCRIPT italic_n → ∞ end_POSTSUBSCRIPT italic_E [ italic_V ] ≈ 2.319 . (55)

Thus, the average runtime of BTPE is Θ(1)Θ1\Theta(1)roman_Θ ( 1 ), while the average runtime of many of the alternative algorithms for generating binomial random variates is worse than a constant. For example, the average runtime of the inverse transform method is O(np)𝑂𝑛𝑝O(np)italic_O ( italic_n italic_p ) [10, 13].

In this report, I also experimentally validated my limit analysis of Kachitvichyanukul and Schmeiser’s formula, using my implementation of BTPE in the ρμ𝜌𝜇\rho\muitalic_ρ italic_μ Java library [5]. This validates: (a) Kachitvichyanukul and Schmeiser’s formula for the expected number of rejection sampling iterations, (b) my analysis of that formula, and (c) that ρμ𝜌𝜇\rho\muitalic_ρ italic_μ’s implementation of BTPE behaves as theory predicts. One limitation of this study is that it focuses on average case performance. It is possible that BTPE may exhibit many more rejection sampling iterations on occasion. The maximum number of uniform random variates generated while generating a single binomial during the course of my previous experimentation [6] was 38 (19 rejection sampling iterations). Such instances were very rare in that study, which generated approximately 2.88 million binomial random variates.

References

  • Ahrens and Dieter [1974] J. H. Ahrens and U. Dieter. Computer methods for sampling from gamma, beta, poisson and bionomial distributions. Computing, 12(3):223–246, 1974. 10.1007/BF02293108.
  • Arshad et al. [2019] Habiba Arshad, Muhammad Attique Khan, Muhammad Sharif, Mussarat Yasmin, and Muhammad Younus Javed. Multi-level features fusion and selection for human gait recognition: an optimized framework of bayesian model and binomial distribution. International Journal of Machine Learning and Cybernetics, 10(12):3601–3618, 2019. 10.1007/s13042-019-00947-0.
  • Cicirello [2018] Vincent A. Cicirello. JavaPermutationTools: A java library of permutation distance metrics. Journal of Open Source Software, 3(31):950, November 2018. 10.21105/joss.00950.
  • Cicirello [2020] Vincent A. Cicirello. Chips-n-salsa: A java library of customizable, hybridizable, iterative, parallel, stochastic, and self-adaptive local search algorithms. Journal of Open Source Software, 5(52):2448, August 2020. 10.21105/joss.02448.
  • Cicirello [2022] Vincent A. Cicirello. ρμ𝜌𝜇\rho\muitalic_ρ italic_μ: A java library of randomization enhancements and other math utilities. Journal of Open Source Software, 7(76):4663, August 2022. 10.21105/joss.04663.
  • Cicirello [2023] Vincent A. Cicirello. An analysis of an open source binomial random variate generation algorithm. Engineering Proceedings, 56(1):86, October 2023. 10.3390/ASEC2023-15349.
  • Cormen et al. [2022] Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms. MIT Press, Cambridge, MA, 4th edition, 2022.
  • Flury [1990] Bernard D. Flury. Acceptance–rejection sampling made easy. SIAM Review, 32(3):474–476, 1990. 10.1137/1032082.
  • García-García et al. [2022] Jaime Israel García-García, Nicolás Alonso Fernández Coronado, Elizabeth H. Arredondo, and Isaac Alejandro Imilpán Rivera. The binomial distribution: Historical origin and evolution of its problem situations. Mathematics, 10(15):2680, 2022. 10.3390/math10152680.
  • Kachitvichyanukul and Schmeiser [1988] Voratas Kachitvichyanukul and Bruce W. Schmeiser. Binomial random variate generation. Communications of the ACM, 31(2):216–222, 1988. 10.1145/42372.42381.
  • Kachitvichyanukul and Schmeiser [1989] Voratas Kachitvichyanukul and Bruce W. Schmeiser. Algorithm 678: Btpec: Sampling from the binomial distribution. ACM Transactions on Mathematical Software, 15(4):394–397, 1989. 10.1145/76909.76916.
  • Khan and Olivier [2019] Manzoor Khan and Jake Olivier. Regression to the mean for the bivariate binomial distribution. Statistics in Medicine, 38(13):2391–2412, 2019. 10.1002/sim.8115.
  • Knuth [1998] Donald E. Knuth. The Art of Computer Programming, Volume 2, Seminumerical Algorithms. Addison Wesley, 3rd edition, 1998.
  • Kuhl [2017] Michael E. Kuhl. History of random variate generation. In Proceedings of the 2017 Winter Simulation Conference, pages 231–242. IEEE Press, 2017. 10.1109/WSC.2017.8247791.
  • Naimi and Whitcomb [2020] Ashley I Naimi and Brian W Whitcomb. Estimating risk ratios and risk differences using regression. American Journal of Epidemiology, 189(6):508–510, 2020. 10.1093/aje/kwaa044.
  • Relles [1972] Daniel A. Relles. A simple algorithm for generating binomial random variables when n is large. Journal of the American Statistical Association, 67(339):612–613, 1972. 10.1080/01621459.1972.10481259.
  • Shah et al. [2022] Sayed Qaiser Ali Shah, Farrukh Zeeshan Khan, and Muneer Ahmad. Mitigating tcp syn flooding based edos attack in cloud computing environment using binomial distribution in sdn. Computer Communications, 182:198–211, 2022. 10.1016/j.comcom.2021.11.008.
  • Singh et al. [2022] Sunny Singh, Muskaan Chawla, Devendra Prasad, Divya Anand, Abdullah Alharbi, and Wael Alosaimi. An improved binomial distribution-based trust management algorithm for remote patient monitoring in wbans. Sustainability, 14(4):2141, 2022. 10.3390/su14042141.
  • Steele [2017] Guy Steele. Jep 356: Enhanced pseudo-random number generators. JEP 356, OpenJDK, 2017. URL https://openjdk.org/jeps/356.
  • Steele et al. [2014] Guy L. Steele, Doug Lea, and Christine H. Flood. Fast splittable pseudorandom number generators. In Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications, pages 453–472, New York, NY, USA, 2014. Association for Computing Machinery. 10.1145/2660193.2660195.
  • Wang and Pei [2019] Guantao Wang and Jingjing Pei. Macro risk: A versatile and universal strategy for measuring the overall safety of hazardous industrial installations in china. International Journal of Environmental Research and Public Health, 16(10):1680, 2019. 10.3390/ijerph16101680.
  • Zhang and Lin [2020] Xiaoxian Zhang and Zhifen Lin. Hormesis-induced gap between the guidelines and reality in ecological risk assessment. Chemosphere, 243:125348, 2020. 10.1016/j.chemosphere.2019.125348.