Я пытаюсь выяснить, как дать сложность времени наихудшего случая. Я не уверен в моем анализе. Я прочитал вложенные циклы for
, большие 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
и for
, чтобы проанализировать сложность времени в худшем случае ...
Теперь я должен доказать, что оно тесно связано, то есть Большая тэта.
Я читал, что вложенные циклы for
имеют значение Big O n^2
. Это также верно для Большой Теты? Если нет, то как мне найти Большую Тета?!
** C1 = C sub 1, C2 = C sub 2, а no = n - все это элементы положительных вещественных чисел
Чтобы найти T(n)
, я посмотрел на значения j
и посмотрел, сколько раз выполнялся цикл while:
values of J: 2, 3, 4, ... n
Loop executes: 1, 2, 3, ... n
Анализ:
Возьмите сумму выполнения цикла while и узнайте, что это (n(n+1))/2
Я назначу это как 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≥ нет ^ 2/2
⇒ нет ^ 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 ≥ нет
Скажите, что вы, ребята ... Я пытаюсь понять этот материал и хотел бы, чтобы вы все внесли!