两步算法:将输入字符串映射到输出字符串

2024-09-29 00:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在困惑如何让某个函数在Python中工作。函数将正整数转换为其他正整数,如下所示:

Phi_m(n2) = Phi_m(m*n + r) = m*x[n] + r*(x[n + 1] - x[n])

以上各项均为整数值,定义如下:

^{pr2}$

一般来说,我们从一个数字串开始,比如0,1,1,2,3,3,最后是一个串(k+1)m-1项,其中k是你开始的项数,不包括0。为了使用这个函数,我们首先确定m,比如m=2。现在我们用m来分解n2,其中n2代表输出序列的一个“slot”。假设n2=5。然后我们询问“输出字符串的第五个‘槽’中有什么”。在这种情况下,我们的总输出字符串的长度为(5+1)2+1。请注意,我们不计算0—它总是存在的,并且在我们的目的中是第0项,因此我们有5个初始项。为了回答这个问题,我们取5=2*2+1作为分解。现在我们有了一个分解,我们可以应用我们的函数:

F(x(5)) = F(x(2*2+1)) 2x[2] + 1(x[3] - x[2]). 

关键是,Python要做到这一点,就必须知道如何分解每个数字。所以它知道2是固定的,知道2*3太多了,所以选择2*2。然后它必须知道这太少了,然后加上余数1。只有完成了这一步,它才能得到n=5。也就是说,它可以运行函数。很明显,一旦它知道如何做,它就可以遍历我们范围内的每一个n,但我真的不知道如何编写这个函数的核心。在

现在回答一些问题:x是函数吗?单子?一个号码?x[n]本质上是一个列表。在

你说“输入字符串的值”是什么意思?菲姆的签名是什么?在

作用于这个列表的函数接受列表的一个元素,以某种方式给我们一个数字的分解,然后应用上面看到的“公式”。从这个意义上讲,它更像是一个两步算法。在

如果不清楚请告诉我。我一定会继续复习,直到对那些阅读者有意义为止。在


Tags: 函数字符串列表定义代表序列数字整数
1条回答
网友
1楼 · 发布于 2024-09-29 00:17:22

也许这段代码可以让你接近答案:

>>> def phi_m(x, m):
...   rtn = []
...   for n2 in range(0, len(x) * m - 2:
...     n = n2 / m
...     r = n2 - n * m
...     rtn.append(m * x[n] + r * (x[n + 1] - x[n]))
...     print 'n2 =', n2, ': n =', n, ' r =' , r, ' rtn =', rtn
...   rtn    
...
>>> x = [0, 1, 1, 2, 3, 3]
>>> phi_m(x, 2)
n2 = 0 : n = 0  r = 0  rtn = [0]
n2 = 1 : n = 0  r = 1  rtn = [0, 1]
n2 = 2 : n = 1  r = 0  rtn = [0, 1, 2]
n2 = 3 : n = 1  r = 1  rtn = [0, 1, 2, 2]
n2 = 4 : n = 2  r = 0  rtn = [0, 1, 2, 2, 2]
n2 = 5 : n = 2  r = 1  rtn = [0, 1, 2, 2, 2, 3]
n2 = 6 : n = 3  r = 0  rtn = [0, 1, 2, 2, 2, 3, 4]
n2 = 7 : n = 3  r = 1  rtn = [0, 1, 2, 2, 2, 3, 4, 5]
n2 = 8 : n = 4  r = 0  rtn = [0, 1, 2, 2, 2, 3, 4, 5, 6]
n2 = 9 : n = 4  r = 1  rtn = [0, 1, 2, 2, 2, 3, 4, 5, 6, 6]
>>>

您最初的长度公式产生了一个越界错误,正如您在评论中所做的那样。很明显,m * len(x) - 2就是你的意思。在

相关问题 更多 >