【发布时间】:2013-10-21 22:16:37
【问题描述】:
编辑:我不是在寻找一种算法,而是一个类似于 f(i) = sum i=0 to n-1 (C * A[i]) 的数学方程,但是关于 n(数组的长度)而不是 i(迭代 #)。
我有一个算法,它遍历大小为 n 的数组 A(元素 A[0] 到 A[n-1]),并使用数组的元素进行一些计算。我设法为算法的输出值提取了以下递归函数 f(i),其中 i 是循环的迭代:
- f(0) = A[n-1]
- f(i) = C * f(i-1) + A[n-1-i]
...其中 C 是一个整数常量。
知道我们循环遍历整个数组后,我们进行 n-1 次迭代(我们在循环之前处理 f(0))。我想将此递归函数表示为直接迭代函数,例如f(i) = sum i=0 to n-1 (C * A[i]),但我不知道怎么做(如果可行的话,它肯定不像我的例子那么简单)。我真的不知道做这种事情的正式方法,我通常通过直觉来解决更简单的问题。
可行吗?如果是这样,怎么做? 希望我已经足够清楚了,谢谢。
【问题讨论】:
-
如果它有效,为什么要改变它?
-
@AshBurlaczenko 我猜迭代函数可能比递归函数更有效。
-
你的A是什么?是 1..n 吗?还是有明显增长速度的?
-
@SaeedAmiri A 是一个包含从索引 0 到 n-1 的 n 个元素的数组。每个元素的值未知,但它们是整数。
-
如果每个元素
A[i]是任意的,你为什么期望你能找到这个算法关于n的封闭式公式?该公式将取决于数组中的每个元素,而不仅仅是数组的长度。可能你正在尝试做加权移动平均线?有一个类似这样的高效解决方案:daycounter.com/LabBook/Moving-Average.phtml
标签: arrays algorithm math recursion