Você está na página 1de 15

Exercícios adicionais Capítulo 2

Exercício 2.1 página 36


Dica: Note que é uma equivalência, portanto a implicação deve ser mostrada
nos dois sentidos.
Partindo de f monotônica, usando a definição de função monotônica chega-se
facilmente na expressão f(n) = Máx{f(m)/ m ≤ n}.
Para mostrar a volta, parte-se do fato de f(n) = Máx{f(m)/ m ≤ n}. Para mostrar
que f é monotônica, são tomados dois elementos distintos quaisquer do domínio
e mostrada a relação (ordem) de suas imagens.

Exercício 2.2 página 36


c =P (n) = Máx{desemp(d)/ tam(d) = n}
c £P (n) = Máx{desemp(d)/ tam(d) ≤ n}
Mas, {desemp(d)/ tam(d) = n}  {desemp(d)/ tam(d) ≤ n}  c =P (n) ≤ c £P (n).
Sejam m1 < m2.
c £P ( m1) = Máx{desemp(d)/ tam(d) ≤ m1} e
c £P ( m2) = Máx {desemp(d)/ tam(d) ≤ m2}
m1 < m2  {desemp(d)/ tam(d) ≤ m1}  {desemp(d)/ tam(d) ≤ m2}
 c £P ( m1) ≤ c £P ( m2)  c £P monotônica.

Seja f monotônica e tal que c =P (n) ≤ f(n) para n. Vamos mostrar que f(n) ≥ c £P (n)
para n.
Suponha f monotônica e f(m) ≥ c =P (m) para m.

Vamos provar por indução em m que: f(m) ≥ c £P (m) para m.

BI: m = 0  c =P (m) = c £P (m)  c £P (m) ≤ f(m) (m  IN)

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
2
HI: Suponha que para todo k < m temos c £P (k) ≤ f(k)

PI: c £P (m) ≤ f(m) ?

1º caso: c £P (m) = c =P (m)  c £P (m) ≤ f(m) OK!

2º caso: c £P (m) > c =P (m)  d’  D com tam(d’) < m e tal que

desemp(d’) = Máx { desemp(d)/ d  D tam(d) ≤ m}


Chame m’ = tam(d’)
desemp(d’) = Máx { desemp(d)/ d  D tam(d) ≤ m}
 c £P (m’) = c £P (m)

Como m’ < m por hi c £P (m’) ≤ f(m’).

Mas f(m’) ≤ f(m), pois f é monotônica, logo c £P (m’) ≤ f(m’) ≤ f(m).

Mas c £P (m) = c £P (m’)  c £P (m) ≤ f(m) OK!

Exercício 2.3 página 36


a) f(n) = 3n + 7
g(n) = 5n +2
Para mostrar que f(n) = (g(n)), temos que estabelecer n0 e c convenientes tais
que
n ≥ n0 : f(n)≤ cg(n).
Examinemos f e g. Para n >1 temos 3n < 5n, mas 7 > 2 e 7 = 5 + 2. Então se n>
5 temos 7 < n+2. Portanto, n0 = 5 e c= 1 deve satisfazer
Tome n0 = 5, c = 1 e n ≥ n0
3n + 7 ≤ 4n + 7 ≤ 4n + 5 + 2 ≤ 5n + 2 (pois n > 5)
 f(n) ≤ g(n) para n ≥ n0  f(n) ≤ (g(n)) (1)
Para mostrar que g(n) =  (f(n)): como 2 < 7, fazendo n0 = 1 e escolhendo c tal
que 3cn > 5n é suficiente.
Tome n0 = 1 e c = 2. Seja n ≥ n0.
5n + 2 ≤ 6n + 14 = 2(3n + 7)
 g(n) ≤ cf(n) n ≥ n0  f(n) = (g(n)) (2)
