Вам потребуется выполнить какой-либо поиск, если у вас нет дополнительной информации о ящиках, которые вы можете использовать.Тем не менее, в общем случае вы можете преобразовать поиск в двоичную форму, что итеративно приблизит вас к приемлемому ответу быстрее, чем при использовании линейного поиска.
Для этого определите допуск ε, который вас устраиваетс и используйте что-то вроде следующего:
<i>lower_bound</i> <- 0
<i>upper_bound</i> <- 1
<b>while</b> (scaling with <i>upper_bound</i> results in no collisions)
<i>lower_bound</i> <- <i>upper_bound</i>
<i>upper_bound</i> <- 2 * <i>upper_bound</i>
<b>while</b> (|<i>upper_bound</i> - <i>lower_bound</i>| > <i>ε</i>)
<i>mid_point</i> <- (<i>upper_bound</i> + <i>lower_bound</i>) / 2
<b>if</b> (scaling with <i>mid_point</i> results in collisions)
<i>upper_bound</i> <- <i>mid_point</i>
<b>else</b>
<i>lower_bound</i> <- <i>mid_point</i>
<b>return</b> <i>lower_bound</i>