对重叠集执行关联操作的最少操作数
Minimum number of operations to execute an associative operations on overlapping sets
令 V 为属于域 D 的元素数组(例如整数)
V = {v1, v2, ..., vN}
令 f(x,y) 为 [DxD]->D 中定义的二元运算符 z=f(x,y)。
f 是结合律和交换律。
f 不支持其全域的逆,即如果结果 z 和参数 x 或 y 之一已知,则并不总是可以获得另一个参数。
给定一对有序索引 (i,j),运算符 g(i,j) 定义为使用运算符 f 获得的子数组 {vi, ..., vj} 的缩减。
例如,如果 f 是乘法运算符,即 f(x,y)=x*y,则
g(2,5) = v2 * v3 * v4 * v5
我需要计算大量对 (i,j) 上的函数 g,其中涉及向量 V 的重叠元素。
我想利用运算符 f 的结合性,以运算符 f 的尽可能少的应用次数执行此计算,因为 f 在计算上非常昂贵。
例如,继续上面的示例,其中 f 是整数乘法,给定一个包含 5 个条目的数组 V 和索引对 (1,3)、(2,4)、(2,5), (1,4),我可以用 6 个乘数计算所有对:
V={1, 2, 0, 3, 5}
1. V12 = V1 * V2
2. V13 = V12 * V3 // pair (1,3)
3. V14 = V13 * V4 // pair (1,3)
4. V23 = V2 * V3
5. V24 = V23 * V4 // pair (2,4)
6. V25 = V24 * V5 // pair (2,5)
任何人都可以像我在上面手动做的那样推荐一种算法来推导出最优计算图吗?我知道问题的解决方案不是唯一的。任何最小的解决方案都可以。即使是启发式伪最优解也可以。
此问题有时称为范围半群查询问题或部分和问题,并且有一些非常快速的解决方案。 These slides derive a solution that does nα(n) preprocessing applications of f and supports queries making α(n) calls to f, where α is the inverse Ackermann function. There's also a paper detailing an even faster approach。希望这些可以帮助您朝着正确的方向开始!
令 V 为属于域 D 的元素数组(例如整数)
V = {v1, v2, ..., vN}
令 f(x,y) 为 [DxD]->D 中定义的二元运算符 z=f(x,y)。
f 是结合律和交换律。
f 不支持其全域的逆,即如果结果 z 和参数 x 或 y 之一已知,则并不总是可以获得另一个参数。
给定一对有序索引 (i,j),运算符 g(i,j) 定义为使用运算符 f 获得的子数组 {vi, ..., vj} 的缩减。
例如,如果 f 是乘法运算符,即 f(x,y)=x*y,则
g(2,5) = v2 * v3 * v4 * v5
我需要计算大量对 (i,j) 上的函数 g,其中涉及向量 V 的重叠元素。
我想利用运算符 f 的结合性,以运算符 f 的尽可能少的应用次数执行此计算,因为 f 在计算上非常昂贵。
例如,继续上面的示例,其中 f 是整数乘法,给定一个包含 5 个条目的数组 V 和索引对 (1,3)、(2,4)、(2,5), (1,4),我可以用 6 个乘数计算所有对:
V={1, 2, 0, 3, 5}
1. V12 = V1 * V2
2. V13 = V12 * V3 // pair (1,3)
3. V14 = V13 * V4 // pair (1,3)
4. V23 = V2 * V3
5. V24 = V23 * V4 // pair (2,4)
6. V25 = V24 * V5 // pair (2,5)
任何人都可以像我在上面手动做的那样推荐一种算法来推导出最优计算图吗?我知道问题的解决方案不是唯一的。任何最小的解决方案都可以。即使是启发式伪最优解也可以。
此问题有时称为范围半群查询问题或部分和问题,并且有一些非常快速的解决方案。 These slides derive a solution that does nα(n) preprocessing applications of f and supports queries making α(n) calls to f, where α is the inverse Ackermann function. There's also a paper detailing an even faster approach。希望这些可以帮助您朝着正确的方向开始!