Есть ли способ в постоянном рабочем пространстве для выполнения произвольных размеров и произвольных базовых преобразований. То есть, чтобы преобразовать последовательность чисел n
в диапазоне [1,m]
в последовательность чисел ceiling(n*log(m)/log(p))
в диапазоне [1,p]
, используя отображение 1-к-1, которое ( предпочтительно , но не обязательно) сохраняет лексикографический порядок и дает последовательные результаты?
Я особенно заинтересован в решениях, которые являются жизнеспособными в качестве функции конвейера, т.е. способны обрабатывать больший набор данных, чем может храниться в оперативной памяти.
Я нашел ряд решений, которые требуют «рабочего пространства», пропорционального размеру входного сигнала, но ни одно еще не может обойтись без постоянного «рабочего пространства».
Имеет ли какое-либо значение удаление последовательного ограничения? То есть: позволить лексикографически последовательным входам приводить к не лексикографически последовательным выходам:
F(1,2,6,4,3,7,8) -> (5,6,3,2,1,3,5,2,4,3)
F(1,2,6,4,3,7,9) -> (5,6,3,2,1,3,5,2,4,5)
некоторые мысли:
может это сработает?
streamBase n -> convert (n
, lcm(n,p)
) -> convert (lcm(n,p)
, p
) -> streamBase p
(где lcm
является наименьшим общим множителем)