number of users $N$ and for i.i.d. channel gain (see [@qin-berry-osa] for more details). In the pseudo-code, $f$ denotes the feedback in a minislot and $k$ is the count of the number of minislots used for contention resolution.

Initialize: $y_{low} = 0, y_{min} = 1 - \frac{1}{N}, y_{max} = 1$ Initialize: $f = 0$ and $k = 1$ $f = (0,1,e)$ feedback from $(y_{min}, y_{max}]$ $y_{low} = y_{min}$ $y_{min} = \frac{ (y_{min} + y_{max})}{2}$ $y_{max} = y_{min}$ $y_{min} = \frac{(y_{low} + y_{max})}{2}$ $y_{min} = y_{max} (1 - \frac{1}{N})$ $k = k + 1$

\[rem:osa\] The key features of the opportunistic splitting algorithm are the following.

1.  OSA aims to maximize the chances of success in every minislot. For example, with $N$ users independently and Uniformly distributed in $[0,1]$, the probability of success (identifying the user with the best channel) in a minislot with the range $(p,1]$, $N p (1 - p)^{N-1}$, is maximized at $p = 1 - \frac{1}{N}$. In fact, OSA begins contention resolution with the range $(1 - \frac{1}{N}, 1]$.

2.  When a collision occurs, OSA assumes that the most likely scenario is that two users are involved in the collision, and hence, it updates the threshold from 