Wikipedia Article на гильбертовом кубе включает функции, которые кодируют/декодируют произвольные индексы в/из произвольных точек кривой Гильберта. Эти алгоритмы не являются постоянными. Существует ли алгоритм с постоянным временем, который, учитывая фактическую точку кривой (и, возможно, некоторое требуемое состояние), генерирует следующую точку (и следующее состояние)?Существует ли алгоритм постоянного времени для генерации кривой гильбертовых точек пошагово?
Формально я хочу тип State
и кортеж (initialState, nextState) :: (State, State -> ((Nat, Nat), State)
, таким образом, что каждое применение nextState
дает нам следующую точку кривой Гильберта, и таким образом, что, что nextState
является оптимальным, что, вероятно, не относится к алгоритму представленный в Википедии, поскольку он, возможно, упускает возможность для инкрементных вычислений, которые мы имеем здесь. Иллюстрация:
data State = _
initialState :: State
initialState = _
-- This must be optimal
nextState :: State -> ((Nat, Nat), State)
nextState = _
-- Returns the `nth point` of the hilbert curve
hilbertPoint :: Nat -> (Nat, Nat)
hilbertPoint n = iterate (snd.nextState) initialState !! n
Когда вы говорите «генерирующие точки на лету», вы имеете в виду «генерирование случайных точек на кривой Гильберта» или что-то еще? – templatetypedef
@templatetypedef Возможно, я был неоднозначным, поэтому я добавил уровни избыточности на вопрос, чтобы сделать его максимально конкретным. – MaiaVictor
Можете ли вы рассказать о том, что вы подразумеваете под «следующей точкой кривой?» Кривая непрерывна. – templatetypedef