Algorithm 如何计算由N个元素组成的数组的所有切片的数量?

Algorithm 如何计算由N个元素组成的数组的所有切片的数量?,algorithm,Algorithm,给定的N元素数组A=[a1,a2,…,aN]。切片是相邻元素的任意序列。像 [a1], [a1,a2], [a1,a2,a3], ... , [a1, a2,...,aN],[a2,a3], [a3,a4], .... 如何计算数组中所有切片的计数? 是否有一个公式可以获得数量?由于切片是由起始索引和结束索引确定的,这与询问可以从n+1元素(计算第0个和第n个索引)中选取多少个不同的对相同,其中对的顺序并不重要 即计数,“n+1选择2”的公式为:n(n+1)/2 注意:这不包括空切片。如果要对

给定的
N
元素数组
A=[a1,a2,…,aN]
。切片是相邻元素的任意序列。像

[a1], [a1,a2], [a1,a2,a3], ... , [a1, a2,...,aN],[a2,a3], [a3,a4], ....
如何计算数组中所有切片的计数?
是否有一个公式可以获得数量?

由于切片是由起始索引和结束索引确定的,这与询问可以从n+1元素(计算第0个和第n个索引)中选取多少个不同的对相同,其中对的顺序并不重要

即计数,“n+1选择2”的公式为:n(n+1)/2

注意:这不包括空切片。如果要对这些数据进行计数,并且如果空片的索引不同,则应分别对空片进行计数,则这是对多组2进行计数(作为开始/结束索引,则可以相等)。然后,您应该在上述结果中添加额外的n+1。

S(n)
是n个元素数组的所有切片的计数。 然后
S(n)=n*(n+1)/2

用数学归纳法证明。 1.基本
n=1

A = [a1]
切片数为1<代码>S(1)=1*2/2=1 2.设
S(n)=n*(n+1)/2
3.检查
S(n+1)=(n+1)*(n+2)/2
n+1
元素的数组为

[a1,a2,...,aN,a(N+1)]
它有n个元素的数组切片
[a1,a2,…,aN]
加上新切片:

(a(N+1)), (a(N+1), aN), (a(N+1), aN, a(N-1)), ... , (a(N+1),aN,...,a1)
新切片的计数(具有内部元素
a(N+1)
)为
N+1
。 因此,所有切片的计数等于n个元素数组的切片计数加上
n+1

S(n+1) = S(n) + n+1 = n(n+1)/2 + n+1 = (n^2 + n + 2n + 2)/2=(n^2+3n+2)/2
n+1
替换为
n
到步骤2中的公式中,我们得到:
S(n+1)=(n+1)(n+1+1)/2=(n+1)(n+2)/2=(n^2+3n+2)/2
。 它证明了这个公式

它还提供了有用的关系:

S(n+1) - S(n) = n + 1
n+1
n
元素数组的切片计数的意义差异为
n+1
。 示例:

A1 = [a1], A2 = [a1,a2] S(1)= 1, S(2)=3 and S(2)-S(1)=2=1+1, n=1
A3 = [a1,a2,a3], S(3)=6, S(3)-S(2)=3=2+1, n=2
A4 = [a1,a2,a3,a4], S(4)=10, S(4)-S(3)=4=3+1, n=3