You are on page 1of 27

Projeto e Anlise de Algoritmos Prof : M Aline Lopes

Algoritmos

O que so algoritmos ?

So procedimentos computacionais bem definidos que toma um ou um conjunto de valores como entrada retorna como sada um valor ou um conjunto de valores como sada. [Cormen, 2012] Qual o papel deles na computao ?

Algortimos

Consideraes
Um algoritmo dito correto se, para cada instncia de entrada, ele pra com a sada correta. Dizemos que um algoritmo correto resolve o problema computacional dado.

Algoritmos

Exemplos:

Ordenao de um conjunto de nmeros em ordem crescente ?


Tal procedimento pode ser classificado como algoritmo? Ordenar um sequencia de numeros de forma crescente. Ex.: Uma sequencia de n numeros: Entrada: (a1,a2,a3,a4, ....an)

Saida: Uma permutao tal que (a1 <= a2 <=a3<= ...an)

Algoritmos

Exemplos

Ordenar de forma crescente a sequencia abaixo:


Ex: (31,41,59, 26, 41,58)

Conceitos bsicos

Instncia
Consiste na entrada (que satisfaz a quaisquer restries impostas no enunciado do problema) necessria para se calcular uma soluo para o problema . [Cormen, 2012]

Estrutura de dados
Uma estrutura de dados um meio para armazenar e organizar dados com o objetivo de facilitar o acesso e as modificaes. Nenhuma estrutura de dados nica funciona bem para todos os propsitos, e assim importante conhecer os pontos fortes e as limitaes de vrias delas.

Conceitos bsicos

Ex: Algoritmo de Ordenao por insero


Ordenao semelhante a aplicada em jogo de cartas.

Percorre um vetor de elementos da esquerda para a direita deixando os elementos mais a esquerda ordenados. Toma-se um arranjo de tamanho n que deve ser ordenado com base em um critrio pr-definido.
Tomares como exemplificao o algortimo insertionsort. Ordenar o conjunto A =(5,2,4,6,1,3).

Conceitos bsicos

Ordenao por insero

Conceitos bsicos

Ordenao por insero Explicaes


Uso de interaes atravs do loop for

Em cada iterao o elemento usado para comparar est na chave A[j].


A iterao no lao while ocorre enquanto i > 0 Os elementos so permutados at a ordenao completa do conjunto.

e A[i] > chave

Anlise de Algoritmos

Estuda o comportamento de algoritmos para soluo de certos problemas computacionais recorrentes em uma grande variedade de aplicaes.
Dois aspectos so considerados importantes:
Tempo de execuo

Espao ocupado

Tipos Analise Anlise de algoritmo particular Analise de uma classe de algoritmos

Tipos de anlise de algoritmos

Analise de algoritmo particular


Qual o custo de usar um dado algoritmo para resolver um problema especfico? Caractersticas a serem investigadas:
Anlise do nmero de vezes que cada parte do algoritmo deve ser executada Estudo da quantidade de memria ou espao em disco necessrio

Provar que o algoritmo est correto

Tipos de anlise de algoritmos

Analise de uma classe de algoritmos


Qual o algoritmo de menor custo possvel para resolver um problema particular? Toda uma famlia de algoritmos estudada Procura-se identificar qual o melhor possvel Estuda-se quais os limites para a complexidade computacional dos algoritmos pertencentes quela classe.

Eficcia x Eficicia

E quando existirem vrios algoritmos corretos conhecidos para o mesmo problema?


Como determinar qual o melhor algoritmo? O que ser melhor em termos de algoritmos? Eficcia
Relao entre os resultado obtidos e os resultados esperados Para ser eficaz um algoritmo precisa ser correto (corretude)

Eficcia x Eficicia

Eficincia
Relao entre os resultados obtidos e os recursos empregados no processo Um algoritmo eficiente atinge os objetivos da melhor forma possvel (Performance, Desempenho)

Custo de execuo

Um algoritmo mais eficiente que outro quando apresenta um menor custo computacional de execuo levando-se em considerao os fatores crticos do problema.
Custos computacionais tpicos:
Tempo de Execuo Utilizao de Memria Principal Utilizao de Armazenamento de Massa

