最悪の場合の時間の複雑さを与える方法を見つけようとしています。私の分析についてはよくわかりません。ネストされたfor
ループの大きな Oを読みました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
andループの中に入る必要があるかどうかはわかりません...for
ここで、それがしっかりと束縛されていることを証明する必要があります。それがビッグ シータです。
ネストされたfor
ループには Big O of があることを読みましたn^2
。これはビッグシータにも当てはまりますか? そうでない場合、ビッグシータを見つけるにはどうすればよいでしょうか?!
**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
これを my として割り当て、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
PF:
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 ≤ nn ≥ 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 により、
0 ≤ C1(n^2) ≤ (n(n+1))/2 ≤ C2( n^2) すべての n ≥ no
皆さんのことを教えてください... 私はこの資料を理解しようとしており、皆さんの意見を求めています!