【发布时间】:2012-05-10 02:56:45
【问题描述】:
是否有任何有效的技术来进行以下求和?
给定一个包含 n 个整数 A={X1,X2,…,Xn} 的有限集 A,其中 Xi 是一个整数。现在有 A 的 n 个子集,用 A1, A2, ... , An 表示。我们要计算每个子集的总和。有没有一些有效的技术?
(请注意,n 通常大于 A 的所有子集的平均大小。)
例如,如果A={1,2,3,4,5,6,7,9},A1={1,3,4,5} em> , A2={2,3,4} , A3= ... 。计算 A1 和 A2 总和的简单方法需要 5 个 Flops 进行加法:
总和(A1)=1+3+4+5=13
总和(A2)=2+3+4=9
...
现在,如果先计算 3+4,然后记录它的结果 7,我们只需要 3 个 Flops 来进行加法:
总和(A1)=1+7+5=13
总和(A2)=2+7=9
...
一般情况下呢?有没有什么有效的方法可以加快计算速度?谢谢!
【问题讨论】:
-
n可以有多少近似值? -
答案可能取决于以下因素:您的两个“n”(A 中的元素数和子集数)真的相等吗?它们有多大?子集有多大?你会用“相同的子集”重复做同样的事情吗? (注意:显然 A 并不是真正的 set 而是一个 sequence 并且大概每个 Aj 都由一个A 中的一堆索引。)
-
n 非常大,而 A 的子集的大小远小于 n。
-
是的,两个“n”相等,n大于A子集的平均大小。
-
我们是否假设由于某种原因在这个理论系统上添加非常昂贵?因为否则你会发现任何“聪明”的算法都需要更多的处理而不是简单地添加子集。