我试图弄清楚如何给出最坏情况的时间复杂度。我不确定我的分析。我读过嵌套for
循环 big O is n^2
;for
这对于内部有循环的循环是否正确while
?
// A is an array of real numbers.
// The size of A is n. i,j are of type int, key is
// of type real.
Procedure IS(A)
for j = 2 to length[A]
{
key = A[ j ]
i = j-1
while i>0 and A[i]>key
{
A[i+1] = A[i]
i=i-1
}
A[i+1] = key
}
到目前为止,我有:
j=2 (+1 op)
i>0 (+n ops)
A[i] > key (+n ops)
so T(n) = 2n+1?
但我不确定我是否必须进入while
andfor
循环来分析更坏的情况时间复杂度......
现在我必须证明它是紧束缚的,即 Big theta。
我读过嵌套for
循环有 Big O of n^2
. Big Theta 也是如此吗?如果不是,我将如何去寻找 Big Theta?!
**C1= C sub 1, C2= C sub 2, no= n naught 都是正实数的元素
为了找到T(n)
我查看了的值j
并查看了 while 循环执行了多少次:
values of J: 2, 3, 4, ... n
Loop executes: 1, 2, 3, ... n
分析:
对 while 循环执行求和,并认识到它是(n(n+1))/2
I 将其分配为我的T(n)
,并证明它由n^2
. 那是n(n+1)/2= θ(n^2)
从头开始工作:
Find C1, C2, no є R+ such that 0 ≤ C1(n^2) ≤ (n(n+1))/2 ≤ C2(n^2)for all n ≥ no
To make 0 ≤ C1(n) true, C1, no, can be any positive reals
To make C1(n^2) ≤ (n(n+1))/2, C1 must be ≤ 1
To make (n(n+1))/2 ≤ C2(n^2), C2 must be ≥ 1
公积金:
Find C1, C2, no є R+ such that 0 ≤ C1(n^2) ≤ (n(n+1))/2 ≤ C2(n^2) for all n ≥ no
Let C1= 1/2, C2= 1 and no = 1.
证明 0 ≤ C1(n^2) 为真 C1(n^2)= n^2/2
n^2/2≥ no^2/2
⇒no^2/2≥ 0
1/2 > 0
因此 C1 (n^2) ≥ 0 被证明是正确的!证明 C1(n^2) ≤ (n(n+1))/2 为真 C1(n^2) ≤ (n(n+1))/2
n^2/2 ≤ (n(n+1 ))/2 n^2 ≤ n(n+1)
n^2 ≤ n^2+n
0 ≤ n我们知道这是真的,因为 n ≥ no = 1
因此 C1(n^2) ≤ (n(n+1))/2 被证明是真的!证明 (n(n+1))/2 ≤ C2(n^2) 为真 (n(n+1))/2 ≤ C2(n^2)
(n+1)/2 ≤ C2(n)
n+1 ≤ 2 C2(n)
n+1 ≤ 2(n)
1 ≤ 2n-n
1 ≤ n(2-1) = n
1≤ n
另外,我们知道这是正确的,因为 n ≥ no = 1因此,根据 1、2 和 3,θ(n^2 )= (n(n+1))/2 为真,因为
0 ≤ C1(n^2) ≤ (n(n+1))/2 ≤ C2( n^2) 对于所有 n ≥ no
告诉我你们在做什么...我正在努力理解这些材料,并希望大家提供意见!