这个算法是否有类似运行和算法的通用名称?

时间:2012-12-12 22:07:39

标签: algorithm naming

我正在寻找以下算法/算法技巧的通用名称。

xs = [0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1]

ys = [xs[0]]
for i in range(1, len(xs)):
  if xs[i] == 1:
    ys.append(ys[i - 1] + 1)
  else:
    ys.append(ys[i - 1])

print ys
# prints: [0, 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5]

即,累计在xs的某个索引处看到的1的数量。此外,有没有更简洁的方法来做到这一点?欢迎使用Scala,Python和Haskell的答案。

2 个答案:

答案 0 :(得分:0)

我不这么认为,这对于一个值来说,累积总和太基本了。保持代码原样,这是可以理解的。

答案 1 :(得分:0)

在Haskell中,可以写得更简洁,并且它被命名为scan(更确切地说是左扫描,因为它累积了左折叠的中间结果),

scanl1 (\y x -> y + if x == 1 then 1 else 0) xs

并且,对于运行总和,甚至更好,

scanl1 (+) xs