Запомните набор натуральных чисел от 0
до L
эксклюзив. Для любого натурального числа от n
до log2(K)
можно разбить набор на 2^n
последовательных подмножеств равной длины. Например, для L = 256
, n = 3
мы получили бы 2^3
или 8
, подмножества: {0..31}, {32..63}, {64..95}, {96..127}, {128..160}, {160..191}, {192..223}, {224..255}
.
Позвольте f(L,n,i) : Nat -> Nat -> Nat -> (Nat,Nat)
вернуть, учитывая произвольные L
и n
, подмножество, в котором содержится некоторая i
. Например, для f(256,3,100) = (96,127)
, потому что, если мы разделим 0..255
диапазон в 2^3
подмножествах, затем в подмножестве содержится число 100
в диапазоне от 96
до 127
.
Мой вопрос: что такое быстрая реализация f
? Интересно, возможно ли это сделать за постоянное время, всего лишь с помощью нескольких побитовых операций.