André Vignatti DINF- UFPR

Documentos relacionados
André Vignatti DINF- UFPR

Elementos de Análise Assintótica

ANÁLISE DE ALGORITMOS: PARTE 3

Complexidade Assintótica

BCC202 - Estrutura de Dados I

Aula 02 Notação Assintótica p. 4. Usodanotação O. Notação O. Notação O, Ω, ΘeExemplos. Intuitivamente... O(f(n)) funções que não crescem mais

BCC202 - Estrutura de Dados I

Projeto e Análise de Algoritmos

Aula 1. Teoria da Computação III

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

Complexidade de Algoritmos

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

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Lista de Exercícios 6: Soluções Funções

Projeto e Análise de Algoritmos

BCC202 - Estrutura de Dados I

Lista de Exercícios 6 Funções

Medida do Tempo de Execução de um Programa

03 Análise de Algoritmos (parte 3) SCC201/501 - Introdução à Ciência de Computação II

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

1 a Lista Professor: Claudio Fabiano Motta Toledo Estagiário PAE: Jesimar da Silva Arantes

1 a Lista de Exercícios

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

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

COMPLEXIDADE DE ALGORITMOS

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

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

Introdução à Análise Algoritmos

ESTRUTURA DE DADOS CIÊNCIA E TECNOLOGIA DO RIO. Curso de Tecnologia em Sistemas para Internet

Análise de algoritmos

Análise de algoritmos. Parte I

5. Invólucros Convexos no Plano (cont )

Quantidade de memória necessária

Complexidade de algoritmos Notação Big-O

Introdução à Análise de Algoritmos

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

Análise de algoritmos

Notação Assintótica Letícia Rodrigues Bueno

Breve Introdução à Complexidade Assintótica de Algoritmos Letícia Rodrigues Bueno

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

Complexidade Assintótica de Programas Letícia Rodrigues Bueno

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Capítulo. Análise de Algoritmos. 6.1 Complexidade de Algoritmos 6.1

INF 1010 Estruturas de Dados Avançadas

Análise de Algoritmos

Projeto e Análise de Algoritmos

Algoritmos e Estrutura de Dados

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

INF 1010 Estruturas de Dados Avançadas

Comportamento assintótico

Rascunho. CI165 - Análise de algoritmos (rascunho alterado constantemente) André Guedes Departamento de Informática UFPR. 11 de junho de 2017

Rascunho. CI165 - Análise de algoritmos (rascunho alterado constantemente) André Guedes Departamento de Informática UFPR. 7 de dezembro de 2016

Teoria dos Grafos Aula 7

Construção de Algoritmos II Aula 06

Capítulo 6 Análise de Algoritmos Capítulo 6

Análise e Projeto de Algoritmos P R O F : L O A N A T. N O G U E I R A

Funções. Antonio Alfredo Ferreira Loureiro. UFMG/ICEx/DCC MD Funções 1

Algoritmos de Ordenação: QuickSort

Análise de algoritmos. Parte I

4º 20/10/2003. ÍNDICE

Análise de Algoritmos e Estruturas de Dados

Análise e Projeto de Algoritmos

Análise de Algoritmos

EEL470 Algoritmos e Estruturas de Dados Prof. Heraldo L. S. Almeida Prova 1 (22/05/2009)

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

3. ANÁLISE DE COMPLEXIDADE PESSIMISTA

Análise e Complexidade de Algoritmos

LISTA DE EXERCÍCIOS 1

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

Programação II Aula 07

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

Análise de Algoritmos e Estruturas de Dados

LISTA DE EXERCÍCIOS 1

Classes, Herança e Interfaces

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

Análise de Algoritmos

Universidade Federal de Mato Grosso do Sul Faculdade de Computação Disciplina de Verão: Algoritmos e Programação II

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

Análise e Projeto de Algoritmos

Complexidade de Algoritmos

Análise de Algoritmos Estrutura de Dados II

PCC104 - Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

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

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

2. Complexidade de Algoritmos

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Complexidade de Algoritmos

Módulo 7. Complexidade de Algoritmos. Algoritmos e Estruturas de Dados II C++ Rone Ilídio

Análise de Complexidade de Algoritmos

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