(1) e (2)  f(n) ≤ (g(n))
b) f(n) = 5n + 7 e g(n) = 3n2 + 1

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
3
Desenvolva a desigualdade a partir de f(n). Primeiro faça aparecer o termo em
n2, depois prepare a desigualdade para a constante c conveniente.
Tome n0 = 1 e c = 7. Seja n ≥ n0.
5n + 7 ≤ 5n2 + 7 ≤ 21n2 + 7 ≤ 7(3n2 + 1)
 f(n) ≤ g(n) n ≥ n0  f(n) = (g(n))
Mostre que f(n) não é (g(n)) e, portanto, f(n) também não é (g(n))
c) f(n) = 5log2(n) + 7 e g(n) = 5n + 1
Desenvolva a desigualdade a partir de f(n) e determine n 0 e c convenientes,
neste caso. n0 = 1 e c = 7 satisfazem.
Tome n0 = 1 e c = 7
5log2(n)+ 7 ≤ 5n + 7 ≤ 35n + 7 ≤ 7(5n + 1)
 f(n) ≤ g(n) n ≥ n0  f(n) ≤ (g(n))
Mostre que f(n) não é (g(n)) e, portanto, f(n) também não é (g(n))
d) f(n) = 5n + 7 e g(n) = 3n2 + 1
Tome n0 = 1 e c = 7
5n + 7 ≤ 5n2 + 7 ≤ 21n2 + 7 = 7(3n2 + 1)
 f(n) ≤ g(n) n ≥ n0  f(n) ≤ (g(n))
Mostre que f(n) não é (g(n)) e, portanto, f(n) também não é (g(n))
e) Agora temos uma função exponencial e uma função polinomial.
Note que: 12 ≤ 21, 22 = 22, 32 > 23, 42 = 24, 52 ≤ 25. Logo a desigualdade n2 ≤ 2n
deve valer para n>3. Mas é preciso provar. A indução é a técnica recomendada.
Mostre por indução em n que: n2 ≤ 2n, para n > 3
BI: n = 4 16 ≤ 16  42 ≤ 24
HI: Suponha n2 ≤ 2n
PI: (n+1)2 = n2 + 2n + 1 (pois, pelo exercício 1.10 n2 > 2n)
≤ 2n2 ≤ 2. 2n = 2n+1
Assim n0 deve ser pelo menos 4.
f(n) = 5 . 2n + 3 e g(n) = 3n2 + 5n. Vimos que n2 ≤ 2n para n ≥ 4
Partindo de g(n) = 3n2 + 5n temos que chegar em g(n) ≤ c(5 . 2n + 3). Em
primeiro lugar vamos eliminar o termo 5n. Como n > 1 temos 5n < 5 n 2  3n2 +
5n < 8n2 .
Usando a demonstração acima (n2 ≤ 2n para n > 3) temos g(n) ≤ 8 . 2n.

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
4
No entanto, 8 não é múltiplo de 5, fazemos então g(n) < 10 . 2n = 2 . (5 . 2n.).
Para completar a função f dentro do parêntese precisamos do 3 que multiplicado
por 2 fica 6, isto é g(n) < 2 . (5 . 2n.) + 6 = 2 . (5 . 2n.+ 3).
A constante é, portanto, 2
Tome n0 = 4 e c = 2. Seja n ≥ n0.
g(n) = 3n2 + 5n
< 8 . n2
< 8 . 2n provado acima
≤ 10 . 2n + 6 = 2(5 . 2n + 3) = 2f(n)
 f(n) = (g(n))
Mostre que f(n) não é O(g(n)) e, portanto, f(n) também não é (g(n))
f) f(n) = n2 . 3n e g(n) = n3 . 2n + 1
Tome n0 = 3 e c = 2. Seja n ≥ n0.
g(n) = n3 . 2n + 1 = n . n2 . 2n + 1 = n . 2n . n2 +1
≤ 3 n . n2 + 1 (provado abaixo)
≤ 2n2 . 3n = 2f(n)
 f(n) = (g(n))