Consumo de energia, etc

Custo de execuo

Vrios fatores podem aumentar ou diminuir os custos computacionais de um algoritmo, impactando diretamente em seu desempenho (eficincia)
Por exemplo: No problema da ordenao Qual a quantidade de nmeros a ordenar? (Tamanho da Entrada ou Tamanho da Instncia) Em que extenso esses nmeros j esto ordenados? Onde esses nmeros esto armazenados? E onde sero manipulados?

Custo de execuo

Tamanho da entrada
Um dos principais fatores que afetam o desempenho de um algoritmo, uma vez que um computador possui capacidade de processamento limitada O tamanho da instncia (n) de um problema a quantidade de dados necessria para descrever a instncia Permite estimar o quanto um determinado problema desafiador em termos de custos computacionais

Anlise de complexidade

Quando estudamos os custos computacionais de execuo de um algoritmo ou de uma classe de algoritmos, para determinar seu desempenho, dizemos que estamos analisando a complexidade desse algoritmo, ou dessa classe de algoritmos.
Dois tipos de Anlise de Complexidade
Complexidade Temporal depende do tempo para executar um algoritmo de tamanho n Complexidade Espacial quantidade de memria necessria para executar o algoritmo de tamanho n.

Anlise de complexidade

Ex: Considere algoritmo para encontrar o maior elemento de um vetor de inteiro , v[n] onde n o tamanho do vetor.
Sua funo de complexidade denotada por :
f(n)= n -1, para n > 0

A funo de complexidade calcula o nmero de vezes que uma determinada operao executada.

Anlise de complexidade

Ex:
public classe Max{

public static int max(int v[], int n){


int max = v[0]; for (int i=0; i < n; i++){ If (max < v[i]) max = v[i]; }

}
}

Anlise de complexidade

O teorema nos diz que, se o nmero de comparaes for utilizado como medida de custa, ento o mtodo max da classe Max timo.
Consideraes O tamanho da entrada pode afetar o custo de execuo Precisamos distinguir trs cenrios: melhor caso, pior caso e caso mdio.

Anlise de complexidade

O melhor caso
Corresponde ao menor tempo de execuo sobre todas as possveis entradas.

O pior caso
Corresponde ao maior tempo de execuo sobre todas as entradas de tamanho n

Anlise de complexidade

O caso mdio (ou caso esperado)


Corresponde media dos tempos de execuo de todas as entradas de tamanho n. Considera-se a distribuio de probabilidades sobre o conjunto de entradas de tamanho n suposta, e o custo mdio obtido com base nessa distribuio.

Anlise de complexidade

Seja f uma funo de complexidade tal que f(n) nmero de registros consultados no arquivo, isto , nmero de vezes que a chave de consulta comparada com a chave de cada registro.
Melhor caso : f(n) = 1

Pior caso: f(n) = n


Caso mdio f(n) = (n + 1) /2

Anlise de complexidade

Encontrar o maior e o menor elementos de um vetor de inteiros v[n]. Representado pela funo:
f(n) = 2(n-1), para n > 0.

Encontrar o melhor caso, o pior caso e caso mdio.

Anlise de complexidade

Encontrar o maior e o menor elementos de um vetor de inteiros v[n]. Representado pela funo:
f(n) = 2(n-1), para n > 0.

...... public static int maxMin1(int v[], int i){

Int max = v[0], min = v[0];


For (int i =1; i< n; i++ ) {

if (v[i] > max) max = v[i];


if(v[i] < min) min=v[i]; } int maxMin = new int[2];

Anlise de complexidade

Funo melhorada para encontrar o valor mximo e mnimo de um conjunto de elementos


....... public static int maxMin2(int v[], int i){ Int max = v[0], min = v[0]; For (int i =1; i< n; i++ ) { if (v[i] > max) max = v[i];

else if (v[i] < min) min = v[i]; }


int maxMin = new int[2]; maxMin[0] = max; maxMin[1] = min;

You might also like