Complexidade de Algoritmos

Documentos relacionados
Complexidade de Algoritmos

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

Algoritmos de Ordenação. Cota inferior. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

Teoria da Computação. Aula 3 Comportamento Assintótico 5COP096. Aula 3 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Métodos de Ordenação: Selection, Insertion, Bubble, Merge (Sort)

Algoritmos e Estruturas de Dados I Aula 06 Custos de um algoritmo

CT-234. Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Projeto e Análise de Algoritmos

Comportamento Assintótico. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Complexidade de Tempo e Espaço

Algoritmos de Ordenação: QuickSort

1 a Lista de Exercícios

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Invariantes de Laço. Profa. Sheila Morais de Almeida. junho DAINF-UTFPR-PG

Complexidade de algoritmos Notação Big-O

CES-11. Noções de complexidade de algoritmos. Complexidade de algoritmos. Avaliação do tempo de execução. Razão de crescimento desse tempo.

INF 1010 Estruturas de Dados Avançadas

Técnicas de projeto de algoritmos: Indução

BCC Projeto e Análise de Algoritmos Aula 0: Apresentação

Projeto e Análise de Algoritmos

TEORIA: 60 LABORATÓRIO: 0

Classes, Herança e Interfaces

Complexidade de Algoritmos

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Algoritmos de ordenação Quicksort

Complexidade de Algoritmos

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Ordenação: QuickSort. Prof. Túlio Toffolo BCC202 Aula 15 Algoritmos e Estruturas de Dados I

Análise e Projeto de Algoritmos

Algoritmos Avançados Análise de Complexidade

Projeto e Análise de Algoritmos

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo

Área que visa determinar a complexidade (custo) de um algoritmo, com isso é possível:

Introdução à Ciência da Computação II

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

BCC202 - Estrutura de Dados I

ESTRUTURAS DE DADOS prof. Alexandre César Muniz de Oliveira

Projeto e Análise de Algoritmos

BCC202 - Estrutura de Dados I

Algoritmos de Ordenação: Cota Inferior

ANÁLISE DE ALGORITMOS: PARTE 3

Análise de Algoritmos Estrutura de Dados II

Análise de Algoritmos

Estrutura de Dados. Algoritmos de Ordenação. Prof. Othon M. N. Batista Mestre em Informática

INF1007: Programação 2 6 Ordenação de Vetores. 01/10/2015 (c) Dept. Informática - PUC-Rio 1

Complexidade Assintótica

Projeto e Análise de Algoritmos

CURSO DE ESTRUTURA DE DADOS MÓDULO: ALGORITMOS DE ORDENAÇÃO E PESQUISA PROFESSORA: DANIELA ELOISE FLÔR COLABORADORA: MARIA CAROLINA SILA VANUCHI

Medida do Tempo de Execução de um Programa. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Aula 18 Algoritmos básicos de busca e classificação

Análise de Algoritmos

Teoria da Computação Aula 9 Noções de Complexidade

Análise de complexidade

Lista de exercícios sobre contagem de operações Prof. João B. Oliveira

ORDENAÇÃO DE ARQUIVOS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

Métodos de Ordenação

BCC202 - Estrutura de Dados I

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

André Vignatti DINF- UFPR

Arquivos Sequenciais. Estruturas de Dados II Vanessa Braganholo

UNIVERSIDADE DA BEIRA INTERIOR

Quantidade de memória necessária

Ordenação e Pesquisa de Dados. Aula 07 Insertion Sort e Bubble Sort

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Método BubbleSort. Estrutura de Dados II Prof Jairo Francisco de Souza

BC1424 Algoritmos e Estruturas de Dados I Aula 05 Custos de um algoritmo e funções de complexidade

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Linguagem C: Algoritmos de Ordenação

Teoria da Complexidade Computacional

Algoritmos para Automação e Sistemas

Elementos de Análise Assintótica

Análise de algoritmos. Parte I

Análise e Projeto de Algoritmos

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Introdução à Ciência da Computação II

Transcrição:

Complexidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br

Funções de Complexidade Considere que cada operação leva 1ns em média em um determinado processador. Determine o tempo das funções abaixo para os seguintes valores de operações: f(n) / n n=10 n=100 n=1.000 n=10.000 n=100.000 n=1.000.000 log 2 n n 3n n log 2 n n² 2 n n!

Notação Assintótica (Notação O grande Limite Superior) Uma função g(n) domina assintoticamente outra função f(n) se existem duas constantes positivas c e n 0 tais que, para n > n 0, temos f(n) c. g(n) f(n) = O(g(n)) n 2 + 4n - 4 = O(n 2 ) 2n 2 = O(n 2 )

Notação Assintótica (Notação O grande Limite Superior) f(n) = n 2 + 4n - 4 g(n) = O(n 2 ) f(n) = 2n 2 g(n) = O(n 2 ) [ O(n)? ] f(n) / c & n 0 c=1 n 0 =3 c=1 n 0 =50 c=2 n 0 =1 c=2 n 0 =10 c=3 n 0 =2 c=3 n 0 =10 2n 2 - - c(n 2 ) n 2 + 4n 4 c(n)