Vamos mostrar por indução que: n . 2n ≤ 3n para n ≥ 3
BI: n = 3 3 . 23 = 24 ≤ 27 = 33 OK!
HI: Suponha n . 2n ≤ 3n
PI: (n+1)2(n+1)= (n+1) 2 . 2n
= 2 . n . 2n + 2. 2n
< 2 . 3 n + 2 . 2n por HI
≤ 2 . 3n + n . 2n pois n > 2
≤ 2 . 3n + 3n por HI
= 3. 3n = 3n+1 (pois: 2 < 3)
Mostre que f(n) não é O(g(n)) e, portanto, f(n) também não é (g(n))

Exercício 2.4 página 36


Dica: Partindo da definição de Máx(f,g)(n) e de mín(f,g)(n), usando desigualdade
tente chegar a c . (f(n) + g(n)) para algum c.

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
5
Exercício 2.5 página 36
ni, ci tq para n ≥ ni fi(n) ≤ ci . gi(n), com i = 1, 2
a) Tome c =max { c1 , c2 } e n0 = max { n1, n2 }
 n ≥ n0 (f1 + f2)(n) = f1(n) + f2(n) ≤ c . g1(n) + c .g2(n) = c . (g1 + g2)(n)
 f1 + f2 é (g1 + g2)
b) Tome c = c1 . c2 e n0 = max { n1, n2 }
 n ≥ n0 (f1 . f2)(n) = f1(n) . f2(n) ≤ c1 . g1(n) . c2 .g2(n) = c . (g1 . g2)(n)
 f1 . f2 é (g1 . g2)
n
c) Contra-exemplo: tome f(n) = n e g(n) =
2
n
n= ( )
2

( 2)
n
2f(n) = 2f(n) = 2n e 2g(n) = 2g(n) = 2 n/2 =

( 2)
n
 2n = O( ) absurdo (Por que?).

Exercício Proposto: para a, b  IN a > b b (an) e não


é (bn)
(Sugestão: Use o fato de a > b  a = a/b . b e a/b > 1)

Exercício 2.6 página 36


f1 = (g1) e f2 = (g2)  n1, c1 tq para n ≥ n1 g1(n) ≤ c1 . f1(n)
n2, c2 tq para n ≥ n2 g2(n) ≤ c2 . f2(n)
a) Tome c =max { c1 , c2 } e n0 = max { n1, n2 }
 n ≥ n0 (g1 + g2)(n) = g1(n) + g2(n) ≤ c . f1(n) + c .f2(n) = c . (f1 + f2)(n)
b) e c) são análogos.

Exercício 2.7 página 36


é reflexiva e transitiva:
Propriedade reflexiva: R  A2 é reflexiva sse x  A xRx.
Tomemos, portanto, f: IN  IR+ .
Tome n0 =1 e c = 1 n ≥ n0 f(n) ≤ cf(n)  f(n) = (f(n))  reflexiva.

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
6
Propriedade transitiva: R  A2 é transitiva sse x, y, z  A se xRy e yRz então
xRz.
Tomemos, portanto, f, g, h: IN  IR+ tal que f(n) = (g(n)) e g(n) = (h(n))
  c1, n1 n ≥ n1 f(n) ≤ c1g(n) e
  c2, n2 n ≥ n2 g(n) ≤ c2h(n)
Tome n3 = max { n1, n2} e c3 = c1 . c2 , logo
 n ≥ n3 f(n) ≤ c1g(n) ≤ c3 h(n)
 f(n) = (h(n))
 transitiva
é reflexiva e transitiva: análogo ao caso anterior.
Uma relação para ser de equivalência precisa ter as seguintes três
propriedades: reflexiva, simétrica e transitiva. Vamos mostrar que  é reflexiva,
simétrica e transitiva:
f(n) = (f(n)) (c1 = c2 =1)  reflexiva
f(n) = (g(n)) e g(n) = (h(n))
  c1 , c2 , n1 n ≥ n1 f(n) ≤ c1g(n) e g(n) ≤ c2f(n)
  c3 , c4 , n2 n ≥ n2 g(n) ≤ c3h(n) e h(n) ≤ c4g(n)
