I've been puzzling over how to get a certain function working in Python. The
function, takes positive integers to other positive integers as follows:
Phi_m(n2) = Phi_m(m*n + r) = m*x[n1] + r*(x[n1 + 1] - x[n1])
The above terms are all integer valued and are defined as follows:
n2 = the (n2)th slot of the output string
m = a fixed positive integer
n = some multiple of m such that n*m is less than or equal to n2
r = a remainder term to fill in the amount missing from n*m in decomposing
n2
x[n1] = the element in the [n1]th slot of the input string
x[n1 + 1] = the element in the [n1 + 1]th slot of the input string
In general we start with a string of numbers, say 0, 1, 1, 2, 3, 3 and end up
with a string of (k+1)m-1 terms, where k is the number of terms you started
with. To use the function we first fix an m, say m = 2. Now we decompose n2 in
terms of m, where n2 is representing a 'slot' of our output sequence. Say n2=5.
Then we are asking 'what is in the fifth 'slot' of our output string'. In
this case our total output string will be of length (5+1)2+1. Notice that we
do not count 0 - it is always present and is for our purposes the 0th term,
hence we have 5 initial terms. To answer our question of what goes in the slot
we take 5=2*2+1 as our decomposition. Now that we have a decomposition we can
apply our function:
F(x(5)) = F(x(2*2+1)) 2x[2] + 1(x[3] - x[2]).
The thing is, for Python to do this it has to know how to decompose each
number. So it knows 2 is fixed, and knows 2*3 is too much and so chooses 2*2.
Then it has to know this is too little and add remainder 1. Only once it's done
this can it actually grab n = 5. That is, it can run the function. It seems
clear that once it knows how to do this it can just run through every n in our
range, but I'm really not sure how to program the meat of this function.
Now to answer some questions: Is x a function? A list? A number? x[n] is
essentially a list.
What do you mean when you say "values of an input string"? What's the signature
of Phi_m?
The function acting on this list takes in a single element of the list, gives
us a decomposition of the number somehow, and then applies the 'formula' you
see above. In this sense it is more of a two step algorithm.
To give another example, say we want to apply psi_2 to 0,1,2,2. Then we have
an output of length (3+1)2-1=7. F(7)=F(2*3+1) = 2x[3] + 1(x[4] - x[3]). As we
can see, we are missing x[4] (remember 0 doesn't count as a term). So we
actually need to stop our calculation one shy of the 7 terms we 'should' have.
Hence, although we actually want 7 terms the program really only needs to give
6 terms, the other term can be hand calculated, or the user can append one
extra term to the input string 0,1,2,2 and run the program again.
Please let me know if this is unclear. I will certainly continue revising
until it makes sense to those reading.
--
http://mail.python.org/mailman/listinfo/python-list