Algumas Operações com Notação O c.o(f(n)) = O(f(n)), onde c é uma constante. O( f(n) ) + O( g(n) ) = O( MAX(f(n), g(n) ) n.o( f(n) ) = O( n. f(n) ) O( f(n) ). O( g(n) ) = O( f(n). g(n) )

Hierarquia de funções Hierarquia de funções do ponto de vista assintótico: 1 < log log n < log n < n < n c < n log n < c n onde e c são constantes arbitrárias tais que 0 < < 1 c.

Medidas de Complexidade CONSIDERAÇÃO II: Ignorar o custo das instruções (tempo constante) e focar na análise do crescimento do uso de um recurso (tempo, espaço) em relação ao crescimento da entrada. Ex: ordenar uma lista de n elementos e mostrar a lista ordenada n Ordenação Bolha printf vetor 100 37,8 µs 8,532 ms 200 148,4 µs 17,847 ms 1.000 3,748 ms 91,569 ms 10.000 247 ms 860,205 ms 50.000 5,307 s 4,277 s 100.000 20,422 s 8,693 s

Medidas de Complexidade CONSIDERAÇÃO III: pode-se analisar os valores de entrada com perspectivas diferentes: Melhor caso => menor complexidade para um valor de n ; Pior caso => maior complexidade para um valor de n ; Complexidade esperada ou média => leva-se em conta a probabilidade de ocorrência de cada entrada de um mesmo tamanho n. Pode-se antecipar alguma relação (<,, >, ) entre as complexidades média e pior caso de um algoritmo qualquer?

Medidas de Complexidade int pesquisa(estrutura *v, int n, int chave) { int i; for (i = 0; i < n; i++) if (v[i].chave == chave) return i; return -1; Em que situação ocorre o melhor caso? Em que situação ocorre o pior caso? E o caso médio? ATENÇÃO: não assuma um valor fixo e pequeno para n ao considerar o melhor caso!

Medidas de Complexidade Melhor caso: Caso o primeiro registro seja o registro procurado será necessária apenas uma comparação. Logo, podemos dizer que a complexidade é constante [OBS: existe uma notação especial para indicar melhor caso veremos ela mais adiante]

Medidas de Complexidade Pior caso: Caso o último registro acessado seja aquele que se procura: int pesquisa(estrutura *v, int n, int chave) { int i; // O(1) for (i = 0; i < n; i++) // O(n) if (v[i].chave == chave) // O(1) return i; // O(1) return -1; // O(1) Logo, podemos dizer que a função pesquisa tem complexidade O(n) para o pior caso.

Medidas de Complexidade Caso médio: Caso o i-ésimo registro seja o registro procurado são necessárias i comparações. Sendo p i a probabilidade de procurarmos o i-ésimo registro temos: f (n) = 1.p 1 + 2.p 2 +... + n.p n. Considerando que a probabilidade de procurar qualquer registro é a mesma probabilidade, temos: p i = 1 / n para todo i. f ( n) 1 n (1 2... n) 1 n n( n 1) 2 ( n 1) 2 Logo, temos uma complexidade linear: (n+1) 2 = n

Medidas de Complexidade CONSIDERAÇÃO IV: pode-se analisar a complexidade em relação a diferentes recursos. Os mais usuais são: tempo e espaço. Complexidade de espaço: Devemos considerar todo o espaço adicional criado pelo algoritmo assim como a quantidade de chamadas de função (geralmente recursivas) realizadas. Por enquanto vamos focar no recurso tempo!

Exemplo (Bubble Sort) void bubble(int *v, int n){ int i, j, aux; for (i = n - 1; i > 0; i--){ for (j = 0; j < i; j++){ if (v[j] > v[j+1]){ aux = v[j]; v[j] = v[j+1]; v[j+1] = aux;

Exemplo (Ordenação por Seleção) void selectionsort(int *v, int n){ int i, j, x, aux; for (i = 0; i < n; i++){ x = i; for (j = i+1; j < n; j++){ if( v[j] < v[x] ) x = j; aux = v[i]; v[i] = v[x]; v[x] = aux;

Exemplo (Ordenação por Inserção) void insercao(int *v, int n){ int i, j, x; for (i = 1; i < n; i++){ x = v[i]; j = i - 1; while (j >= 0 && v[j] > x){ v[j+1] = v[j]; j--; v[j+1] = x;

Atividade Implemente as funções de ordenação analisadas e faça um quadro comparativo do tempo de execução para ordenar: (n=)100.000 números aleatórios (OBS: utilize a mesma entrada para cada algoritmo) (n=)100.000 números já em ordem crescente (OBS: pode ser uma sequencia simples como 1,2,3,..., 100.000)

Atividade Elabore os seguintes algoritmos e analise o seu tempo de execução para diferentes entradas e determine a sua complexidade de tempo. Implemente um algoritmo (função) que recebe como parâmetro dois valores inteiros a e b e calcula a b. Implemente um algoritmo (função) que recebe duas matrizes quadradas de mesma ordem (n x n) e realiza a multiplicação entre elas.

Referências Algoritmos. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Cliford Stein. Campus. Algorithms. Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani. McGraw Hill. Concrete Mathematics: A Foundation for Computer Science (2nd Edition). Ronald L. Graham, Donald E. Knuth, Oren Patashnik. Addison Wesley. M. R. Garey and D. S. Johnson. 1978. Strong NP-Completeness Results: Motivation, Examples, and Implications. J. ACM 25, 3 (July 1978)