1) Na prática, quais grandezas físicas influenciam a eficiência de tempo de um
algoritmo? R: Espaço da memória e número de operações
2) Quando calculamos a complexidade de algoritmos não recursivos podemos nos guiar
por um conjunto de regras simples de serem seguidas. Cite e descreva essas regras. R: Contar as instruções de um algoritmo, as instruções simples tem o custo de um, já os laços de repetição tem o custo de n ou mais dependendo de quantas iterações ou quantos laços ele tem aninhados. Custo dominante ou pior caso, você sempre tem que considerar o código como se fosse o pior caso, por exemplo, um laço for para ordenar números em ordem crescente recebe os valores em ordem decrescente. Comportamento assintótico, analise as constantes e as descarte.
3) O que significa dizer que uma função g(n) é O(f(n))?
R: Significa que a função g(n) tem um crescimento proporcional a f(n)
4) O que significa dizer que uma função g(n) é Ω(f(n))?
R: Significa que g(n) cresce proporcionalmente a f(n) mas em alguns pontos tem capacidade de crescer mais rapidamente.
5) Liste os tipos de problemas que apresentam complexidade da ordem de n log n.
Como é possível identificá-los? R: Algoritmos de busca, de ordenação e qualquer um que use a tática de dividir e conquistar. É possível identificar por qualquer algoritmo que resolva um problema transformando-o em problemas menores, que são resolvidos de forma independente e depois unidos.
6) Considere dois algoritmos A e B com funções de complexidade de tempo a(n) = n2 –
n + 500 e b(n) = 47n + 47, respectivamente. Para quais valores de n o algoritmo A leva menos tempo para executar do que B? R: Entre os valores 12 e 35; n2 - n + 500 < 47n + 47 → n2 - 48 + 453 < 0 → 48 +- 482-4.1.453/2 → 48 += 492/2 → (48 + 22.18)/2 = 33.09 e (48 - 22.18)/2 = 12.91
7) Calcule a ordem de complexidade, no pior caso, das seguintes funções de custo: