我已经给出了一个伪代码算法,我应该找到一个递归关系,并解决这个关系来分析它的复杂性。
算法:
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.4.0/css/font-awesome.css" rel="stylesheet" />
<h1 class="text-center">Button Test Bed</h1>
<div class="container-fluid">
<button type="button" class="btn btn-default go" id='_edit'><i class="fa fa-pencil-square-o"> Edit</i>
</button>
</div>
考虑到这个代码的基本操作应该是两个比较if(p == r)和if(temp1&lt; = temp2),我想出的重现是[T(n)= 2T(n / 2)+ 2c],c是进行一次比较所花费的时间。
以下是我采取的步骤:
Find(A[p..r])
{
if(p == r)
return A[p];
else
{
temp1 = Find(A[p..((p + r)/2)]);
temp2 = Find(A[(((p + r)/2) + 1)..r]);
if(temp1 <= temp2)
return temp1;
else
return temp2;
}
}
此时,我注意到我可以使用几何公式a(1 - r ^ i)/(1 - r)简化常数c的求和,从而得出以下结果:
1: T(n) = 2T(n/2) + 2c
2: T(n/2) = 2(2T(n/2^2) + 2c) + 2c
= 2^2T(n/2^2) + 2^2c + 2c
3: T(n/4) = 2(2^2T(n/2^3) + 2c) + 2c
= 2^3*T(n/2^3) + 2^3c + 2^2c + 2c
由于T(1)= c,因为那时我们只进行一次比较,n = 2 ^ i,lg n = i,
我解决了与以下内容的关系:
Relation = 2^i*T(n/2^i) - c(1 - 2^i)
在这种情况下,T(n)= O(n)。
我想知道是否有人会介意看我的工作,看看我是否因为工作而错过了什么?非常感谢你的帮助,伙计们!
P.S:为了证实我的怀疑,所有这个算法都是为了寻找存储在数组中的最小值,对吗?
P.P.S:如果有人想知道,在这种情况下,ln的基数将是2。