SlideShare uma empresa Scribd logo
1 de 127
Baixar para ler offline
Aula 09 – An´alise Assint´otica de
Algoritmos Iterativos e Recursivos
Norton Trevisan Roman
norton@usp.br
18 de setembro de 2018
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 1 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
n2
+ 2n − 3
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
n2
+ 2n − 3
Contamos realmente
todas as opera¸c˜oes?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
n2
+ 2n − 3
Contamos realmente
todas as opera¸c˜oes?
N˜ao. Apenas as que
consideramos
relevantes
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
O que acontece se
incluirmos as demais
opera¸c˜oes?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
O que acontece se
incluirmos as demais
opera¸c˜oes?
Adicionamos
3(n − 1) opera¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
O que acontece se
incluirmos as demais
opera¸c˜oes?
Adicionamos
3(n − 1) opera¸c˜oes
Mais 2
n(n − 1)
2
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) { 3(n − 1)
int aux = v[i]; n − 1
int j = i; n − 1
while ((j > 0) &&
(aux < v[j-1])) { 2n(n−1)
2
v[j] = v[j-1]; n(n−1)
2
j--; n(n−1)
2
}
v[j] = aux; n − 1
}
}
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 4 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ou seja:
6(n − 1) + 2n(n − 1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ou seja:
6(n − 1) + 2n(n − 1)
= 6n − 6 + 2n2
− 2n
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ou seja:
6(n − 1) + 2n(n − 1)
= 6n − 6 + 2n2
− 2n
= 2n2
+ 4n − 6
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Comparemos as 2
vers˜oes:
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Comparemos as 2
vers˜oes:
v1 : n2
+ 2n − 3
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Comparemos as 2
vers˜oes:
v1 : n2
+ 2n − 3
v2 : 2n2
+ 4n − 6
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Comparemos as 2
vers˜oes:
v1 : n2
+ 2n − 3
v2 : 2n2
+ 4n − 6
Ou seja v2 = 2v1
Diferem apenas por
uma constante
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E isso importa?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E isso importa?
Se o objetivo for fazer
uma estimativa mais
precisa, com certeza!
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E isso importa?
Se o objetivo for fazer
uma estimativa mais
precisa, com certeza!
Mas se o objetivo for
fazer uma an´alise
assint´otica do
algoritmo, certamente
n˜ao
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E isso porque as
duas contagens s˜ao
idˆenticas, a menos
de uma constante
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 8 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E isso porque as
duas contagens s˜ao
idˆenticas, a menos
de uma constante
Ent˜ao, qual seria a
complexidade desse
algoritmo?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 8 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Θ(n2
+ 2n − 3), ou
simplesmente
Θ(n2
+ n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Θ(n2
+ 2n − 3), ou
simplesmente
Θ(n2
+ n)
n2
+n ≤ n2
+2n −3 ≤
2n2
+ 2n, para n ≥ 3
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Θ(n2
+ 2n − 3), ou
simplesmente
Θ(n2
+ n)
n2
+n ≤ n2
+2n −3 ≤
2n2
+ 2n, para n ≥ 3
n2
+n ≤ 2n2
+4n−6 ≤
4n2
+ 4n, para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E por que Θ?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E por que Θ?
J´a temos o c´alculo
“exato” → temos
um limite assint´otico
firme
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
E por que Θ?
J´a temos o c´alculo
“exato” → temos
um limite assint´otico
firme
E precisamos mesmo
disso?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Suponha que nos
interessa apenas um
limite superior
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 11 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Suponha que nos
interessa apenas um
limite superior
Como isso nos ajuda
a calcular a
complexidade desse
algoritmo?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 11 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Temos um la¸co
proporcional `a
entrada: O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Temos um la¸co
proporcional `a
entrada: O(n)
Faz, no m´aximo, n
itera¸c˜oes
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Temos um la¸co
proporcional `a
entrada: O(n)
Faz, no m´aximo, n
itera¸c˜oes
E outro proporcional
`a entrada (O(n))
dentro deste
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao o algoritmo ´e
O(n)O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 13 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao o algoritmo ´e
O(n)O(n)
E, lembrando que
O(f (n))O(g(n)) =
O(f (n)g(n)), temos
que
O(n)O(n) = O(n2
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 13 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ou seja, uma
simples inspe¸c˜ao j´a
nos diz que o
algoritmo ´e O(n2
),
no pior caso
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 14 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ou seja, uma
simples inspe¸c˜ao j´a
nos diz que o
algoritmo ´e O(n2
),
no pior caso
Mas ele n˜ao era
Θ(n2
+ n)?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 14 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Sim, mas lembre que
Θ(n2
+ n) ⇒
O(n2
+ n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 15 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Sim, mas lembre que
Θ(n2
+ n) ⇒
O(n2
+ n)
E que
O(f (n) + g(n)) =
O(f (n)) + O(g(n))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 15 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao O(n2
+ n) =
O(n2
) + O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 16 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao O(n2
+ n) =
O(n2
) + O(n)
Mas O(f (n)) +
O(g(n)) =
O(max(f (n), g(n)))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 16 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao O(n2
+ n) =
O(max(n2
, n)) =
O(n2
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao O(n2
+ n) =
O(max(n2
, n)) =
O(n2
)
E assim
Θ(n2
+ n) ⇒ O(n2
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
An´alise de Algoritmos Iterativos
J´a calculamos o n´umero de opera¸c˜oes executadas
pelo algoritmo de ordena¸c˜ao por inser¸c˜ao
static void insercao(int[] v) {
for (int i=1; i<v.length; i++) {
int aux = v[i];
int j = i;
while ((j > 0) &&
(aux < v[j-1])) {
v[j] = v[j-1];
j--;
}
v[j] = aux;
}
}
Ent˜ao O(n2
+ n) =
O(max(n2
, n)) =
O(n2
)
E assim
Θ(n2
+ n) ⇒ O(n2
)
O limite s´o ficou
mais “frouxo”
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
An´alise de Algoritmos Iterativos
A n˜ao ser que haja chamadas a m´etodos ou algum
outro artif´ıcio que esconda opera¸c˜oes, calcular a
complexidade de algoritmos iterativos, usando a
nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
An´alise de Algoritmos Iterativos
A n˜ao ser que haja chamadas a m´etodos ou algum
outro artif´ıcio que esconda opera¸c˜oes, calcular a
complexidade de algoritmos iterativos, usando a
nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil
Principalmente para o c´alculo de limite superior,
caso em que basta lembrar das opera¸c˜oes com a
nota¸c˜ao O. Em especial:
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
An´alise de Algoritmos Iterativos
A n˜ao ser que haja chamadas a m´etodos ou algum
outro artif´ıcio que esconda opera¸c˜oes, calcular a
complexidade de algoritmos iterativos, usando a
nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil
Principalmente para o c´alculo de limite superior,
caso em que basta lembrar das opera¸c˜oes com a
nota¸c˜ao O. Em especial:
O(f (n) + g(n)) = O(f (n)) + O(g(n))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
An´alise de Algoritmos Iterativos
A n˜ao ser que haja chamadas a m´etodos ou algum
outro artif´ıcio que esconda opera¸c˜oes, calcular a
complexidade de algoritmos iterativos, usando a
nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil
Principalmente para o c´alculo de limite superior,
caso em que basta lembrar das opera¸c˜oes com a
nota¸c˜ao O. Em especial:
O(f (n) + g(n)) = O(f (n)) + O(g(n))
O(f (n)) + O(g(n)) = O(max(f (n), g(n)))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
An´alise de Algoritmos Iterativos
A n˜ao ser que haja chamadas a m´etodos ou algum
outro artif´ıcio que esconda opera¸c˜oes, calcular a
complexidade de algoritmos iterativos, usando a
nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil
Principalmente para o c´alculo de limite superior,
caso em que basta lembrar das opera¸c˜oes com a
nota¸c˜ao O. Em especial:
O(f (n) + g(n)) = O(f (n)) + O(g(n))
O(f (n)) + O(g(n)) = O(max(f (n), g(n)))
O(f (n))O(g(n)) = O(f (n)g(n))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
An´alise de Algoritmos Recursivos
Mas e quando o algoritmo ´e recursivo?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
An´alise de Algoritmos Recursivos
Mas e quando o algoritmo ´e recursivo?
Teremos que observar a rela¸c˜ao de recorrˆencia
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
An´alise de Algoritmos Recursivos
Mas e quando o algoritmo ´e recursivo?
Teremos que observar a rela¸c˜ao de recorrˆencia
Exemplo: Busca Sequencial
Considere a
busca
sequencial
recursiva:
se n=1:
se A[0] ´e o elemento buscado: achou
sen~ao: n~ao est´a no arranjo
sen~ao:
se A[0] ´e o elemento buscado: achou
sen~ao:
busque nos n-1 elementos
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
Nesse caso:
T(n) =
O(1), se n = 1.
T(n − 1) + O(1), para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
Note que
O(1) engloba
qualquer custo
constante para
a opera¸c˜ao
Nesse caso:
T(n) =
O(1), se n = 1.
T(n − 1) + O(1), para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
Nesse caso:
T(n) =
O(1), se n = 1.
T(n − 1) + O(1), para n ≥ 2
E expandindo...
T(n) = T(n − 1) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
Nesse caso:
T(n) =
O(1), se n = 1.
T(n − 1) + O(1), para n ≥ 2
E expandindo...
T(n) = T(n − 1) + O(1)
= ((T(n − 2) + O(1)) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
= . . .
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
= . . .
= (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1)
k vezes
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
= . . .
= (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1)
k vezes
= T(1) + kO(1), quando T(n − k) = T(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
= . . .
= (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1)
k vezes
= T(1) + kO(1), quando T(n − k) = T(1)
= T(1) + (n − 1)O(1) (pois n − k = 1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
= (((T(n − 3) + O(1)) + O(1)) + O(1)
= . . .
= (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1)
k vezes
= T(1) + kO(1), quando T(n − k) = T(1)
= T(1) + (n − 1)O(1) (pois n − k = 1)
= O(1) + (n − 1)O(1) (pois T(1) = O(1))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
T(n) = O(1) + (n − 1)O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
= O(1) + O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
= O(1) + O(n)
= O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
?
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
= O(1) + O(n)
= O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
?
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
= O(1) + O(n)
= O(n)
Por que O(1) − O(1) = O(1)?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Busca Sequencial
?
T(n) = O(1) + (n − 1)O(1)
= O(1) + nO(1) − O(1)
= O(1) + nO(1)
= O(1) + O(n)
= O(n)
Por que O(1) − O(1) = O(1)?
Porque f (n) ∈ O(1) ⇒ f (n) ≤ c × 1, e n˜ao necessariamente
as constantes c s˜ao iguais
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Considere agora
o problema das
Torres de Hanoi:
se n=1:
mova o disco do pino de origem para
o de destino
sen~ao:
Mova n-1 discos do pino de origem
para o auxiliar
Mova um disco do pino de origem para
o de destino
Mova n-1 discos do pino auxiliar
para o de destino
T(n) =
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Considere agora
o problema das
Torres de Hanoi:
se n=1:
mova o disco do pino de origem para
o de destino
sen~ao:
Mova n-1 discos do pino de origem
para o auxiliar
Mova um disco do pino de origem para
o de destino
Mova n-1 discos do pino auxiliar
para o de destino
T(n) =
O(1), se n = 1.
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Considere agora
o problema das
Torres de Hanoi:
se n=1:
mova o disco do pino de origem para
o de destino
sen~ao:
Mova n-1 discos do pino de origem
para o auxiliar
Mova um disco do pino de origem para
o de destino
Mova n-1 discos do pino auxiliar
para o de destino
T(n) =
O(1), se n = 1.
T(n − 1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Considere agora
o problema das
Torres de Hanoi:
se n=1:
mova o disco do pino de origem para
o de destino
sen~ao:
Mova n-1 discos do pino de origem
para o auxiliar
Mova um disco do pino de origem para
o de destino
Mova n-1 discos do pino auxiliar
para o de destino
T(n) =
O(1), se n = 1.
T(n − 1) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Considere agora
o problema das
Torres de Hanoi:
se n=1:
mova o disco do pino de origem para
o de destino
sen~ao:
Mova n-1 discos do pino de origem
para o auxiliar
Mova um disco do pino de origem para
o de destino
Mova n-1 discos do pino auxiliar
para o de destino
T(n) =
O(1), se n = 1.
T(n − 1) + O(1) + T(n − 1) para n ≥ 2
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
4T(n − 2) + 3O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
4T(n − 2) + 3O(1)
= 4(2T(n − 3) + O(1)) + 3O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
4T(n − 2) + 3O(1)
= 4(2T(n − 3) + O(1)) + 3O(1)
8T(n − 3) + 7O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
4T(n − 2) + 3O(1)
= 4(2T(n − 3) + O(1)) + 3O(1)
8T(n − 3) + 7O(1)
= . . .
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
T(n) = 2T(n − 1) + O(1)
= 2(2T(n − 2) + O(1)) + O(1)
4T(n − 2) + 3O(1)
= 4(2T(n − 3) + O(1)) + 3O(1)
8T(n − 3) + 7O(1)
= . . .
= 2k
T(n − k) + (2k
− 1)O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
= 2n−1
O(1) + (2n−1
− 1)O(1)(pois T(1) = O(1))
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
= 2n−1
O(1) + (2n−1
− 1)O(1)(pois T(1) = O(1))
= 2 × 2n−1
O(1) − O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
= 2n−1
O(1) + (2n−1
− 1)O(1)(pois T(1) = O(1))
= 2 × 2n−1
O(1) − O(1)
= 2n
O(1) − O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
= 2n−1
O(1) + (2n−1
− 1)O(1)(pois T(1) = O(1))
= 2 × 2n−1
O(1) − O(1)
= 2n
O(1) − O(1)
= O(2n
) − O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
= 2k
T(1) + (2k
− 1)O(1)(quando T(n − k) = T(1))
= 2n−1
T(1) + (2n−1
− 1)O(1)(pois n − k = 1)
= 2n−1
O(1) + (2n−1
− 1)O(1)(pois T(1) = O(1))
= 2 × 2n−1
O(1) − O(1)
= 2n
O(1) − O(1)
= O(2n
) − O(1)
= O(2n
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
).
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
n ´e o n´umero de discos → valor de entrada do algoritmo
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
n ´e o n´umero de discos → valor de entrada do algoritmo
Mas n˜ao hav´ıamos visto no in´ıcio que n era o
tamanho do problema? Como fica ent˜ao?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
n ´e o n´umero de discos → valor de entrada do algoritmo
Mas n˜ao hav´ıamos visto no in´ıcio que n era o
tamanho do problema? Como fica ent˜ao?
Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e
redefinir n
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
n ´e o n´umero de discos → valor de entrada do algoritmo
Mas n˜ao hav´ıamos visto no in´ıcio que n era o
tamanho do problema? Como fica ent˜ao?
Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e
redefinir n
Nesse caso, dizemos que T(n) ∈ O(2n
), onde n ´e o n´umero
de discos na torre
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
Ent˜ao T(n) ∈ O(2n
). E o que ´e n?
n ´e o n´umero de discos → valor de entrada do algoritmo
Mas n˜ao hav´ıamos visto no in´ıcio que n era o
tamanho do problema? Como fica ent˜ao?
Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e
redefinir n
Nesse caso, dizemos que T(n) ∈ O(2n
), onde n ´e o n´umero
de discos na torre
Ou, alternativamente, que T(n) ´e O(2n
) no valor da entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
E se quis´essemos a complexidade em termos do
tamanho da entrada?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
E se quis´essemos a complexidade em termos do
tamanho da entrada?
Note que n ´e um n´umero implementado com m bits
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
E se quis´essemos a complexidade em termos do
tamanho da entrada?
Note que n ´e um n´umero implementado com m bits
Ou seja, o tamanho da entrada ´e m bits
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
E se quis´essemos a complexidade em termos do
tamanho da entrada?
Note que n ´e um n´umero implementado com m bits
Ou seja, o tamanho da entrada ´e m bits
Podemos escrever n ent˜ao como
n = 2m−1
dm−1 + 2m−2
dm−2 + . . . + 20
d0, onde
di ∈ {0, 1}, 0 ≤ i < m ´e um d´ıgito bin´ario
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
No pior caso, n usa todos os bits dispon´ıveis (di = 1,
0 ≤ i < m), ent˜ao n = 2m−1
+ 2m−2
+ . . . + 20
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
No pior caso, n usa todos os bits dispon´ıveis (di = 1,
0 ≤ i < m), ent˜ao n = 2m−1
+ 2m−2
+ . . . + 20
Ou seja
n = O(2m−1
+ 2m−2
+ . . . + 20
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
No pior caso, n usa todos os bits dispon´ıveis (di = 1,
0 ≤ i < m), ent˜ao n = 2m−1
+ 2m−2
+ . . . + 20
Ou seja
n = O(2m−1
+ 2m−2
+ . . . + 20
)
= O(2m−1
) + O(2m−2
) + . . . + O(20
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
No pior caso, n usa todos os bits dispon´ıveis (di = 1,
0 ≤ i < m), ent˜ao n = 2m−1
+ 2m−2
+ . . . + 20
Ou seja
n = O(2m−1
+ 2m−2
+ . . . + 20
)
= O(2m−1
) + O(2m−2
) + . . . + O(20
)
= O(2m
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
An´alise de Algoritmos Recursivos
Exemplo: Torres de Hanoi
No pior caso, n usa todos os bits dispon´ıveis (di = 1,
0 ≤ i < m), ent˜ao n = 2m−1
+ 2m−2
+ . . . + 20
Ou seja
n = O(2m−1
+ 2m−2
+ . . . + 20
)
= O(2m−1
) + O(2m−2
) + . . . + O(20
)
= O(2m
)
E T(n) = O(2n
) = O(22m
), onde m ´e o tamanho da
entrada em bits
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Considere agora
o fatorial
recursivo:
Entrada: inteiro n
Se n=0, retorne 1
Sen~ao
retorne n multiplicado pelo
fatorial de n-1
T(n) =
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Considere agora
o fatorial
recursivo:
Entrada: inteiro n
Se n=0, retorne 1
Sen~ao
retorne n multiplicado pelo
fatorial de n-1
T(n) =
O(1), se n = 0.
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Considere agora
o fatorial
recursivo:
Entrada: inteiro n
Se n=0, retorne 1
Sen~ao
retorne n multiplicado pelo
fatorial de n-1
T(n) =
O(1), se n = 0.
O(1)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Considere agora
o fatorial
recursivo:
Entrada: inteiro n
Se n=0, retorne 1
Sen~ao
retorne n multiplicado pelo
fatorial de n-1
T(n) =
O(1), se n = 0.
O(1) + T(n − 1) para n ≥ 1
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Considere agora
o fatorial
recursivo:
Entrada: inteiro n
Se n=0, retorne 1
Sen~ao
retorne n multiplicado pelo
fatorial de n-1
T(n) =
O(1), se n = 0.
O(1) + T(n − 1) para n ≥ 1
J´a vimos que T(n) ∈ O(n)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Mais uma vez, n n˜ao ´e o tamanho da entrada, mas
a pr´opria entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Mais uma vez, n n˜ao ´e o tamanho da entrada, mas
a pr´opria entrada
Ou seja, o n´umero do qual calculamos o fatorial
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Mais uma vez, n n˜ao ´e o tamanho da entrada, mas
a pr´opria entrada
Ou seja, o n´umero do qual calculamos o fatorial
E mais uma vez, podemos relaxar nossa defini¸c˜ao,
dizendo que o fatorial recursivo ´e O(n) no valor da
entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Mais uma vez, n n˜ao ´e o tamanho da entrada, mas
a pr´opria entrada
Ou seja, o n´umero do qual calculamos o fatorial
E mais uma vez, podemos relaxar nossa defini¸c˜ao,
dizendo que o fatorial recursivo ´e O(n) no valor da
entrada
E se quis´essemos sua complexidade em rela¸c˜ao ao
tamanho da entrada?
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Novamente lembramos que n ´e um valor escrito em
bin´ario
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Novamente lembramos que n ´e um valor escrito em
bin´ario
E que, no pior caso, n ∈ O(2m
), onde m ´e o n´umero
de bits usados para representar n
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
Novamente lembramos que n ´e um valor escrito em
bin´ario
E que, no pior caso, n ∈ O(2m
), onde m ´e o n´umero
de bits usados para representar n
Ent˜ao T(n) = O(n)
= O(O(2m
))
= O(2m
)
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
E assim, podemos dizer tanto que o fatorial
recursivo ´e O(n) no valor da entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
E assim, podemos dizer tanto que o fatorial
recursivo ´e O(n) no valor da entrada
Quanto que ele ´e O(2n
) no tamanho da entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
E assim, podemos dizer tanto que o fatorial
recursivo ´e O(n) no valor da entrada
Quanto que ele ´e O(2n
) no tamanho da entrada
A utilidade pr´atica dessa informa¸c˜ao ´e que vai
determinar qual das formas usar
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
E assim, podemos dizer tanto que o fatorial
recursivo ´e O(n) no valor da entrada
Quanto que ele ´e O(2n
) no tamanho da entrada
A utilidade pr´atica dessa informa¸c˜ao ´e que vai
determinar qual das formas usar
Se queremos apenas as opera¸c˜oes, independentemente do
hardware, usamos o valor
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
An´alise de Algoritmos Recursivos
Exemplo: Fatorial recursivo
E assim, podemos dizer tanto que o fatorial
recursivo ´e O(n) no valor da entrada
Quanto que ele ´e O(2n
) no tamanho da entrada
A utilidade pr´atica dessa informa¸c˜ao ´e que vai
determinar qual das formas usar
Se queremos apenas as opera¸c˜oes, independentemente do
hardware, usamos o valor
Se queremos saber como cresce a necessidade de hardware
(como o tamanho da palavra, por exemplo), ent˜ao usamos o
tamanho da entrada
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
An´alise de Algoritmos Recursivos
Notas finais
Note que, mesmo a nota¸c˜ao assint´otica nos
ajudando com as rela¸c˜oes de recorrˆencia, ainda
assim temos que resolvˆe-las
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
An´alise de Algoritmos Recursivos
Notas finais
Note que, mesmo a nota¸c˜ao assint´otica nos
ajudando com as rela¸c˜oes de recorrˆencia, ainda
assim temos que resolvˆe-las
N˜ao h´a como ter uma ideia da complexidade por uma
simples inspe¸c˜ao, como era o caso com algoritmos iterativos
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
An´alise de Algoritmos Recursivos
Notas finais
Note que, mesmo a nota¸c˜ao assint´otica nos
ajudando com as rela¸c˜oes de recorrˆencia, ainda
assim temos que resolvˆe-las
N˜ao h´a como ter uma ideia da complexidade por uma
simples inspe¸c˜ao, como era o caso com algoritmos iterativos
E n˜ao h´a realmente como fugir disso...
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
An´alise de Algoritmos Recursivos
Notas finais
Note que, mesmo a nota¸c˜ao assint´otica nos
ajudando com as rela¸c˜oes de recorrˆencia, ainda
assim temos que resolvˆe-las
N˜ao h´a como ter uma ideia da complexidade por uma
simples inspe¸c˜ao, como era o caso com algoritmos iterativos
E n˜ao h´a realmente como fugir disso...
Mas em alguns casos, podemos obter uma boa
ajuda
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
An´alise de Algoritmos Recursivos
Notas finais
Note que, mesmo a nota¸c˜ao assint´otica nos
ajudando com as rela¸c˜oes de recorrˆencia, ainda
assim temos que resolvˆe-las
N˜ao h´a como ter uma ideia da complexidade por uma
simples inspe¸c˜ao, como era o caso com algoritmos iterativos
E n˜ao h´a realmente como fugir disso...
Mas em alguns casos, podemos obter uma boa
ajuda
Veremos na pr´oxima aula
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
Referˆencias
Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes
em Java e C++. Cengage. 2007.
Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L.,
Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press,
2001.
Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 34 / 34

Mais conteúdo relacionado

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 09

Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NACloves da Rocha
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)Danilo J. S. Bellini
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoIntel Software Brasil
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Universidade de São Paulo
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)Pedro Castilho
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAyrton Yagami
 
113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matrizDaniel Natividade
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Laços de repetição como fazer
Laços de repetição como fazerLaços de repetição como fazer
Laços de repetição como fazerRodolfo Fonseca
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfItaloRainier1
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracaoRicardo Bolanho
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosJuan Lopes
 

Semelhante a (ACH2002) Introdução à Análise de Algoritmos - Aula 09 (18)

000003 complexidade
000003 complexidade000003 complexidade
000003 complexidade
 
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NAAula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
Aula 2 - TEÓRICA - Prof. MSc. Cloves Rocha - PIE - AA - (2018.2) CCO 8 NA
 
Amem
AmemAmem
Amem
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
 
Lp1 C# laços
Lp1 C# laçosLp1 C# laços
Lp1 C# laços
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorização
 
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
 
Programação Funcional (para humanos)
Programação Funcional (para humanos)Programação Funcional (para humanos)
Programação Funcional (para humanos)
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz113856859 exercicios-vetor-e-matriz
113856859 exercicios-vetor-e-matriz
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Laços de repetição como fazer
Laços de repetição como fazerLaços de repetição como fazer
Laços de repetição como fazer
 
VetoresMatrizes.pdf
VetoresMatrizes.pdfVetoresMatrizes.pdf
VetoresMatrizes.pdf
 
Artigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdfArtigo sobre complexibilidade complexity.pdf
Artigo sobre complexibilidade complexity.pdf
 
19 algoritmos de enumeracao
19   algoritmos de enumeracao19   algoritmos de enumeracao
19 algoritmos de enumeracao
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexos
 
05 repeticao
05 repeticao05 repeticao
05 repeticao
 

Mais de Norton Trevisan Roman

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06Norton Trevisan Roman
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05Norton Trevisan Roman
 

Mais de Norton Trevisan Roman (20)

(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24(ACH2044) Inteligência Artificial - Aula 24
(ACH2044) Inteligência Artificial - Aula 24
 
(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23(ACH2044) Inteligência Artificial - Aula 23
(ACH2044) Inteligência Artificial - Aula 23
 
(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22(ACH2044) Inteligência Artificial - Aula 22
(ACH2044) Inteligência Artificial - Aula 22
 
(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21(ACH2044) Inteligência Artificial - Aula 21
(ACH2044) Inteligência Artificial - Aula 21
 
(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20(ACH2044) Inteligência Artificial - Aula 20
(ACH2044) Inteligência Artificial - Aula 20
 
(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19(ACH2044) Inteligência Artificial - Aula 19
(ACH2044) Inteligência Artificial - Aula 19
 
(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18(ACH2044) Inteligência Artificial - Aula 18
(ACH2044) Inteligência Artificial - Aula 18
 
(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17(ACH2044) Inteligência Artificial - Aula 17
(ACH2044) Inteligência Artificial - Aula 17
 
(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16(ACH2044) Inteligência Artificial - Aula 16
(ACH2044) Inteligência Artificial - Aula 16
 
(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15(ACH2044) Inteligência Artificial - Aula 15
(ACH2044) Inteligência Artificial - Aula 15
 
(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14(ACH2044) Inteligência Artificial - Aula 14
(ACH2044) Inteligência Artificial - Aula 14
 
(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13(ACH2044) Inteligência Artificial - Aula 13
(ACH2044) Inteligência Artificial - Aula 13
 
(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12(ACH2044) Inteligência Artificial - Aula 12
(ACH2044) Inteligência Artificial - Aula 12
 
(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11(ACH2044) Inteligência Artificial - Aula 11
(ACH2044) Inteligência Artificial - Aula 11
 
(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10(ACH2044) Inteligência Artificial - Aula 10
(ACH2044) Inteligência Artificial - Aula 10
 
(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09(ACH2044) Inteligência Artificial - Aula 09
(ACH2044) Inteligência Artificial - Aula 09
 
(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08(ACH2044) Inteligência Artificial - Aula 08
(ACH2044) Inteligência Artificial - Aula 08
 
(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07(ACH2044) Inteligência Artificial - Aula 07
(ACH2044) Inteligência Artificial - Aula 07
 
(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06(ACH2044) Inteligência Artificial - Aula 06
(ACH2044) Inteligência Artificial - Aula 06
 
(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05(ACH2044) Inteligência Artificial - Aula 05
(ACH2044) Inteligência Artificial - Aula 05
 

Último

Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...PatriciaCaetano18
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasSocorro Machado
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfFrancisco Márcio Bezerra Oliveira
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxandrenespoli3
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAJulianeMelo17
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffNarlaAquino
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfHELENO FAVACHO
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxLuizHenriquedeAlmeid6
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfHELENO FAVACHO
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...andreiavys
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptjricardo76
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxLeonardoGabriel65
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeitotatianehilda
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*Viviane Moreiras
 

Último (20)

Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
A EDUCAÇÃO FÍSICA NO NOVO ENSINO MÉDIO: IMPLICAÇÕES E TENDÊNCIAS PROMOVIDAS P...
 
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para criançasJogo de Rimas - Para impressão em pdf a ser usado para crianças
Jogo de Rimas - Para impressão em pdf a ser usado para crianças
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
Aula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIXAula sobre o Imperialismo Europeu no século XIX
Aula sobre o Imperialismo Europeu no século XIX
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
Aula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptxAula 03 - Filogenia14+4134684516498481.pptx
Aula 03 - Filogenia14+4134684516498481.pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUAO PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
O PLANETA TERRA E SEU SATÉLITE NATURAL - LUA
 
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffffSSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
SSE_BQ_Matematica_4A_SR.pdfffffffffffffffffffffffffffffffffff
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptxSlides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...E a chuva ...  (Livro pedagógico para ser usado na educação infantil e trabal...
E a chuva ... (Livro pedagógico para ser usado na educação infantil e trabal...
 
Texto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.pptTexto dramático com Estrutura e exemplos.ppt
Texto dramático com Estrutura e exemplos.ppt
 
Produção de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptxProdução de Texto - 5º ano - CRÔNICA.pptx
Produção de Texto - 5º ano - CRÔNICA.pptx
 
8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito8 Aula de predicado verbal e nominal - Predicativo do sujeito
8 Aula de predicado verbal e nominal - Predicativo do sujeito
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 

(ACH2002) Introdução à Análise de Algoritmos - Aula 09

  • 1. Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos Norton Trevisan Roman norton@usp.br 18 de setembro de 2018 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 1 / 34
  • 2. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
  • 3. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } n2 + 2n − 3 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
  • 4. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } n2 + 2n − 3 Contamos realmente todas as opera¸c˜oes? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
  • 5. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } n2 + 2n − 3 Contamos realmente todas as opera¸c˜oes? N˜ao. Apenas as que consideramos relevantes Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 2 / 34
  • 6. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } O que acontece se incluirmos as demais opera¸c˜oes? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
  • 7. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } O que acontece se incluirmos as demais opera¸c˜oes? Adicionamos 3(n − 1) opera¸c˜oes Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
  • 8. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } O que acontece se incluirmos as demais opera¸c˜oes? Adicionamos 3(n − 1) opera¸c˜oes Mais 2 n(n − 1) 2 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 3 / 34
  • 9. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { 3(n − 1) int aux = v[i]; n − 1 int j = i; n − 1 while ((j > 0) && (aux < v[j-1])) { 2n(n−1) 2 v[j] = v[j-1]; n(n−1) 2 j--; n(n−1) 2 } v[j] = aux; n − 1 } } Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 4 / 34
  • 10. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ou seja: 6(n − 1) + 2n(n − 1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
  • 11. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ou seja: 6(n − 1) + 2n(n − 1) = 6n − 6 + 2n2 − 2n Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
  • 12. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ou seja: 6(n − 1) + 2n(n − 1) = 6n − 6 + 2n2 − 2n = 2n2 + 4n − 6 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 5 / 34
  • 13. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Comparemos as 2 vers˜oes: Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
  • 14. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Comparemos as 2 vers˜oes: v1 : n2 + 2n − 3 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
  • 15. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Comparemos as 2 vers˜oes: v1 : n2 + 2n − 3 v2 : 2n2 + 4n − 6 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
  • 16. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Comparemos as 2 vers˜oes: v1 : n2 + 2n − 3 v2 : 2n2 + 4n − 6 Ou seja v2 = 2v1 Diferem apenas por uma constante Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 6 / 34
  • 17. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E isso importa? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
  • 18. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E isso importa? Se o objetivo for fazer uma estimativa mais precisa, com certeza! Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
  • 19. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E isso importa? Se o objetivo for fazer uma estimativa mais precisa, com certeza! Mas se o objetivo for fazer uma an´alise assint´otica do algoritmo, certamente n˜ao Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 7 / 34
  • 20. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E isso porque as duas contagens s˜ao idˆenticas, a menos de uma constante Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 8 / 34
  • 21. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E isso porque as duas contagens s˜ao idˆenticas, a menos de uma constante Ent˜ao, qual seria a complexidade desse algoritmo? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 8 / 34
  • 22. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Θ(n2 + 2n − 3), ou simplesmente Θ(n2 + n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
  • 23. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Θ(n2 + 2n − 3), ou simplesmente Θ(n2 + n) n2 +n ≤ n2 +2n −3 ≤ 2n2 + 2n, para n ≥ 3 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
  • 24. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Θ(n2 + 2n − 3), ou simplesmente Θ(n2 + n) n2 +n ≤ n2 +2n −3 ≤ 2n2 + 2n, para n ≥ 3 n2 +n ≤ 2n2 +4n−6 ≤ 4n2 + 4n, para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 9 / 34
  • 25. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E por que Θ? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
  • 26. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E por que Θ? J´a temos o c´alculo “exato” → temos um limite assint´otico firme Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
  • 27. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } E por que Θ? J´a temos o c´alculo “exato” → temos um limite assint´otico firme E precisamos mesmo disso? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 10 / 34
  • 28. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Suponha que nos interessa apenas um limite superior Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 11 / 34
  • 29. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Suponha que nos interessa apenas um limite superior Como isso nos ajuda a calcular a complexidade desse algoritmo? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 11 / 34
  • 30. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Temos um la¸co proporcional `a entrada: O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
  • 31. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Temos um la¸co proporcional `a entrada: O(n) Faz, no m´aximo, n itera¸c˜oes Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
  • 32. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Temos um la¸co proporcional `a entrada: O(n) Faz, no m´aximo, n itera¸c˜oes E outro proporcional `a entrada (O(n)) dentro deste Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 12 / 34
  • 33. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao o algoritmo ´e O(n)O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 13 / 34
  • 34. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao o algoritmo ´e O(n)O(n) E, lembrando que O(f (n))O(g(n)) = O(f (n)g(n)), temos que O(n)O(n) = O(n2 ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 13 / 34
  • 35. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ou seja, uma simples inspe¸c˜ao j´a nos diz que o algoritmo ´e O(n2 ), no pior caso Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 14 / 34
  • 36. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ou seja, uma simples inspe¸c˜ao j´a nos diz que o algoritmo ´e O(n2 ), no pior caso Mas ele n˜ao era Θ(n2 + n)? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 14 / 34
  • 37. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Sim, mas lembre que Θ(n2 + n) ⇒ O(n2 + n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 15 / 34
  • 38. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Sim, mas lembre que Θ(n2 + n) ⇒ O(n2 + n) E que O(f (n) + g(n)) = O(f (n)) + O(g(n)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 15 / 34
  • 39. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao O(n2 + n) = O(n2 ) + O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 16 / 34
  • 40. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao O(n2 + n) = O(n2 ) + O(n) Mas O(f (n)) + O(g(n)) = O(max(f (n), g(n))) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 16 / 34
  • 41. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao O(n2 + n) = O(max(n2 , n)) = O(n2 ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
  • 42. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao O(n2 + n) = O(max(n2 , n)) = O(n2 ) E assim Θ(n2 + n) ⇒ O(n2 ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
  • 43. An´alise de Algoritmos Iterativos J´a calculamos o n´umero de opera¸c˜oes executadas pelo algoritmo de ordena¸c˜ao por inser¸c˜ao static void insercao(int[] v) { for (int i=1; i<v.length; i++) { int aux = v[i]; int j = i; while ((j > 0) && (aux < v[j-1])) { v[j] = v[j-1]; j--; } v[j] = aux; } } Ent˜ao O(n2 + n) = O(max(n2 , n)) = O(n2 ) E assim Θ(n2 + n) ⇒ O(n2 ) O limite s´o ficou mais “frouxo” Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 17 / 34
  • 44. An´alise de Algoritmos Iterativos A n˜ao ser que haja chamadas a m´etodos ou algum outro artif´ıcio que esconda opera¸c˜oes, calcular a complexidade de algoritmos iterativos, usando a nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
  • 45. An´alise de Algoritmos Iterativos A n˜ao ser que haja chamadas a m´etodos ou algum outro artif´ıcio que esconda opera¸c˜oes, calcular a complexidade de algoritmos iterativos, usando a nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil Principalmente para o c´alculo de limite superior, caso em que basta lembrar das opera¸c˜oes com a nota¸c˜ao O. Em especial: Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
  • 46. An´alise de Algoritmos Iterativos A n˜ao ser que haja chamadas a m´etodos ou algum outro artif´ıcio que esconda opera¸c˜oes, calcular a complexidade de algoritmos iterativos, usando a nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil Principalmente para o c´alculo de limite superior, caso em que basta lembrar das opera¸c˜oes com a nota¸c˜ao O. Em especial: O(f (n) + g(n)) = O(f (n)) + O(g(n)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
  • 47. An´alise de Algoritmos Iterativos A n˜ao ser que haja chamadas a m´etodos ou algum outro artif´ıcio que esconda opera¸c˜oes, calcular a complexidade de algoritmos iterativos, usando a nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil Principalmente para o c´alculo de limite superior, caso em que basta lembrar das opera¸c˜oes com a nota¸c˜ao O. Em especial: O(f (n) + g(n)) = O(f (n)) + O(g(n)) O(f (n)) + O(g(n)) = O(max(f (n), g(n))) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
  • 48. An´alise de Algoritmos Iterativos A n˜ao ser que haja chamadas a m´etodos ou algum outro artif´ıcio que esconda opera¸c˜oes, calcular a complexidade de algoritmos iterativos, usando a nota¸c˜ao assint´otica, n˜ao ´e t˜ao dif´ıcil Principalmente para o c´alculo de limite superior, caso em que basta lembrar das opera¸c˜oes com a nota¸c˜ao O. Em especial: O(f (n) + g(n)) = O(f (n)) + O(g(n)) O(f (n)) + O(g(n)) = O(max(f (n), g(n))) O(f (n))O(g(n)) = O(f (n)g(n)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 18 / 34
  • 49. An´alise de Algoritmos Recursivos Mas e quando o algoritmo ´e recursivo? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
  • 50. An´alise de Algoritmos Recursivos Mas e quando o algoritmo ´e recursivo? Teremos que observar a rela¸c˜ao de recorrˆencia Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
  • 51. An´alise de Algoritmos Recursivos Mas e quando o algoritmo ´e recursivo? Teremos que observar a rela¸c˜ao de recorrˆencia Exemplo: Busca Sequencial Considere a busca sequencial recursiva: se n=1: se A[0] ´e o elemento buscado: achou sen~ao: n~ao est´a no arranjo sen~ao: se A[0] ´e o elemento buscado: achou sen~ao: busque nos n-1 elementos Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 19 / 34
  • 52. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial Nesse caso: T(n) = O(1), se n = 1. T(n − 1) + O(1), para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
  • 53. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial Note que O(1) engloba qualquer custo constante para a opera¸c˜ao Nesse caso: T(n) = O(1), se n = 1. T(n − 1) + O(1), para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
  • 54. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial Nesse caso: T(n) = O(1), se n = 1. T(n − 1) + O(1), para n ≥ 2 E expandindo... T(n) = T(n − 1) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
  • 55. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial Nesse caso: T(n) = O(1), se n = 1. T(n − 1) + O(1), para n ≥ 2 E expandindo... T(n) = T(n − 1) + O(1) = ((T(n − 2) + O(1)) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 20 / 34
  • 56. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 57. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) = . . . Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 58. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) = . . . = (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1) k vezes Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 59. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) = . . . = (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1) k vezes = T(1) + kO(1), quando T(n − k) = T(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 60. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) = . . . = (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1) k vezes = T(1) + kO(1), quando T(n − k) = T(1) = T(1) + (n − 1)O(1) (pois n − k = 1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 61. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial = (((T(n − 3) + O(1)) + O(1)) + O(1) = . . . = (. . . ((T(n − k) +O(1)) + . . . + O(1)) + O(1) k vezes = T(1) + kO(1), quando T(n − k) = T(1) = T(1) + (n − 1)O(1) (pois n − k = 1) = O(1) + (n − 1)O(1) (pois T(1) = O(1)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 21 / 34
  • 62. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial T(n) = O(1) + (n − 1)O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 63. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 64. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 65. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) = O(1) + O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 66. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) = O(1) + O(n) = O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 67. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial ? T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) = O(1) + O(n) = O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 68. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial ? T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) = O(1) + O(n) = O(n) Por que O(1) − O(1) = O(1)? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 69. An´alise de Algoritmos Recursivos Exemplo: Busca Sequencial ? T(n) = O(1) + (n − 1)O(1) = O(1) + nO(1) − O(1) = O(1) + nO(1) = O(1) + O(n) = O(n) Por que O(1) − O(1) = O(1)? Porque f (n) ∈ O(1) ⇒ f (n) ≤ c × 1, e n˜ao necessariamente as constantes c s˜ao iguais Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 22 / 34
  • 70. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Considere agora o problema das Torres de Hanoi: se n=1: mova o disco do pino de origem para o de destino sen~ao: Mova n-1 discos do pino de origem para o auxiliar Mova um disco do pino de origem para o de destino Mova n-1 discos do pino auxiliar para o de destino T(n) = Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
  • 71. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Considere agora o problema das Torres de Hanoi: se n=1: mova o disco do pino de origem para o de destino sen~ao: Mova n-1 discos do pino de origem para o auxiliar Mova um disco do pino de origem para o de destino Mova n-1 discos do pino auxiliar para o de destino T(n) = O(1), se n = 1. Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
  • 72. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Considere agora o problema das Torres de Hanoi: se n=1: mova o disco do pino de origem para o de destino sen~ao: Mova n-1 discos do pino de origem para o auxiliar Mova um disco do pino de origem para o de destino Mova n-1 discos do pino auxiliar para o de destino T(n) = O(1), se n = 1. T(n − 1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
  • 73. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Considere agora o problema das Torres de Hanoi: se n=1: mova o disco do pino de origem para o de destino sen~ao: Mova n-1 discos do pino de origem para o auxiliar Mova um disco do pino de origem para o de destino Mova n-1 discos do pino auxiliar para o de destino T(n) = O(1), se n = 1. T(n − 1) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
  • 74. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Considere agora o problema das Torres de Hanoi: se n=1: mova o disco do pino de origem para o de destino sen~ao: Mova n-1 discos do pino de origem para o auxiliar Mova um disco do pino de origem para o de destino Mova n-1 discos do pino auxiliar para o de destino T(n) = O(1), se n = 1. T(n − 1) + O(1) + T(n − 1) para n ≥ 2 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 23 / 34
  • 75. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 76. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 77. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) 4T(n − 2) + 3O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 78. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) 4T(n − 2) + 3O(1) = 4(2T(n − 3) + O(1)) + 3O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 79. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) 4T(n − 2) + 3O(1) = 4(2T(n − 3) + O(1)) + 3O(1) 8T(n − 3) + 7O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 80. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) 4T(n − 2) + 3O(1) = 4(2T(n − 3) + O(1)) + 3O(1) 8T(n − 3) + 7O(1) = . . . Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 81. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi T(n) = 2T(n − 1) + O(1) = 2(2T(n − 2) + O(1)) + O(1) 4T(n − 2) + 3O(1) = 4(2T(n − 3) + O(1)) + 3O(1) 8T(n − 3) + 7O(1) = . . . = 2k T(n − k) + (2k − 1)O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 24 / 34
  • 82. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 83. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 84. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) = 2n−1 O(1) + (2n−1 − 1)O(1)(pois T(1) = O(1)) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 85. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) = 2n−1 O(1) + (2n−1 − 1)O(1)(pois T(1) = O(1)) = 2 × 2n−1 O(1) − O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 86. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) = 2n−1 O(1) + (2n−1 − 1)O(1)(pois T(1) = O(1)) = 2 × 2n−1 O(1) − O(1) = 2n O(1) − O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 87. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) = 2n−1 O(1) + (2n−1 − 1)O(1)(pois T(1) = O(1)) = 2 × 2n−1 O(1) − O(1) = 2n O(1) − O(1) = O(2n ) − O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 88. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi = 2k T(1) + (2k − 1)O(1)(quando T(n − k) = T(1)) = 2n−1 T(1) + (2n−1 − 1)O(1)(pois n − k = 1) = 2n−1 O(1) + (2n−1 − 1)O(1)(pois T(1) = O(1)) = 2 × 2n−1 O(1) − O(1) = 2n O(1) − O(1) = O(2n ) − O(1) = O(2n ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 25 / 34
  • 89. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 90. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 91. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? n ´e o n´umero de discos → valor de entrada do algoritmo Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 92. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? n ´e o n´umero de discos → valor de entrada do algoritmo Mas n˜ao hav´ıamos visto no in´ıcio que n era o tamanho do problema? Como fica ent˜ao? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 93. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? n ´e o n´umero de discos → valor de entrada do algoritmo Mas n˜ao hav´ıamos visto no in´ıcio que n era o tamanho do problema? Como fica ent˜ao? Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e redefinir n Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 94. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? n ´e o n´umero de discos → valor de entrada do algoritmo Mas n˜ao hav´ıamos visto no in´ıcio que n era o tamanho do problema? Como fica ent˜ao? Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e redefinir n Nesse caso, dizemos que T(n) ∈ O(2n ), onde n ´e o n´umero de discos na torre Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 95. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi Ent˜ao T(n) ∈ O(2n ). E o que ´e n? n ´e o n´umero de discos → valor de entrada do algoritmo Mas n˜ao hav´ıamos visto no in´ıcio que n era o tamanho do problema? Como fica ent˜ao? Algumas vezes ´e mais ´util relaxar essa defini¸c˜ao e redefinir n Nesse caso, dizemos que T(n) ∈ O(2n ), onde n ´e o n´umero de discos na torre Ou, alternativamente, que T(n) ´e O(2n ) no valor da entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 26 / 34
  • 96. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi E se quis´essemos a complexidade em termos do tamanho da entrada? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
  • 97. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi E se quis´essemos a complexidade em termos do tamanho da entrada? Note que n ´e um n´umero implementado com m bits Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
  • 98. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi E se quis´essemos a complexidade em termos do tamanho da entrada? Note que n ´e um n´umero implementado com m bits Ou seja, o tamanho da entrada ´e m bits Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
  • 99. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi E se quis´essemos a complexidade em termos do tamanho da entrada? Note que n ´e um n´umero implementado com m bits Ou seja, o tamanho da entrada ´e m bits Podemos escrever n ent˜ao como n = 2m−1 dm−1 + 2m−2 dm−2 + . . . + 20 d0, onde di ∈ {0, 1}, 0 ≤ i < m ´e um d´ıgito bin´ario Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 27 / 34
  • 100. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi No pior caso, n usa todos os bits dispon´ıveis (di = 1, 0 ≤ i < m), ent˜ao n = 2m−1 + 2m−2 + . . . + 20 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
  • 101. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi No pior caso, n usa todos os bits dispon´ıveis (di = 1, 0 ≤ i < m), ent˜ao n = 2m−1 + 2m−2 + . . . + 20 Ou seja n = O(2m−1 + 2m−2 + . . . + 20 ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
  • 102. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi No pior caso, n usa todos os bits dispon´ıveis (di = 1, 0 ≤ i < m), ent˜ao n = 2m−1 + 2m−2 + . . . + 20 Ou seja n = O(2m−1 + 2m−2 + . . . + 20 ) = O(2m−1 ) + O(2m−2 ) + . . . + O(20 ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
  • 103. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi No pior caso, n usa todos os bits dispon´ıveis (di = 1, 0 ≤ i < m), ent˜ao n = 2m−1 + 2m−2 + . . . + 20 Ou seja n = O(2m−1 + 2m−2 + . . . + 20 ) = O(2m−1 ) + O(2m−2 ) + . . . + O(20 ) = O(2m ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
  • 104. An´alise de Algoritmos Recursivos Exemplo: Torres de Hanoi No pior caso, n usa todos os bits dispon´ıveis (di = 1, 0 ≤ i < m), ent˜ao n = 2m−1 + 2m−2 + . . . + 20 Ou seja n = O(2m−1 + 2m−2 + . . . + 20 ) = O(2m−1 ) + O(2m−2 ) + . . . + O(20 ) = O(2m ) E T(n) = O(2n ) = O(22m ), onde m ´e o tamanho da entrada em bits Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 28 / 34
  • 105. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Considere agora o fatorial recursivo: Entrada: inteiro n Se n=0, retorne 1 Sen~ao retorne n multiplicado pelo fatorial de n-1 T(n) = Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
  • 106. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Considere agora o fatorial recursivo: Entrada: inteiro n Se n=0, retorne 1 Sen~ao retorne n multiplicado pelo fatorial de n-1 T(n) = O(1), se n = 0. Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
  • 107. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Considere agora o fatorial recursivo: Entrada: inteiro n Se n=0, retorne 1 Sen~ao retorne n multiplicado pelo fatorial de n-1 T(n) = O(1), se n = 0. O(1) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
  • 108. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Considere agora o fatorial recursivo: Entrada: inteiro n Se n=0, retorne 1 Sen~ao retorne n multiplicado pelo fatorial de n-1 T(n) = O(1), se n = 0. O(1) + T(n − 1) para n ≥ 1 Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
  • 109. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Considere agora o fatorial recursivo: Entrada: inteiro n Se n=0, retorne 1 Sen~ao retorne n multiplicado pelo fatorial de n-1 T(n) = O(1), se n = 0. O(1) + T(n − 1) para n ≥ 1 J´a vimos que T(n) ∈ O(n) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 29 / 34
  • 110. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Mais uma vez, n n˜ao ´e o tamanho da entrada, mas a pr´opria entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
  • 111. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Mais uma vez, n n˜ao ´e o tamanho da entrada, mas a pr´opria entrada Ou seja, o n´umero do qual calculamos o fatorial Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
  • 112. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Mais uma vez, n n˜ao ´e o tamanho da entrada, mas a pr´opria entrada Ou seja, o n´umero do qual calculamos o fatorial E mais uma vez, podemos relaxar nossa defini¸c˜ao, dizendo que o fatorial recursivo ´e O(n) no valor da entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
  • 113. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Mais uma vez, n n˜ao ´e o tamanho da entrada, mas a pr´opria entrada Ou seja, o n´umero do qual calculamos o fatorial E mais uma vez, podemos relaxar nossa defini¸c˜ao, dizendo que o fatorial recursivo ´e O(n) no valor da entrada E se quis´essemos sua complexidade em rela¸c˜ao ao tamanho da entrada? Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 30 / 34
  • 114. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Novamente lembramos que n ´e um valor escrito em bin´ario Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
  • 115. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Novamente lembramos que n ´e um valor escrito em bin´ario E que, no pior caso, n ∈ O(2m ), onde m ´e o n´umero de bits usados para representar n Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
  • 116. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo Novamente lembramos que n ´e um valor escrito em bin´ario E que, no pior caso, n ∈ O(2m ), onde m ´e o n´umero de bits usados para representar n Ent˜ao T(n) = O(n) = O(O(2m )) = O(2m ) Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 31 / 34
  • 117. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo E assim, podemos dizer tanto que o fatorial recursivo ´e O(n) no valor da entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
  • 118. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo E assim, podemos dizer tanto que o fatorial recursivo ´e O(n) no valor da entrada Quanto que ele ´e O(2n ) no tamanho da entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
  • 119. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo E assim, podemos dizer tanto que o fatorial recursivo ´e O(n) no valor da entrada Quanto que ele ´e O(2n ) no tamanho da entrada A utilidade pr´atica dessa informa¸c˜ao ´e que vai determinar qual das formas usar Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
  • 120. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo E assim, podemos dizer tanto que o fatorial recursivo ´e O(n) no valor da entrada Quanto que ele ´e O(2n ) no tamanho da entrada A utilidade pr´atica dessa informa¸c˜ao ´e que vai determinar qual das formas usar Se queremos apenas as opera¸c˜oes, independentemente do hardware, usamos o valor Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
  • 121. An´alise de Algoritmos Recursivos Exemplo: Fatorial recursivo E assim, podemos dizer tanto que o fatorial recursivo ´e O(n) no valor da entrada Quanto que ele ´e O(2n ) no tamanho da entrada A utilidade pr´atica dessa informa¸c˜ao ´e que vai determinar qual das formas usar Se queremos apenas as opera¸c˜oes, independentemente do hardware, usamos o valor Se queremos saber como cresce a necessidade de hardware (como o tamanho da palavra, por exemplo), ent˜ao usamos o tamanho da entrada Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 32 / 34
  • 122. An´alise de Algoritmos Recursivos Notas finais Note que, mesmo a nota¸c˜ao assint´otica nos ajudando com as rela¸c˜oes de recorrˆencia, ainda assim temos que resolvˆe-las Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
  • 123. An´alise de Algoritmos Recursivos Notas finais Note que, mesmo a nota¸c˜ao assint´otica nos ajudando com as rela¸c˜oes de recorrˆencia, ainda assim temos que resolvˆe-las N˜ao h´a como ter uma ideia da complexidade por uma simples inspe¸c˜ao, como era o caso com algoritmos iterativos Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
  • 124. An´alise de Algoritmos Recursivos Notas finais Note que, mesmo a nota¸c˜ao assint´otica nos ajudando com as rela¸c˜oes de recorrˆencia, ainda assim temos que resolvˆe-las N˜ao h´a como ter uma ideia da complexidade por uma simples inspe¸c˜ao, como era o caso com algoritmos iterativos E n˜ao h´a realmente como fugir disso... Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
  • 125. An´alise de Algoritmos Recursivos Notas finais Note que, mesmo a nota¸c˜ao assint´otica nos ajudando com as rela¸c˜oes de recorrˆencia, ainda assim temos que resolvˆe-las N˜ao h´a como ter uma ideia da complexidade por uma simples inspe¸c˜ao, como era o caso com algoritmos iterativos E n˜ao h´a realmente como fugir disso... Mas em alguns casos, podemos obter uma boa ajuda Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
  • 126. An´alise de Algoritmos Recursivos Notas finais Note que, mesmo a nota¸c˜ao assint´otica nos ajudando com as rela¸c˜oes de recorrˆencia, ainda assim temos que resolvˆe-las N˜ao h´a como ter uma ideia da complexidade por uma simples inspe¸c˜ao, como era o caso com algoritmos iterativos E n˜ao h´a realmente como fugir disso... Mas em alguns casos, podemos obter uma boa ajuda Veremos na pr´oxima aula Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 33 / 34
  • 127. Referˆencias Ziviani, Nivio. Projeto de Algoritmos: com implementa¸c˜oes em Java e C++. Cengage. 2007. Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford. Introduction to Algorithms. 2a ed. MIT Press, 2001. Norton Trevisan Romannorton@usp.br Aula 09 – An´alise Assint´otica de Algoritmos Iterativos e Recursivos18 de setembro de 2018 34 / 34