如何遍历KDB中的M * N网格

时间:2019-01-30 09:54:48

标签: kdb

如何遍历m * n个在Qlang网格,则可以遍历向上,向下或斜向。 查找到达终点的可能方式。

像下面这样:

                  0
                  |
           ------- ------
          |       |       |
      ( 0 1)    (1 1)         (1 0) 
         |         .          |
   ------ -----            ------ -----
  |            |   .      |            |
( 0 1)        (1 0)       ( 1 1)        (2 0)   
.... 
(2 2)        .....................   (2 2)

1 个答案:

答案 0 :(得分:1)

使用 File "C:/Users/XYZ/Code/grabdata.py", line 31, in handle_data context.allData[currentTimeString] = currentData AttributeError: 'ExchangeTradingAlgorithmBacktest' object has no attribute 'allData' 递归调用具有不同参数的初始函数并求和以得出路径总数的一种方法。

.z.s

如果您沿着边缘而不是正方形行驶,则可以将第一行更改为:

f:{
  // When you reach a wall, there is only one way to corner so return valid path
  if[any 1=(x;y);:1];
  // Otherwise spawn 3 paths - one up, one right and one diagonally
  :.z.s[x-1;y] + .z.s[x;y-1] + .z.s[x-1;y-1] 
}

q)f[2;2]
3
q)f[2;3]
5
q)f[3;3]
13

一个封闭形式的解决方案就是找到Delannoy Number,当您沿着边缘旅行时,可以像这样实现。

if[any 0=(x;y);:1];

对于较大的电路板,这要快得多,因为我认为第一种解决方案的复杂度为O(3 ^ m + n),而第二种解决方案的复杂度为O(m * n)

d:{
  k:1+min(x;y);
  f:{prd 1+til x};
  comb:{[f;m;n] f[m] div f[n]*f[m-n]}[f];
  (sum/) (2 xexp til k) * prd (x;y) comb/:\: til k
 }

q)d[3;3]
63f