Lista01 Complexidade
Lista01 Complexidade
Lista01 Complexidade
Estrutura de Dados I
Entrega no dia .... (veja no Blackboard)
LCD Gonalves
23 de fevereiro de 2015
Sumrio
1 Regras para a entrega
2 Exercises (a lista)
2.1 Contagem de instrues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 big-O e T(n) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Medio prtica de tempos de execuo . . . . . . . . . . . . . . . . . . . . . .
4
4
5
7
SUMRIO
SUMRIO
2 Exercises (a lista)
2 Exercises (a lista)
g) int k = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int p = 1; p <= n; p++)
k = k + 1;
a) int k = 0;
for (int i = 1; i <= 4; i++)
k = k + 1;
b) int k = 0;
for (int i = 0; i <= 4; i++)
k = k + 1;
1
2
c) int k = 0;
for (int i = 1; i < 4; i++)
k = k + 1;
d) int k = 0;
for (int i = 0; i < 4; i++)
k = k + 1;
E. 2.3 [null] No convencido que voc tenha entendido, suponha o pseudocdigo abaixo e faa as
seguintes tarefas:
e) int k = 0;
for (int i = 1; i <= n; i++)
k = k + 1;
int k
while
k
i
}
1
2
3
1
2
3
4
5
6
7
= 0, i = n;
(i > 0) {
= k + 1;
= i / 2;
= 0, i = n;
(i > 0) {
= k + 1;
= i / 10;
SUMRIO
2.2
big-O e T(n)
e power2()
R: T(n) = O(n)
b)
c)
d)
e)
possuam complexidades O(n) e O(lg n), respectivamente. Vamos estimar T(n) para os dois mtodos.
Modique os cdigos de tal maneira que cada
um deles retorne o nmero de multiplicaes efetuadas ao invs do valor da potncia, um dado n.
Por exemplo,
T (n) = 3n2 + 4n + 1
T (n) = 4
T (n) = 3n3 + 4n2 + 1
T (n) = 3n log(n)+4n+1 ( log(n) sempre
menor que n mas sempre maior que algo
apenas constante para n grande)
R: T (n) = O[n log(n)]
SUMRIO
2.2
A mquina 100 vezes mais rpida consegue resolver um problema de tamanho 250 no mesmo tempo que a mais lenta resolve um de 25. (Note que T(n) o mesmo para as duas mquinas. Claro que uma mquina 100 vezes mais rpida consegue
resolver 100 problemas de tamanho 25 no mesmo tempo.)
e tB (n) = iB 2 n
t = iB 2 n iA 2 25 = iB 2 n
iA 2 25 =
iA /100 2 n
2
big-O e T(n)
SUMRIO
E. 2.18 (Adaptado de UFOP)[*] A Busca de Padres um problema clssico em cincia da computao e aplicado em reas diversas como pesquisa gentica, editorao de textos, buscas na internet,
etc. Basicamente, ele consiste em encontrar as ocorrncias de um padro p de tamanho m em um texto
t de tamanho n. Por exemplo, no texto t="PROVA DE EDI" o padro p="OVA" encontrado na posio 2 enquanto o padro p="OVO" no encontrado. A metodologia mais simples para determinar
de um padro est presente usar fora bruta, conforme mostrado no pseudocdigo abaixo
// Pesquisa o padrao p na string t
int find(String p, String t) {
int n = t.length (), m = p.length ();
for (int i = 0; i < n m + 1 ; i++) {
int k = i,
j = 0;
while ( (j <= m) && ( t.charAt(k) == p.charAt(j) ) {
j++;
k++;
}
if (j > m)
return i;
}
return -1;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a) Para entender como funciona o algoritmo, apresente o teste de mesa para t="PROVA DE EDI" e
p="OVA".
b) Em funo de n e m, qual a complexidade de pior caso? Considere apenas o nmero de
comparaes de caracteres efetuadas. Justique.
c) Em funo de n e m, qual a complexidade de melhor caso? Considere apenas o nmero de
comparaes de caracteres efetuadas. Justique.
Nota: a.charAt(k) retorna o caracter da posio k de a. Nas strings, como nos arrays, a indexao
comea a partir do 0.
E. 2.19 Mesmo enunciado do exerccio anterior. ...