Tome n3 = max { n1, n2} e c5 = c1 . c3 , e c6 = c2 . c4 logo
 n ≥ n3 f(n) ≤ c1g(n) ≤ c1 . c3 h(n)  f(n) ≤ c5h(n) e
h(n) ≤ c4g(n) ≤ c2 . c4 f(n)  h(n) ≤ c6f(n)
 f(n) = (h(n))
 transitiva.
Propriedade simétrica: R  A2 é simétrica sse x, y  A se xRy então yRx.
Tomemos, portanto, duas funções f, g: IN  IR+ tal que f(n) = (g(n))
f(n) = (g(n))
  c1 , c2 , n1 n ≥ n1 f(n) ≤ c1g(n) e g(n) ≤ c2f(n)
 g(n) = (f(n))
 simétrica
é reflexiva, simétrica e transitiva  é relação de equivalência.
Estas propriedades serão úteis no capítulo 3.

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
7
Exercício 2.8 página 36
Dica para a página:
log f g log
k ¾¾¾ ¾® c . ns, então k ¾¾¾
a®n ¾ b® m ¾
¾® f(n)
g além de polinomial deve ter mesma ordem de f. Parta de f(n), faça uma troca
de bases e lembre que f(n) = g(m).
Resolução para professor:
log f g log
k ¾¾¾ ¾® c . ns, então k ¾¾¾
a®n ¾ b® m ¾
¾® f(n)
Para k se n = logak, m = logbk, então f(n) = g(m), e f(n) = cns.
g(m) = f(n) = f(logak)= c . (logak)s = c . (logbk . logab)s = c . (logab)s . ms
 g(m) = c’ . ms , com c’ = (c . logab)s

Exercício 2.9 página 36


g(n) = (ns)   n1, c1 e c2 tq n ≥ n1 g(n) ≤ c1 . ns e c2 . ns < g(n)
f(n) = (nr)   n2 c3 e c4 tq n ≥ n2 f(n) ≤ c3 . nr e c4 . nr < f(n)
 n ≥ max{ n1, n2 }  g(f(n)) ≤ c1 ((f(n))s) ≤ c1 .(c3)s . nrs
 g(f(n)) ≤ c’ . nrs
 g(f(n)) = (nrs)
 n ≥ max{ n1, n2 }  g(f(n)) ≥ c2 ((f(n))s) ≥ c2 . (c4 . nr )s.≥ c2 . (c4)s. nrs
 g(f(n)) ≥ c’’ . nrs
 rs
)

Exercício 2.10 página 36


Dica:
a) Inicialmente tente entender o método usado no exercício 2.3.10. Faça um
exemplo, tome um polinômio arbitrário p(n) = amnm + am-1 nm-1 + . . . + a1n + a0 ,
aplique o método e determine n0 e c. Agora é só usar a indução para mostrar
que n ≥ n0 p(n) ≤ c . nm .
b) Para o ítem b) simplifique o método anterior.

Exercício 2.11 página 37


Dica: Modifique o algoritmo 2.2.1 alterando as linhas 1 e 3 para:

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
8
Saída: Mx
mx
linha1: Mx  tab[1]; mx  tab[1];
linha 3: se Mx < tab[i] então Mx  tab[i]
senão se mx > tab[i] então mx  tab[i] fim-se
fim-se
Tomando como operação fundamental a comparação, da linha 3 em vez de
uma comparação agora serão duas. Portanto, serão no pior caso 2(n-1)
comparações. O teste mx > tab[i] é realizado somente quando o teste anterior for
falso. Isto é que fará a diferença na complexidade média.

Exercício 2.12 página 37


O algoritmo se torna melhor se a probabilidade de procura de um elemento do
início da lista é maior. Portanto organizando os elementos colocando os de
maior probabilidade de procura no início da lista torna o algoritmo, em média,
mais eficiente. Veremos isto no capítulo 4.

Exercício 2.13 página 37


