Complexidade de Algoritmos. Edson Prestes



Documentos relacionados
Projeto e Análise de Algoritmos. Profa. Juliana Kaizer Vizzotto. Projeto e Análise de Algoritmos - Aula 1

Universidade Federal de Alfenas

Análise de complexidade

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos

CI165 Introdução. André Vignatti. 31 de julho de 2014

5COP096 TeoriadaComputação

Análise e Complexidade de Algoritmos

Orientação a Objetos

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

28/9/2010. Paralelismo no nível de instruções Processadores superescalares

Análise de Algoritmos: Melhor caso, pior caso, caso médio

Orientação a Objetos

Capítulo 19. Algoritmos de Ordenação e de Pesquisa. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Introdução a Informática. Prof.: Roberto Franciscatto

Sistemas Computacionais II Professor Frederico Sauer

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Aula 03 Custos de um algoritmo e funções de complexidade

EFICIÊNCIA DE ALGORITMOS E

Complexidade de Algoritmos

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2.

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

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a.

Java. Marcio de Carvalho Victorino

Arquitetura de Computadores - Processadores Superescalares. por Helcio Wagner da Silva

ALP Algoritmos e Programação. . Linguagens para Computadores

Dadas a base e a altura de um triangulo, determinar sua área.

O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Resolução de problemas e desenvolvimento de algoritmos

Processamento de Dados


Tecnologia da Informação. Visão Geral sobre Informática

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Introdução à Programação de Computadores

Sistema de Computação

COMPILADORES E INTERPRETADORES

O modelo do computador

BCC202 - Estrutura de Dados I

OBI2009 Caderno de Tarefas

Introdução a Informática. Prof.: Roberto Franciscatto

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

Sistemas Numéricos bit / Byte BIT BYTE. Prof. Celso Candido ADS / REDES / ENGENHARIA

Figura 1 Busca Linear

ARQUITETURA DE COMPUTADORES - CONCEITUAL

Pesquisa em Memória Primária. Prof. Jonas Potros

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação I

1.1. Organização de um Sistema Computacional

Organização de Computadores

Figura 1 - O computador

A Unidade Central de Processamento é a responsável pelo processamento e execução de programas armazenados na MP.

O Primeiro Programa em Visual Studio.net

Análise Estruturada de Sistemas

RAID 1. RAID 0 2. RAID 1

Informática I. Aula 5. Aula 5-13/05/2006 1

Programação Estruturada e Orientada a Objetos. Fundamentos Orientação a Objetos

Complexidade de Algoritmos. Edson Prestes

Manual SAGe Versão 1.2 (a partir da versão )

Métodos de Pesquisa em Memória Primária

Computadores de Programação (MAB353)

ARQUITETURA DE COMPUTADORES

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Lição 1 Introdução à programação de computadores

20/09/2009 TRANSFORMANDO DADOS EM. PROCESSANDO DADOS George Gomes Cabral SISTEMAS NUMÉRICOS INFORMAÇÕES

Programação I. Introdução a Lógica de Programação

Calcular o montante de um capital de $1.000,00, aplicado à taxa de 4 % ao mês, durante 5 meses.

Cloud Computing. Edy Hayashida

INF1004 e INF1005: Programação 1. Introdução à Programação

Arquitetura e Organização de Computadores Aula 5 Consolidando Conhecimentos de Desempenho e Resumindo Prof. Julio Saraçol

3 Sistemas de Numeração:

FUNDAMENTOS DE HARDWARE COMO FUNCIONA UM PC? Professor Carlos Muniz

Algoritmo. Linguagem natural: o Ambígua o Imprecisa o Incompleta. Pseudocódigo: o Portugol (livro texto) o Visualg (linguagem) Fluxograma

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.

Arquitetura de Rede de Computadores

Entrada e Saída. Prof. Leonardo Barreto Campos 1

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Manual do sistema SMARsa Web

Curso Técnico em Redes

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

ARQUITETURA DE COMPUTADORES

Colorindo com Números Representação de Imagens

MC102 Algoritmos e Programação de Computadores 1ª Aula Introdução à Programação de Computadores

Algoritmos e Linguagem de Programação I

Arquitetura de Computadores. Sistemas Operacionais IV

Introdução. A Informação e sua Representação (Parte III) Universidade Federal de Campina Grande Departamento de Sistemas e Computação

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Metodologias de Desenvolvimento de Sistemas. Analise de Sistemas I UNIPAC Rodrigo Videschi

Métodos Os métodos de uma classe podem ser classificados como construtores, destrutores, funções ou procedimentos.

Deadlocks. Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO

HASHING. Katia Guimarães. 1

Transcrição:

Edson Prestes

Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável na prática.

Na maioria das vezes, a escolha de um algoritmo é feita através de critérios subjetivos como 1) facilidade de compreensão, codificação e depuração; 2) eficiencia na utilização dos recursos do computador e rapidez. A análise de algoritmo fornece uma medida objetiva de desempenho proporcional ao tempo de execução do algoritmo.

Por que analisar a eficiência de algoritmos se os computadores estão cada dia mais rápidos?

Tempo Tamanho do Problema

Tamanho da entrada complexidade

