格子

遍曆三叉樹的每條路徑

  • April 9, 2013

我正在嘗試提出一種算法來遍曆三叉樹的每條可能路徑,但很難想出一個。有沒有這方面的文獻或其他人寫過類似的東西?

具體來說,我正在嘗試計算從節點 0 到每個可能路徑末端的股票交易的損益。

編輯:讓我澄清一下 - 對於 1 步三叉樹,有三個路徑:1(向上)0(中間)或 -1(向下)。添加另一個步驟使樹有 5 個終點和 9 條路徑: 11 (up,up) 10 (up,mid) 01 (mid, up) 1-1 (up,down) 00 (mid,mid) -11 (down ,上) 0-1 (m,d) -10 (d,m) -1-1 (d,d)

我知道在給定點結束的路徑總數由帕斯卡的四面體給出,但我不知道如何為任意(n 步)樹提出所有路徑。所以我需要 1,-1,1,-1,0 序列,在這種情況下,它將在 5 步樹的中間節點上結束。

如果我理解正確,這裡有一個 Python 範例。任何其他程式語言都應該能夠做類似的事情:

def search(path):
   if len(path) == 5:
       if sum(path) == 0:
           print path
   else:
       search(path+[1])
       search(path+[0])
       search(path+[-1])

只需使用空數組呼叫它:

>> search([])
[1, 1, 0, -1, -1]
[1, 1, -1, 0, -1]
[1, 1, -1, -1, 0]
[1, 0, 1, -1, -1]
[1, 0, 0, 0, -1]
[1, 0, 0, -1, 0]
[1, 0, -1, 1, -1]
[1, 0, -1, 0, 0]
[1, 0, -1, -1, 1]
[1, -1, 1, 0, -1]
[1, -1, 1, -1, 0]
[1, -1, 0, 1, -1]
[1, -1, 0, 0, 0]
[1, -1, 0, -1, 1]
[1, -1, -1, 1, 0]
[1, -1, -1, 0, 1]
[0, 1, 1, -1, -1]
[0, 1, 0, 0, -1]
[0, 1, 0, -1, 0]
[0, 1, -1, 1, -1]
[0, 1, -1, 0, 0]
[0, 1, -1, -1, 1]
[0, 0, 1, 0, -1]
[0, 0, 1, -1, 0]
[0, 0, 0, 1, -1]
[0, 0, 0, 0, 0]
[0, 0, 0, -1, 1]
[0, 0, -1, 1, 0]
[0, 0, -1, 0, 1]
[0, -1, 1, 1, -1]
[0, -1, 1, 0, 0]
[0, -1, 1, -1, 1]
[0, -1, 0, 1, 0]
[0, -1, 0, 0, 1]
[0, -1, -1, 1, 1]
[-1, 1, 1, 0, -1]
[-1, 1, 1, -1, 0]
[-1, 1, 0, 1, -1]
[-1, 1, 0, 0, 0]
[-1, 1, 0, -1, 1]
[-1, 1, -1, 1, 0]
[-1, 1, -1, 0, 1]
[-1, 0, 1, 1, -1]
[-1, 0, 1, 0, 0]
[-1, 0, 1, -1, 1]
[-1, 0, 0, 1, 0]
[-1, 0, 0, 0, 1]
[-1, 0, -1, 1, 1]
[-1, -1, 1, 1, 0]
[-1, -1, 1, 0, 1]
[-1, -1, 0, 1, 1]

要將索引轉換為以3 為基數(實際上是以 3 為基數的數組,每個數字選擇向上/中間/向下移動),您只需要交替使用模 3(餘數)運算符和整數除以 3。或者是你問別的?

引用自:https://quant.stackexchange.com/questions/7699