给定序列A={a1,a2,a3,…,an}
,我们必须找到
长度总和*(所有后续产品)
For EX:
A= {1 2}
There are 3 sub sequences = {1} , {2} , {1,2}
S = 1*(1) + 1*(2) + 2*(1*2)
= 1+2+4= 7
Similarly for A={1,2,3} we have S=46.
是否有一种有效的方法来计算这个数量,因为每个元素将出现2 ^ n-1次?
答案 0 :(得分:1)
是的,在线性时间内。
让
f(x) = (1 + a1*x) * (1 + a2*x) * … * (1 + an*x).
我们有
n
f(x) = ∏ (1 + aj*x)
j=1
= ∑ ∏ aj*x.
S ⊂ {1, …, n} j ∈ S
让f'
成为f
相对于x
的衍生物,
|S|-1
f'(x) = ∑ |S| * x * ∏ aj,
S ⊂ {1, …, n} j ∈ S
所以答案是f'(1)
。
以下Python代码以递增方式工作,其中f
是f(1)
的值,df
是f'(1)
的值。 df
的更新使用衍生产品规则。
def answer(A):
f, df = (1, 0)
for a in A:
# multiply by (1 + a*x), at x=1
f, df = (f * (1 + a), df * (1 + a) + f * a)
return df