Particiona corretamente. (Para provar proceda como no exercício 1.9)
jb é o índice em B que marca o preenchimento de B com os valores menores
que o pivô;
jc é o índice em C que guardará os valores maiores que o pivô;
jv conta o número de elementos iguais ao pivô.
Quanto ao número de comparações é igual ao algoritmo 2.3-Particionamento:
cada elemento é comparado ao pivô exatamente uma vez. Entretanto usa
memória auxiliar, necessitando dois vetores auxiliares B, C do mesmo tamanho
de A, para guardar os elementos menores e maiores que o pivô
respectivamente.
No pior caso faz 2n atribuições enquanto no algoritmo 2.3, no pior caso, são
én ù
feitas n + ê ú atribuições.
ê2 ú
A ordem de complexidade dos dois algoritmos, porém, é igual: (n)
Agora responda as questões.

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
9
Exercício 2.14 página 37
Dica para a página:
Use três apontadores: apont1 percorrerá a primeira lista, apont2 a segunda lista e
apont3 a lista resultante. A cada passo compare os elementos apontados nas
duas listas dadas e avança o apontador da lista cujo elemento apontado é
menor (ordenando em ordem crescente) e copie tal elemento na lista resultante.
Para calcular a complexidade use a comparação como operação fundamental.
Pense quantas vezes cada elemento é comparado e conte as comparações.

Exercício 2.15 página 37


Algoritmo MultMat
{Entrada: M1, M2: matriz[1..n, 1..n]
Saída: M3: matriz[1..n, 1..n]
1. para j de 1 até n faça
2. para i de 1 até n faça
n
3. M 3ij  å M1ik × M2kj
k=1
4. fim-para
5. fim-para
6. pare-com-saída (M3)
Considere como operação fundamental a multiplicação. Na linha3 são efetuadas
n multiplicações. Verifique quantas vezes essa linha é executada e calcule a
complexidade.

Exercício 2.16 página 37


Dica: Prove por indução na variável da iteração, o que corresponde a indução
no índice do vetor também. Faça a base de indução para i = 1 e i = 2.

Exercício 2.17 página 37


Como já vimos no exercício 1.9, precisamos definir invariantes da iteração 2-5.
Vamos provar por indução no número de vezes que a iteração das linhas 2 a 5 é
executada que logo após a execução da linha 5 temos
(1) achou = V sse ch = tab[j] para algum j ≤ i (invariante logo
após linha 3)

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
10
(2) ch = tab[i]  achou = V  pos = i ( logo após linha 6)
A asserção (1) estabelece o objetivo da iteração e a asserção (2) nos dá o
argumento necessário para provar a correção parcial do programa.
BI: Na 1ª vez
achou = F inicialmente (linha 1), se agora achou = V então ch = tab[i]
(linha 4)
 ch = tab[1] e 1 ≤ 1  (1) OK!
Como achou = V  (2) OK!
HI: Suponha que após a késima execução tem-se (1) e (2).
PI: Seja a (k+1)ésima execução.
Pela hi, antes de entrar na (k+1)ésima execução tem-se (1) e (2).
Na linha 3, i, que era k, é atualizado para i = k + 1
Vamos considerar os dois lados da asserção (1)
a) achou = F(no momento da (i+1)ésima execução após a linha 4)
Agora vamos considerar os dois casos da condicional da linha 4.
Se tab[k+1] = ch é verdade, então achou é atualizado para V  em
absurdo, portanto tab[k+1] ≠ ch.
Neste caso a condição tab[i] = ch foi falsa, pois o valor de achou não foi
alterado
Mas ch ≠ tab[i+1] e ch ≠ tab[i] para i ≤ k+1, por hi (já que como o valor
de achou não foi alterado e já era F).
Logo achou = F  ch ≠ tab[j] para j ≤ k+1
b) achou = V
Agora vamos considerar os dois casos da condicional da linha 4.
b1) tab[k+1] = ch é verdade
Então é executado achou:= V e tem-se ch = tab[k+1] i. é
ch = tab[j] para algum j ≤ k+1  (1) satisfeita.
b2) tab[k+1] = ch é falso.
ésima
Então achou não é atualizado oque significa que achou = V na k
execução. E por hi ch = tab[j] para algum j ≤ k  (1) satisfeita.
Logo ch = tab[j] para algum j ≤ k+1  (1) OK!
Agora vamos provar (2).

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
11
(2): ch = tab[i]  achou = V  pos = i
A variável pós é inicializada em zero na linha 1..
pós = 1 implica na linha 6 ser executada e achou = V.
Mas por (1) sabe-se que logo antes da execução da linha 6
achou = V sse ch = tab[j] para algum j ≤ i
Agora vamos examinar quando a linha 6 é executada. Há dois casos:
a) achou = V
Significa que o então da linha 4 foi executado, isto é tab[i] = ch
Como achou = V a linha 6 fará pós = i, logo tab[pós] = ch
E a saída será ; achou e pós, com achou = V e tab[pós] = ch
b) i = n e achou = F
achou = F  ch ≠t ab[j] para j ≤ i (por(1))
Logo ch não está em tab. Achou = F  (2) OK!
A saída será achou e pós, com achou = F e pós não é alterada, tem, portanto, o
valor inicial zero. Assim:
ch = tab[j] j = 1, .. , n  pós = 0