Análise de Complexidade. Algoritmos e Estruturas de Dados Flavio Figueiredo (

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

Sobre a análise de algoritmos...

ALGORITMOS E ESTRUTURAS DE DADOS 2011/2012 ANÁLISE DE ALGORITMOS. Armanda Rodrigues 3 de Outubro 2011

Complexidade de Algoritmos

Análise de algoritmos Parte I

Algoritmos de Ordenação

Lista de março de 2014

Transcrição:

Notação Assintótica: Ω, Θ André Vignatti DINF- UFPR

Limitantes Inferiores Considere o seguinte trecho de código: void main () { /* trecho que le N da entrada padrao */ for (i = 0 ; i< N; i++) puzzle(i); } int puzzle (int N) { if (N == 1) return 1; if (N % 2 == 0) return puzzle(n/2); else return puzzle(3*n+1); } Testar puzzle(3): 3 10 5 16 8 4 2 1.

Limitantes Inferiores O programa chama puzzle N vezes. Cada chamada de puzzle executa 1 comando. Qual o número máximo de comandos executado por puzzle? Difícil responder! Mas pode ser útil saber um limitante inferior para o número de passos de um algoritmo. Usamos então a notação Ω.

Limitantes Inferiores: Notação Ω Definição f (n) é Ω(g(n)) se existe constantes c > 0 e n 0 tal que f (n) cg(n), para todo n n 0. g(n) é dito ser um limitante inferior assintótico para f (n).

Seja f (n) = 5. É verdade que f (n) = Ω(1)? SIM. Tomando c = 1, n 0 = 0 então 5 c para n n 0. Seja f (n) = n. É verdade que f (n) = Ω(1)? SIM. Tomando c = 1, n 0 = 1 então n c para n n 0. Seja f (n) = 1/n. É verdade que f (n) = Ω(1)? NÃO. Não existe c, n 0 pois 1 n constante fixa c. sempre pode ser menor que uma

As funções a seguir são Ω(n 2 ) n 2 n 2 + n n 2 n 1000n 2 + 1000n 1000n 2 1000n n 3 n 2.000000001 2 2n

Algoritmos e Notações O e Ω Definição - Tempo de Execução de um Algoritmo: Um algoritmo é dito Ω(f (n)) se TODAS as instâncias executam em tempo Ω(f (n)). Um algoritmo é dito O(g(n)), se TODAS as instâncias executam em tempo O(g(n)). InsertionSort é O(n 2 ) pois TODOS os vetores passados como entrada fazem o algoritmo executar em tempo O(n 2 ). InsertionSort NÃO é O(n) pois existem algumas instâncias (vetor ordenado ao inverso) que executam em tempo O(n 2 ). InsertionSort é Ω(n) pois TODOS os vetores passados como entrada fazem o algoritmo executar em tempo Ω(n). InsertionSort NÃO é Ω(n 2 ) pois existem algumas instâncias (vetor ordenado) que executam em tempo Ω(n).

Algoritmos e Notações O e Ω Pergunta: InsertionSort é O(n 3 )? Pergunta: InsertionSort é Ω(1)? Ambas as respostas são SIM, mas não diz muita coisa sobre o algoritmo... É sempre mais interessante encontrar a menor função f (n) tal que o algoritmo é O(f (n)). É sempre mais interessante encontrar a maior função g(n) tal que o algoritmo é Ω(g(n)).

Algoritmos e Notações O e Ω Como O limita por cima, pode ter sido feita uma análise folgada. Supondo análise O(n 3 ) do InsertionSort (o que NÃO está errado). Podemos melhorar a análise? Não conseguimos encontrar vetor que gaste tempo Ω(n 3 )! Como saber que a análise de O(f (n)) não está folgada? Um jeito: achar uma instância que execute em Ω(f (n)). Neste caso, não haveria espaço para melhorias na análise.

Algoritmos e Notações O e Ω Supondo análise O(n 2 ) e Ω(n) do InsertionSort. Podemos melhorar? Vetor ordenado gasta tempo O(n) = não dá pra aumentar Ω(n) Vetor ordenado ao inverso gasta tempo Ω(n 2 ) = não dá pra diminuir O(n 2 ). Ao comparar melhor caso X pior caso dificilmente temos uma análise justa (i.e., sem folgas). Solução: Solução: fazer a análise justa do melhor caso separadamente do pior caso.

Análise de Algoritmos não justa (no sentido de apertado) InsertionSort executa em tempo O(n 2 ) e Ω(n). NÃO dá pra deixar a análise mais justa! Vamos separar por melhor e pior caso: Pior Caso O pior caso do InsertionSort executa em O(n 2 ) e Ω(n 2 ). Isto porque: No pior caso, TODAS as instâncias executam em O(n 2 ). No pior caso, TODAS as instâncias executam em tempo Ω(n 2 ). Melhor Caso O melhor caso do InsertionSort executa em O(n) e Ω(n). Isto porque: No melhor caso, TODAS as instâncias executam em O(n). No melhor caso, TODAS as instâncias executam em tempo Ω(n).

Notação Θ Definição f (n) = Θ(g(n)) se f (n) = O(g(n)) e f (n) = Ω(g(n)). Neste caso, dizemos que g(n) é um limitante assintótico justo (apertado) para f (n). Definição Equivalente f (n) é Θ(g(n)) se existe constantes c 1, c 2 > 0 e n 0 tal que c 1 g(n) f (n) c 2 g(n), para todo n n 0.

Notação Θ Mostre que a soma dos n primeiros inteiros é Θ(n 2 ). Limite Superior: 1 + 2 +... + n n + n +... + n = n 2. Então, tomando c = 1, n 0 = 1, a soma é O(n 2 ). Limite Inferior: 1 + 2 +... + n n/2 + ( n/2 + 1) +... + n = (n n/2 + 1) n/2 (n/2)(n/2) = n 2 /4, n/2 + n/2 +... + n/2 assim, tomando c = 1/4, n 0 = 1 a soma é Θ(n 2 ).

Fato útil: o termo dominante de um polinômio determina sua complexidade assintótica: Teorema Seja f (n) = a k n k + a k 1 n k 1 +... + a 1 n + a 0 onde a 0,..., a k são números reais, e a k 0. Então f (n) = Θ(n k ). Demonstração. Exercício.

Observação Importante: Knuth observou: muito autores usam de forma errada O como se fosse Θ! Sempre se lembre disso quando você ver a notação O sendo usada! Outro erro clássico: O serve para expressar o pior caso, Ω serve para expressar o melhor caso.