使用动态规划,迭代二项式系数的时间复杂度是多少?以及如何找到它?我可以说下面的代码是使用动态编程迭代二项式系数的示例吗?!
class BinomialCoefficient
{
// Returns value of Binomial Coefficient C(n, k)
static int binomialCoeff(int n, int k)
{
int C[][] = new int[n+1][k+1];
int i, j;
// Calculate value of Binomial Coefficient in bottom up manner
for (i = 0; i <= n; i++)
{
for (j = 0; j <= min(i, k); j++)
{
// Base Cases
if (j == 0 || j == i)
C[i][j] = 1;
// Calculate value using previosly stored values
else
C[i][j] = C[i-1][j-1] + C[i-1][j];
}
}
return C[n][k];
}
// A utility function to return minimum of two integers
static int min(int a, int b)
{
return (a<b)? a: b;
}
/* Driver program to test above function*/
public static void main(String args[])
{
int n = 5, k = 2;
System.out.println("Value of C("+n+","+k+") is "+binomialCoeff(n, k));
}
}
答案 0 :(得分:1)
您填充表格的梯形部分(帕斯卡的三角形)。空中飞人的高度为k
,长底为n
,短底为n-k
。
因此它包含k*(n+(n-k))/2
个项目,算法执行相同数量的单元格操作,复杂度为O(nk)