Programação em C++ Ciência da Computação Alan R. R. de Freitas Análise de Complexidade 1a Questão O que significa dizer que uma função g(n) é O(f (n))? 2a Questão Explique a diferença entre O(1) e O(2). 3a Questão Indique se as afirmativas são verdadeiras ou falsas: (a) 2n+1 = O(2n ) (b) 22n = O(2n ) (c) f (n) = O(u(n)) e g(n) = O(v(n)) → f (n) + g(n) = O(u(n) + v(n)) 4a Questão Se os algoritmos A e B levam tempo a(n) = n2 − n + 549 e b(n) = 49n + 49. a(n) = O(b(n))? b(n) = O(a(n))? Para quais valores A leva menos tempo para executar do que B? 5a Questão Apresente o esboço de uma algoritmo para obter o maior e o segundo maior elementos de um conjunto. Apresente uma análise do algoritmo. Ele é eficiente? Por quê? 6a Questão Considere um algoritmo para inserir um elemento em um arranjo ordenado de elementos. Qual o número mı́nimo de passos para resolver este problema? Qual o melhor caso? Qual o pior caso? Qual o caso médio? 7a Questão Do ponto de vista assintótico: n 1 ≺ log log n ≺ log n ≺ n ≺ nc ≺ nlog n ≺ cn ≺ nn ≺ cc Onde k ≥ 1 e 0 < < 1 < c Indique se A é O de B para os pares abaixo: A A A A A A A = = = = = = logk n k n p (n) 2n nlog m log(n!) B B B B B B B 1 O = = = = = = n cn nsin n 2n/2 mlog n log(nn )