Algorithm 如何获得序列比对算法的复杂性?
为什么这个算法的复杂度是3^nAlgorithm 如何获得序列比对算法的复杂性?,algorithm,Algorithm,为什么这个算法的复杂度是3^n 分析算法opt的时间复杂度。您应该首先指定如何调用此函数。 关于大O的分析,您可以通过绘制递归树来获得它。您可以对较小的n样本执行此操作,您会注意到树的高度是n。现在,您可以注意到,对于函数的每个实例,您将再次调用同一个函数3次,因此有一棵树以3的倍数指数扩展。因此,您的复杂性是O(3^n) 奖金:与斐波那契类比 检查Fibonacci算法的基本(无记忆)递归版本,您将看到类似的结构,除了每次执行两个调用,因此复杂性为O(2^n)函数名opt()用作函数内变量的名
分析算法opt的时间复杂度。您应该首先指定如何调用此函数。 关于大O的分析,您可以通过绘制递归树来获得它。您可以对较小的
n
样本执行此操作,您会注意到树的高度是n
。现在,您可以注意到,对于函数的每个实例,您将再次调用同一个函数3次,因此有一棵树以3的倍数指数扩展。因此,您的复杂性是O(3^n)
奖金:与斐波那契类比
检查Fibonacci算法的基本(无记忆)递归版本,您将看到类似的结构,除了每次执行两个调用,因此复杂性为
O(2^n)
函数名opt()
用作函数内变量的名称。我猜是打字错误。谢谢你的反馈,我想知道点火开关。
void opt(int i , int j )
{
if(i == m)
opt = 2( n - j);
else if(j == n)
opt = 2( m - i);
else{
if(x[i] == x[j])
penalty = 0;
else
penalty = 1;
opt = min(opt(i+1,j+1) + penalty, opt(i+1,j)+2, opt(i, j+1)+2);
}
}