Exercício 2.18 página 38


a) N  IN n ≥ m ≥ N: f(n) ≥ f(m)
b) N  IN n ≥ N m ≥ n: f(n) ≥ f(m)
Seja N
a) para n, m ≥ N f é monotônica não decrescente.
b) f não é necessariamente monotônica para n, m ≥ N, mas sempre que
dado um n ≥ N existiria um ponto m ≥ n tal que f(n) ≤ f(m).

N N
Situação a) Situação b)

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
12
Exercício 2.19 página 38
f(n)
b1) lim =1 reflexiva
n®¥ f(n)
f(n)
b2) Suponha lim =1
n®¥ g(n)
f(n) g(n) 1
lim = 1  lim = =1(f gg f)  simétrica
n®¥ g(n) n®¥ f(n) 1
f(n) g(n)
b3) Suponha que f geg h isto é lim = 1 e lim =1
n®¥ g(n) n®¥ h(n)
f(n) g(n) f(n)
 lim × = 1  lim =1f h transitiva
n®¥ g(n) h(n) n®¥ h(n)

c) Como f g  f =  (g) Mostre!


f1 (n) f (n)
e) Suponha f1 g1 e f2 g2  lim = 1 e lim 2 =1
n®¥ g1 (n) n®¥ g2 (n)
f1 (n) + f2 (n)
lim =1?
n®¥ g1 (n) + g2 (n)

Exercício 2.20 página 38


Tome n = 1 e c=1. Seja n ≥ n0
f(n) ≤ f(n) + 1 = f+(n)  f = ( f+)
Vamos mostrar um contra-exemplo.
1
Suponha lim f(n) = 0. Por exemplo, f(n) =
n®¥ n
1 n +1
f+(n) = f(n) + 1 = +1=
n n
Suponha n0 c tal que para n ≥ n0 f+(n) ≤ cf(n)
n +1 1
f+(n) ≤ cf(n)  ≤ c  n+1 ≤ c  n ≥ n0 : n ≤ c-1  absurdo
n n
Logo f+ não é (f)

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
13
Exercício 2.21 página 38
f(n) + g(n)
h (n) = e f(n) < g(n) para n  IN .
2
f(n) + f(n) f(n) + g(n)
Seja n  IN f(n) < g(n)  f(n) = < = h(n).
2 2
f(n) + g(n) g(n) + g(n)
Por outro lado h(n) = < = g(n) Logo f(n) ≤ h(n) ≤ g(n)
2 2
Suponha f = (g)
 n0 c tal que para n ≥ n0 f(n) ≤ cg(n)
Tome n0 e c da linha anterior e c’ = c + 1. Seja n ≥ n0
f(n) + f(n) f(n) + cg(n) f(n) + g(n)
f(n) = < < c’ = c’ h(n)
2 2 2
 f = (h)