A eficiência de um algoritmo pode ser medida através de seu tempo de execução. É a melhor medida??? O tempo de execução não depende somente do algoritmo, mas do conjunto de instruções do computador, a qualidade do compilador, e a habilidade do programador.

O tempo de execução de um algoritmo para uma determinada entrada pode ser medido pelo número de operações primitivas que ele executa. Como esta medida fornece um nível de detalhamento grande convém adotar medidas de tempo assintótica.

Medidas de Complexidade Complexidade é também chamada esforço requerido ou quantidade de trabalho. Complexidade no pior caso : Considera-se a instância que faz o algoritmo funcionar mais lentamente; Complexidade média : Considera-se todas as possíveis instâncias e mede-se o tempo médio.

Medidas de Complexidade A complexidade pode ser calculada através do: Tempo de execução do algoritmo determinado pelas instruções executadas :quanto tempo é necessário para computar o resultado para uma instância do problema de tamanho n; Espaço de memória utilizado pelo algoritmo : quanto espaço de memória/disco é preciso para armazenar a(s) estrutura(s) utilizada(s) pelo algoritmo. O esforço realizado por um algoritmo é calculado a partir da quantidade de vezes que a operação fundamental é executada. Para um algoritmo de ordenação, uma operação fundamental é a comparação entre elementos quando à ordem.

Comparação entre Complexidades A complexidade exata possui muitos detalhes A escolha de um algoritmo é feita através de sua taxa de crescimento Esta taxa é representada através de cotas que são funções mais simples. A ordem de crescimento do tempo de execução de um algoritmo fornece uma caracterização simples de eficiência do algoritmo.

Comparação entre Complexidades Imagine um algoritmo com complexidade an 2 +bn+c desprezamos os termos de baixa ordem ignoramos o coeficiente constante Logo o tempo de execução do algoritmo tem cota igual a n 2, ou seja, O(n 2 ).

Comparação entre Complexidades O (1) : constante mais rápido, impossível O (log log n) : super-rápido O (log n) : logarítmico muito bom O (n) : linear é o melhor que se pode esperar se algo não pode ser determinado sem examinar toda a entrada O (n log n) : limite de muitos problemas práticos, ex.: ordenar uma coleção de números O (n 2 ) : quadrático O (n k ) : polinomial ok para n pequeno O (k n ), O (n!), O (n n ) : exponencial evite!

Comparação entre Complexidades A complexidade por ser vista como uma propriedade do problema. Logo, é possível obter uma medida independente do tratamento dado ao problema ou do caminho percorrido na busca da solução, portanto independente do algoritmo.

Comparação entre Complexidades Considere dois algoritmos A e B com tempo de execução O(n 2 ) e O(n 3 ), respectivamente. Qual deles é o mais eficiente?

Comparação entre Complexidades Considere dois programas A e B com tempos de execução 100n 2 e 5n 3, respectivamente, qual é o mais eficiente? Se considerarmos um conjunto de dados de tamanho n<20, o programa B será mais eficiente que o programa A. Entretanto, se o conjunto de dados é grande, a diferença entre os dois programas se torna bastante significativa e o programa A é preferido.

Comparação entre Complexidades Considere dois computadores : C 1 que executa 10 7 instruções por segundo (10 milhões); C 2 que executa 10 9 instruções por segundo (1 bilhão). Considere dois algoritmos de ordenação: A - linguagem de máquina para A cujo código exige 2n2 instruções para ordenar n números; B - linguagem de alto nível para B cujo código exige 50nlog n instruções. Quanto tempo C 1 e C 2 gastam para ordenar um milhão de números usando os algoritmos A e B?

Comparação entre Complexidades Com 10 milhões de números o algoritmo A demoraria 2,3 dias no computador C 2, enquanto que o algoritmo B levaria apenas 20 minutos. Analisar a complexidade de um algoritmo é utilizar adequadamente os recursos disponíveis!!!!

Comparação entre Complexidades Considere dois algoritmos A e B com complexidades 8n 2 e n 3, respectivamente, qual é o mais eficiente? Qual é o maior valor de n, para o qual o algoritmo B é mais eficiente que o algoritmo A? Os algoritmos têm igual desempenho quando n=8. Até n=7, B é mais eficiente que A.

Comparação entre Complexidades Um algoritmo tem complexidade 2n 2. Num certo computador A, em um tempo t, o algoritmo resolve um problema de tamanho 25. Imagine agora que você tem disponível um computador B 100 vezes mais rápido. Qual é o tamanho máximo do problema que o mesmo algoritmo resolve no mesmo tempo t? No computador A, a quantidade de instruções executadas é 2.(25) 2 No computador B, a quantidade de instruções executadas é 100.2.(25) 2 O tamanho do problema resolvido em B é 2n 2 = 100.2.(25) 2 n = 250.

Comparação entre Complexidades Problemas NP-Completos Não são conhecidos algoritmos eficientes que resolvam problemas NP- Completos. Eles possuem a característica de que se um deles puder ser resolvido de forma eficiente então todos os problemas desta classe terão solução eficiente Vários problemas NP-Completos são, a principio, semelhantes a problemas que têm algoritmos eficientes. Ciclo Euleriano x Ciclo Hamiltoniano Satisfabilidade 2-CNF x Satisfabilidade 3-CNF