Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 02
Se (i != j)
Apenas uma das duas é executada,
j i + 1; de acordo com resultado do teste condicional.
Senão Elas são Componentes Disjuntivas.
k i – 1;
Componentes Conjuntivas
1500
1000
500
0
1 2 3 4 5 6 7 8 9 10 11 12
600
400
200
0
1 2 3 4 5 6 7 8 9 10 11 12
Considere a seqüência:
v metade_ini(u); w metade_fin(u); // O(n)
v insertion_sort(v); w insertion_sort(w); // O(n2)
u concat(v, w); // O(n + m)
Alguns exemplos:
– Para i de 1 até 100 faça imprime(i); // O(1)
Complexidade é constante, igual a 100*1, Θ(1)
– Para i de 1 até n faça imprime(v[i]); // O(1)
Complexidade é linear, igual a n*1, Θ(n)
– No caso de Iterações aninhadas:
Para i de 1 até n faça
Para j de 1 até n faça imprime(u[i, j]); // O(1)
A complexidade é quadrática, n*n*1, ou Θ(n2)
Equação: Iteração Definida
Neste tipo de estrutura, o esforço da determinação de j e m e
dos valores de i é dominado pelo das iterações de S. A
complexidade fica:
compl[iteração](n) = O( N(n)*compl[S](n) )
m( n)
c p [iteração](n) = O c p [ S ](S ( i − j ( n ))
(n))
i= j (n)
Equação: Iteração Definida
Mas como assim, o tamanho não é preservado? Veja o exemplo:
Se considerarmos tam como o
tamanho da entrada n, temos que o
laço mais externo roda n-1 vezes.
E o laço interno?
Na primeira vez, ele roda n-1 vezes.
Na segunda vez, ele roda n-2 vezes.
Na terceira vez, ele roda n-3 vezes...
Na última vez, ele roda apenas 1 vez.
S = [(n-1 + 1) * (n-1)] / 2
S = (n2 – n)/2
h ( n )−1
c p [iteração](n) = O c p [ S ](S ( anterior )
(n))
i =0
Imagine um exemplo onde seja necessário encontrar a linha de uma matriz que
contém o valor 1000 entre as n linhas existentes, cada uma com 20 elementos:
Enquanto (i ≤ n) faça
Para k de 1 até 20 faça
Se vetores[i, k] == 1000 então retorna i;
i = i + 1;
Fim Enquanto
Equação: Iteração Indefinida
Como estamos interessados no pior caso, iremos considerar
sempre que o número máximo de iterações (h(n)) será realizado.