Поиск позиционной функции в рекурсивной формуле - PullRequest
2 голосов
/ 07 июля 2011

Во-первых, обратите внимание, что мой английский здесь не самый лучший.Если кто-то заинтересован помочь мне в решении этой проблемы и хочет, чтобы я подробно описал что-либо, не стесняйтесь спрашивать более подробную информацию.

Высоко ценится конкретное решение для любого языка с тегами.Даже если целью этого вопроса является более общее решение в терминах формулы.

Спасибо


Давайте определим Правило последовательности SR, фиксированную последовательность целых чисел:

SR = (a, b, c, d, ..)


Пример

SR = (1, 2, 3, 5)

Давайте определим правило SS Shifting Sequence последовательность, полученную SR как:

SS = (a-0, ba, cb, dc, ..- d)


Пример

(1-0, 2-1, 3-2, 5-3) = (1, 1, 1, 2)

Правило последовательности смещенияSS должен вычислять для выходной последовательности OS согласно следующей рекурсивной формуле:

OS (n) = 0, n = 0

OS (n) = OS (n-1) + SS(i), n> 0

, где i - позиция n в текущей подгруппе SS.


Пример

OS(n) = (1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 15..)

, где n=(1,2,3,4,5,6,7,8,9,10,11,12,..).

OS(0) = 0
OS(1)  = OS(0)  + SS(1) = 0 + 1  = 1
OS(2)  = OS(1)  + SS(2) = 1 + 1  = 2
OS(3)  = OS(2)  + SS(3) = 2 + 1  = 3
OS(4)  = OS(3)  + SS(4) = 3 + 2  = 5
OS(5)  = OS(4)  + SS(1) = 5 + 1  = 6
OS(6)  = OS(5)  + SS(2) = 6 + 1  = 7
OS(7)  = OS(6)  + SS(3) = 7 + 1  = 8
OS(8)  = OS(7)  + SS(4) = 8 + 2  = 10
OS(9)  = OS(8)  + SS(1) = 10 + 1 = 11
OS(10) = OS(9)  + SS(2) = 11 + 1 = 12
OS(11) = OS(10) + SS(3) = 12 + 1 = 13
OS(12) = OS(11) + SS(4) = 13 + 2 = 15

Чего на самом деле мне не хватает (не удалось получить) - текущая позиция n в соответствующей группе смещения, заданная только n, например,что:

pos (n) = i -> S (pos (n)) = S (i)

так, наконец, я могу написать

OS (0) = 0

OS (n) = OS (n-1) + SS (pos (n))


Кем я былВ состоянии получить до сих пор это формула для текущего индекса смены группы.Я подозреваю, что это может помочь мне в определении требуемой позиционной формулы pos (n) , но не знаю как: ((

Групповой индекс можно выразить как:

G (n) = потолок (н / д (SS))

Где D (SS) - это размерность SS, то есть количество элементов в правиле последовательности.


Пример

Например, последовательность $ n $ колеблется от 1 до 12. Число групп смещения (1,1,1,2) измерения 4, которое отображает 1-> 1 в OS (n), равно 3 = 12/4.

Индекс группировки для n=9 можно вычислить как:

 G(9) = ceiling(n/D(SR)) = ceiling(9/4) = 3

ФИНАЛЬНЫЙ ОТВЕТ


Использование %Оператор - это то, чего мне не хватало. Окончательная рекурсивная формула:

OS (n) = 0, n = 0

OS (n) = OS (n-1) + SS ((n + D (SR) -1)% D (SR) + 1), n> 0

или с использованием чисто математической формулы (и определения группового индекса выше):

OS(n) = 0, n = 0

OS (n) = OS (n-1) + SS ((n + D (SR) -1 - (D (SR) * G (n))+ 1), n> 0


THANKS @ GARETH

1 Ответ

4 голосов
/ 07 июля 2011

Вопрос довольно сложен для понимания, но я думаю, что вы ищете операцию модуль .

Последовательность SS имеет 4 элемента, поэтому поз( n ) равно n по модулю 4.

Эта операция может быть вычислена во многих языках программирования, включая C # и Ruby, с помощью оператора % и вHaskell с помощью функции mod.


Если вам нужно, чтобы модуль находился в диапазоне от 1 до 4, а не от 0 до 3, используйте это выражение:

(n + 3) % 4 + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...