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