我将从一个例子开始。假设我们有一个大小为3的数组,其中包含元素a
,例如:(其中b
和是一些数值)c
a
b
c
|1 | 2| 3|
|一个 | 乙| c|
(假设索引从 1 开始,如上例所示)
现在所有可能增加的长度为2的子序列是:
12 23 13
所以需要这些索引处元素的乘积之和,即ab+bc+ac
对于长度3,我们只有一个递增的子序列,即 123,因此abc
应该打印。
对于长度4,我们没有序列,因此0
打印并且程序终止。
所以给定数组的输出将是:
ab+bc+ac,abc,0
因此,例如,如果元素a
和b
分别c
是 1、2 和 3,那么输出应该是11,6,0
同样,对于具有元素 a、b、c、d 的大小为4的数组,输出将是:
ab+ac+ad+bc+bd+cd,abc+abd+acd+bcd,abcd,0
等等...
现在显然蛮力对于较大的数组大小值来说效率太低了。我想知道是否有一种有效的算法来计算给定大小的数组的输出?
编辑1:我尝试找到一种模式。例如对于大小为4的数组:
The first value we need is :(ab+ac+bc)+d(a+b+c)= ab+ac+ad+bc+bd+cd (Take A=ab+ac+bd)
then the second value we need is:(abc) +d(A) = abc+abd+acd+bcd(B=abc)
then the third value we need is : (0) +d(B) = abcd(Let's take 0 as C)
then the fourth value we need is: +d(C) = 0
但它仍然需要大量计算,我无法找到一种有效的方法来实现它。
编辑2:我的问题与此不同,因为:
- 我不需要所有可能的排列。我需要从长度 2 到 n+1 的所有可能增加的子序列。
- 我也不需要打印所有可能的此类序列,我只需要由此获得的值(如上所述),因此我正在寻找一些数学概念或/和一些动态编程方法来有效地解决这个问题。
- 请注意,我正在根据索引值找到所有可能的此类递增子序列的集合,然后根据上述索引位置处的值进行计算。