f(n) + g(n) cg(n) + g(n) g(n) + g(n)
h(n) = ≤ ≤ c’ = c’ g(n)
2 2 2
 h = (g)
Agora suponha que g não é (f), isto é, f não limita g, nem assintoticamente,
então é de se esperar que f também não limite h nem assintoticamente. Vamos
então tentar provar que h não é (f).
g não é (f)  (n0, c: n ≥ n0 g(n) < c f(n))  n0, c n ≥ n0 : g(n) > c f(n)
Queremos mostrar que h não é f(n) i. é que para n0, c n ≥ n0 tal que g(n) > c
f(n)
Sejam n0 e c. n > n0 tal que h(n) > cf(n)?
Tome n0 e 2c – 1. Como g(n) não é f(n) n > n0 tal que h(n) > (2c-1)f(n). Seja tal
n
f(n) + g(n)
 h(n) =
2
f(n) + (2c - 1)f(n)
>
2
f(n) + 2cf(n) - f(n)
>
2
2cf(n)
> = cf(n)
2
Agora temos que f(n) não é (g(n)) e a pergunta é se g(n) não é (h(n)). Vemos
que como g participa da definição de h o fato de f não limitar g assintoticamente

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
14
não necessariamente determina em g não limitar h assintoticamente. Então,
vamos procurar um contra-exemplo.
Contra-exemplo:
n2 + n
f(n) = n g(n) = n2 h(n) = g = (h).
2
f(n) não é (g(n)), mas g(n) é (h(n)).

Exercício 2.22 página 38


Dica: Para a primeira questão defina duas funções crescentes de ordem
diferentes: f1 e f2 . Depois defina as duas funções do contra-exemplo assumindo
o valor da primeira (f1) e da segunda (f2) alternadamente e infinitamente (por
exemplo, uma para entradas pares e outra para entradas ímpares), invertendo
para a outra função do contra-exemplo.
Depois tente fazer ambas não decrescentes, por exemplo, defina
recursivamente f e g tal que: n impar  f(n) = 2g(n) e n par  g(n) = 2f(n). A seguir
modifique-as levemente tornando-as crescentes.
Para f e g tomando valores em {0, 1} defina f e g tal que para todo n f(n) ≠ g(n),
f(n) ≠ f(n+1) e g(n) ≠ g(n+1).

Exercício 2.23 página 38

j tam : D  IN j D : = { d  D/ j tam(d) ≤ n}
n

a) 1 tam (d) ≤ 2 tam (d) para d  D

1D  2 D ?
n n

Seja d  1 Dn  1 tam (d) ≤ n

2 tam (d) ≤ n ? Não se pode garantir.


Seja d  2 Dn  2 tam (d) ≤ n

1 tam (d) ≤ 2 tam (d)  1 tam (d) ≤ n  d  1 D . Logo 2 D  1 D


n n n

j c [a](n) = Máx{desemp[a](d)  IN / d  j Dn }
n

2 c [a](n) = Máx{desmp[a](d)  IN / d  2 D }
n n

≤ Máx{desmp[a](d)  IN / d  1 Dn }
= 1 c n [a](n)  n n
2 c [a](n) ≤ 1 c [a](n)

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)
15
b) 2 tam (d) = 2 . 1 tam (d)  1 Dn = 2 D2n , pois

1 tam (d) ≤ n sse 2 tam (d) ≤ 2n e 2 D  1 D  2[a](n) ≤ 1 c [a](n)


n n n

Exercício 2.24 página 39


Dica: Achando a relação entre os conjuntos de entradas, as complexidades têm
£
relação invertida. Lembre a relação entre D=n e D £ =
n e a relação entre c P (n) e c P
(n).

Exercício 2.25 página 39


Dica: Use a sugestão do livro

COMPLEXIDADE DE ALGORITMOS Cap. 2. Conceitos Básicos


(Do livro Complexidade de Algoritmos Laira V. Toscani & Paulo A. S. Veloso 3ª edição
Bookman 2012)

Você também pode gostar