【发布时间】:2020-07-17 14:38:03
【问题描述】:
我正在尝试使用“分而治之”算法解决数字的平均值,但我编写的程序仅在元素数量为 2 的幂(2、4、8 等)时才有效。
代码是用python写的,如下
def averageDyC(ini, end, notes):
if (ini == end):
return notes[ini]
mid = int((ini + end) / 2)
x = averageDyC(ini, mid, notes)
y = averageDyC(mid + 1, end, notes)
return float((x + y) / 2)
notes = [1, 4, 7, 8, 9, 2, 4]
average = averageDyC(0, len(notas) - 1, notes)
此代码显示 3,75,但正确的平均值是 3,5
如何更改此代码以允许元素数量不同于 2 的幂?
【问题讨论】:
-
从数学上讲,这个方法是错误的,你为什么不使用
sum(notes)/len(notes)。 -
您是否尝试过使用调试器来检查您的程序是否按照它应该执行的操作?
-
正如在其他答案中所指出的,您可以通过加权平均值来修复算法的逻辑:用
return float((x*(mid-ini+1) + y*(end-mid)) / (end-ini+1))替换行return float((x + y) / 2)。然而,这会执行大量的中间除法和重乘,这有点低效,并且可能导致舍入和近似。正如 Roshin Raphel 指出的那样,您的整个算法可以用简单的行sum(notes)/len(notes)代替,它只执行一次除法。 -
@Stef,你的评论太棒了。我已经用提案线加权平均值更改了我的代码,结果是正确的,而不取决于元素的数量。
标签: python algorithm math average divide