Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
• Exercícios iniciais
• Contagem de operações
Agenda
• Exercícios iniciais
• Contagem de operações
Exercício (1)
• Resolva as equações abaixo:
a) 20 = d) 23 = g) 26 = j) 29 =
b) 21 = e) 24 = h) 27 = k) 210 =
c) 22 = f) 25 = i) 28 = l) 211 =
Exercício (2)
• Resolva as equações abaixo:
Nota: lg (n) é a mesma coisa que o logaritmo de n na base dois, ou seja, log2(n)
---------------------------- Algoritmos e Estruturas de Dados II (5)
Noções de Complexidade
Exercício (3)
• Resolva as equações abaixo:
Exercício (4)
• Plote um gráfico com todas as funções abaixo:
c) f(n) = n3 h) f(n) = | - n2 |
Agenda
• Exercícios iniciais
• Contagem de operações
...
a--;
a -= 3;
a = a - 2;
...
a--;
a -= 3;
a = a - 2; //três subtrações
...
if (a + 5 < b + 3){
i++;
++b;
a += 3;
} else {
j++;
}
… // Melhor caso
if (a + 5 < b + 3){ // 2
i++;
++b;
a += 3;
} else {
j++; // 1
}
… // Pior caso
if (a + 5 < b + 3){ // 2
i++;
++b; // 3
a += 3;
} else {
j++;
}
Cenários Possíveis
• Melhor caso: menor “tempo de execução” para todas entradas possíveis
de tamanho n
• Caso médio (ou esperado): média dos tempos de execução para todas as
entradas possíveis (abordado em Grafos / PAA)
if ( condição() ){
listaVerdadeiro();
} else {
listaFalso();
}
...
if (a + 5 < b + 3 || c + 1 < d + 3){
i++;
++b;
a += 3;
} else {
j++;
}
A B AND
F x F
T x x
...
for (int i = 0; i < 4; i++){
a--;
}
...
for (int i = 0; i < 4; i++){ // Faremos as subtrações quando i vale
a--; // 0, 1, 2, 3
}
while ( condição() ){
lista();
}
Custo: condição() + n x [lista() + condição()]
do {
lista();
} while ( condição() );
Custo: n x [lista() + condição()]
...
for (int i = 0; i < n; i++){
a--;
b--;
}
...
for (int i = 0; i < n; i++){
a--;
b--; // 2n subtrações
}
int i = 0, b = 10;
...
for (int i = 3; i < n; i++){
a--;
}
...
for (int i = 3; i < n; i++){
a--;
} //n - 3 subtrações
Exercício (5)
• Calcule o número de subtrações que o código abaixo realiza:
int i = 10;
Exercício (6)
• Calcule o número de subtrações que o código abaixo realiza:
...
for (int i = 5; i >= 2; i--){
a--;
}
Exercício (7)
• Calcule o número de subtrações que o código abaixo realiza:
...
for (int i = 0; i < 5; i++){
if (i % 2 == 0){
a--;
b--;
} else {
c--;
}
}
int a = 10;
int a = 10;
int a = 10;
int a = 10;
int a = 10;
int a = 10;
Solução difícil
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
0
}
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
0 0
}
int a = 10;
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
0 1 1
}
int a = 10;
int a = 10;
int a = 10;
false
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
0 2 2
}
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
1 2 2
}
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
1 0 2
}
int a = 10;
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
1 1 3
}
int a = 10;
int a = 10;
int a = 10;
false
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
1 2 4
}
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
2 2 4
}
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
2 0 4
}
int a = 10;
int a = 10;
int a = 10;
true
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
2 1 5
}
int a = 10;
int a = 10;
int a = 10;
false
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
2 2 6
}
int a = 10;
int a = 10;
false
for (int i = 0; i < 3; i++){ i j sub
for (int j = 0; j < 2; j++){
a--;
}
3 2 6
}
Exercício (8)
• Calcule o número de subtrações que o código abaixo realiza:
...
for (int i = 0; i < n; i++){
for (int j = 0; j < n; j++){
a--;
}
}
Exercício (9)
• Calcule o número de subtrações que o código abaixo realiza:
int i = 1, b = 10;
i = 0;
Exercício (10)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (11)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (12)
• Calcule o número de multiplicações que o código abaixo realiza:
Observação
• Sempre que o tamanho de um problema for, sistematicamente, dividido por
dois, temos um custo logarítmico
Exercício (13)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (14)
• Calcule o número de multiplicações que o código abaixo realiza:
n = 7, ………………………………………………. 7, 3, 1
Se n = 8, efetuamos a multiplicação quando i vale 8, 4, 2, 1
n = 9, ………………………………………………. 9, 4, 2, 1
n = 15, ……………………………………………… 15, 7, 3, 1
n = 16, ……………………………………………… 16, 8, 4, 2, 1
n = 17, ……………………………………………… 17, 8, 4, 2, 1
n = 31, ……………………………………………… 31, 15, 7, 3, 1
n = 32, ……………………………………………… 32, 16, 8, 4, 2, 1
n = 33, ……………………………………………… 33, 16, 8, 4, 2, 1
---------------------------- Algoritmos e Estruturas de Dados II (81)
Noções de Complexidade
n = 7, ………………………………………………. 7, 3, 1
Se n = 8, efetuamos a multiplicação quando i vale 8, 4, 2, 1
n = 9, ………………………………………………. 9, 4, 2, 1
n = 15, ……………………………………………… 15, 7, 3, 1
n = 16, ……………………………………………… 16, 8, 4, 2, 1
n = 17, ……………………………………………… 17, 8, 4, 2, 1
n = 31, ……………………………………………… 31, 15, 7, 3, 1
n = 32, ……………………………………………… 32, 16, 8, 4, 2, 1
n = 33, ……………………………………………… 33, 16, 8, 4, 2, 1
---------------------------- Algoritmos e Estruturas de Dados II (82)
Noções de Complexidade
Exercício (15)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (16)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (17)
• Calcule o número de multiplicações que o código abaixo realiza:
Exercício (18)
• Calcule o número de multiplicações que o código abaixo realiza:
a) 3n + 2n2
b) 5n + 4n3
c) lg(n) + n
d) 2n3 + 5
f) lg(n) + 5 lg(n)
a)
a) 3n + 2n2
i = 0;
...
b) 5n + 4n3
while (i < n){
i++;
c) lg(n) + n
a--; b--; c--;
}
d) 2n3 + 5
4 2
for (i = 0; i < n; i++){
e) 9n + 5n + n/2 for (j = 0; j < n; j++){
a--; b--;
f) lg(n) + 5 lg(n) }
}
Agenda
• Exercícios iniciais
• Contagem de operações
○ Um algoritmo que realiza 2n2 , 3n2 ou 5n2 operações é O(n2), Ω(n2) e 𝚯(n2)
(lg(n)) e 𝚯(lg(n))
○ Um algoritmo que realiza 9n4 + 5n2 + n/2 operações é O(n4), Ω(n4) e 𝚯(n4)
Trabalho Teórico 5
• Pergunta 1: Qual é a diferença entre as notações O, Ω e 𝚯? Pesquise!!!