Algorithm 前缀和变化

Algorithm 前缀和变化,algorithm,computer-science-theory,Algorithm,Computer Science Theory,我正在尝试将一些执行递归线性方程的软件并行化。我认为其中一些可能被改编成前缀和。下面是几个我正在处理的方程的例子 标准前缀和定义为: y[i] = y[i-1] + x[i] 我感兴趣的一个等式看起来像前缀sum,但有一个乘法: y[i] = A*y[i-1] + x[i] 另一个是有更深层次的递归: y[i] = y[i-1] + y[i-2] + x[i] 除了解决这两种变体的方法之外,我想知道是否有资源涵盖了如何将上述问题转化为前缀和形式。或者更一般地说,采用/调整前缀和的技术,使其

我正在尝试将一些执行递归线性方程的软件并行化。我认为其中一些可能被改编成前缀和。下面是几个我正在处理的方程的例子

标准前缀和定义为:

y[i] = y[i-1] + x[i]
我感兴趣的一个等式看起来像前缀sum,但有一个乘法:

y[i] = A*y[i-1] + x[i]
另一个是有更深层次的递归:

y[i] = y[i-1] + y[i-2] + x[i]
除了解决这两种变体的方法之外,我想知道是否有资源涵盖了如何将上述问题转化为前缀和形式。或者更一般地说,采用/调整前缀和的技术,使其更灵活。

(1)

y[i]=A*y[i-1]+x[i]

可以写成

y[z] = A^z * y[0] + Sum(A^(z-j) * x[j]) 
    ,where j E [z,1].
A^z*y[0]
可以在
O(log(z))

Sum(A^(z-j)*x[j])
可以在
O(z)
中计算

如果事先知道序列的最大大小(例如
max
),则可以根据需要预计算修改后的前缀和数组
x

prefix_x[i] = A*prefix_x[i-1] + x[i]

     then Sum(A^(z-j) * x[j]) is simply prefix_x[z]
     and the query becomes O(1) with O(max) precomputation.
(二)

y[i]=y[i-1]+y[i-2]+x[i]

可以写成

y[z] = (F[z] * y[1] + F[z-1] * y[0]) + Sum(F[z-j+1] * x[j]) 
    ,where j E [z,2] and F[x] = xth fibonaci number
(F[z]*y[1]+F[z-1]*y[0])
可以在
O(log(z))

Sum(F[z-j+1]*x[j])
可以在
O(z)
中计算

如果事先知道序列的最大大小(例如
max
),则可以将修改后的前缀和数组x作为

prefix_x[i] = prefix_x[i-1] + prefix_x[i-2] + x[i]

     then Sum(F[z-j+1] * x[j]) is simply prefix_x[z]
     and the query becomes O(1) with O(max) precomputation.

这是一个相当大的主题:你具体想用这些前缀和做什么?而且,很多数字信号处理都与这样的方程有关,所以那里也有很多实用知识。我只是在并行递归关系工具的上下文中学习了前缀和。我希望(也许是天真的)有一个关于这个想法的食谱资源。可以向非数学家解释如何利用递归关系将其转化为可加前缀和的东西的东西。