2013-07-17 74 views
0

我一直在困惑於如何獲得在Python中工作的某個函數。該功能,需要到其他正整數的正整數如下:兩步算法:將輸入字符串映射到輸出字符串

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

上述條款都是整數值,並定義如下:

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[n] = the element in the [n1]th slot of the input string 

x[n + 1] = the element in the [n1 + 1]th slot of the input string 

一般我們用一串數字開始,例如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]本質上是一個列表。

當你說「輸入字符串的值」時,你是什麼意思? Phi_m的簽名是什麼?

作用於此列表的函數需要列表中的單個元素,並以某種方式對數字進行分解,然後應用您在上面看到的「公式」。從這個意義上說,它更像是一個兩步算法。

請讓我知道,如果這不清楚。我一定會繼續修改,直到對這些閱讀有意義。

+0

在單獨的行解釋每個函數的每個變量。請沒有句子。首先是數據,然後解釋你的功能。 –

+0

這很不清楚。你在問一個算法。要獲得一個,我們需要確切地知道輸入是什麼,並根據輸入清楚地定義輸出。 – Gene

+0

@zoranPavlovic我在開始的時候添加了一個列表來簡要地解釋每個變量。這有幫助嗎?是否還有更多應該添加?謝謝! – 114

回答

1

也許這段代碼將讓你接近了答案:因爲做了一個在您的評論

>>> 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顯然是你的意思。

+0

'len(x)* m-1'仍然是一個。 – Gene

+0

Python對縮進非常挑剔,如果你從頁面複製/粘貼,你可能已經刪除或添加了空格。或者,你可能已經刪除或添加了空格。可能是在行的某處創建了一個製表符,不要使用製表符,嘗試重新輸入行首的空格,使其看起來與響應中的內容完全相同。 – Gene