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

Documentos relacionados
01 Análise de Algoritmos (parte 2) SCC201/501 - Introdução à Ciência de Computação II

04 Recursão SCC201/501 - Introdução à Ciência de Computação II

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

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

07 Ordenação em Memória Interna (parte 2) quicksort SCC201/501 - Introdução à Ciência de Computação II

Complexidade de Algoritmos

Análise de algoritmos

Análise de algoritmos. Parte I

Análise de algoritmos. Parte I

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

Projeto e Análise de Algoritmos. Introdução. Prof. Ademir Constantino Universidade Estadual de Maringá Departamento de Informática

Análise e Projeto de Algoritmos

13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II

Teoria da computabilidade Indecidíveis Decidíveis

Preliminares. Profa. Sheila Morais de Almeida. agosto

ESTRUTURAS DE DADOS E ALGORITMOS APRESENTAÇÃO DO CURSO E INTRODUÇÃO

05 Grafos: ordenação topológica SCC0503 Algoritmos e Estruturas de Dados II

Complexidade de Tempo e Espaço

Aula 3: Algoritmos: Formalização e Construção

Análise de algoritmos Parte I

Programação Estruturada

MCTA001 Algoritmos e Estruturas de Dados I Apresentação e exercícios básicos

Algoritmos, Estruturas de Dados e Tipos Abstratos de Dados (TADs)

Análise de algoritmos

Análise e Complexidade de Algoritmos

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

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

COMPLEXIDADE DE ALGORITMOS

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Algoritmos e Estrutura de Dados. Aula 01 Apresentação da Disciplina e Introdução aos Algoritmos Prof. Tiago A. E. Ferreira

04 Grafos: caminhos e coloração SCC0503 Algoritmos e Estruturas de Dados II

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Processamento e Análise de Imagens

Apresentação SCC0204 Programação Orientada a Objetos

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

SCC-501 Introdução à Ciência de Computação II

COMPLEXIDADE DE ALGORITMOS COMPLEXIDADE DE ALGORITMOS

01 Grafos: parte 1 SCC0503 Algoritmos e Estruturas de Dados II

Análise e Técnicas de Algoritmos

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

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

Universidade Federal de Alfenas

SCC-201 Introdução à Ciência de Computação II

Como modelar o comportamento de um sistema? MAB-515

SCC Introdução à Teoria da Computação

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

Introdução. Estrutura de Dados II Prof Jairo Francisco de Souza

Realce de imagens parte 1: operações pontuais SCC0251 Processamento de Imagens

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II

15/03/2018. Professor Ariel da Silva Dias Algoritmo e Contagem de Instruções. Prof. Ariel da Silva Dias -

Algoritmos, Estruturas de Dados e Tipos Abstratos de Dados (TADs)

CONCEITOS DE LINGUAGENS DE PROGRAMAÇÃO

Linguagens de Programação

SERVIÇO PÚBLICO FEDERAL MINISTÉRIO DA EDUCAÇÃO E DO DESPORTO CENTRO FEDERAL DE EDUCAÇÃO TECNOLÓGICA DE MINAS GERAIS CEFET-MG UNIDADE DE ENSINO

ANÁLISE DE COMPLEXIDADE DOS ALGORITMOS

Introdução a Computação

O Que Veremos. Introdução. Introdução. Definindo Desempenho. Definindo Desempenho. Avaliando e Compreendendo o Desempenho

Introdução à Programação Estruturada Parte 2. Material da Prof. Ana Eliza

Prof. Eliezer Soares Flores 1 / 22

Pra início de conversa... O que é um algoritmo? Exemplos de algoritmos. Como podemos descrever algoritmos? Como podemos descrever algoritmos?

Algoritmos Computacionais

Análise e Projeto de Algoritmos

GFM015 Introdução à Computação. Plano de Curso e Introdução. Ilmério Reis da Silva UFU/FACOM

Algoritmos e Estrutura de Dados. Algoritmos Prof. Tiago A. E. Ferreira

Análise de algoritmos Parte I

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

Web site. Profa. Patrícia Dockhorn Costa.

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Estruturas de Dados 2

Estrutura e Funcionamento dos Computadores (Conceitos Básicos)

Aula 06 - Máquina Multinível e Von Neumann

Classificação das linguagens de programação

Compiladores. Eduardo Ferreira dos Santos. Fevereiro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 38

14 Projeto de Algoritmos: paradigmas SCC201/501 - Introdução à Ciência de Computação II

Teoria da Computação. Computabilidade e complexidade computacional

SCC-5832 Teoria da Computação

Lógica de Programação, Algoritmos e Estruturas de Dados

Fundamentos de Programação 1

Sistema Computacional

Projeto e Análise de Algoritmos

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

DISCIPLINA: Programação de Computadores I

MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA INSTITUTO FEDERAL DO NORTE DE MINAS GERAIS CAMPUS MONTES CLAROS 1 PERÍODO

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

Introdução a Programação de Jogos

Introdução à Programação Aula 01. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Algoritmos e Técnicas de Programação. Professora Luciana Faria

FUNDAÇÃO UNIVERSIDADE FEDERAL DO VALE DO SÃO FRANCISCO

Aula 02: Custos de um algoritmo e funções de complexidade

O que é um sistema distribuído?

Complexidade de algoritmos Notação Big-O

Aula 11. Prof. Laura Silva de Assis. Engenharia da Computação. CEFET/RJ - Centro Federal de Educação Tecnológica Celso Suckow da Fonseca

Interfaces e Classes Internas

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

Programação. Module Introduction. Cap. 1 Fundamentos de Computadores

Informática I. Aula 1. Objetivo da disciplina

Sistemas de Informação Campus de Três Lagoas

1

Transcrição:

01 Análise de Algoritmos (parte 1) SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 1 / 21

Sumário 1 Algoritmos 2 Eciência O que é eciência? Análise Experimental Análise de Algoritmos 3 Bibliograa Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 2 / 21

Algoritmos Um algoritmo corresponde a uma descrição de um padrão de comportamento, expresso em termos de um conjunto nito de ações (Dijkstra, 1971 citado por Ziviani, 2004). Ao executarmos a operação a + b percebemos um padrão de comportamento, mesmo para valores diferentes de a e b. Segundo Cormen et al. (2002): informalmente, um algoritmo é um procedimento computacional bem denido que toma um conjunto de valores como entrada e produz algum conjunto de valores como saída. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 3 / 21

O que é importante? Quais características importantes em um algoritmo/software? Performance ponto chave de qualquer software. Simplicidade um algoritmo simples é mais fácil de ser implementado corretamente; por consequência há menor probabilidade de obter erros. Clareza deve ser escrito de forma clara e documentada para facilitar a manutenção. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 4 / 21

O que é importante? Segurança deve ser seguro. Funcionalidade deve possuir diversas funcionalidades. Modularidade permite melhor manutenção, reuso, etc. Interface amigável fundamental para a maior parte dos usuários. Corretude... Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 5 / 21

Algoritmos: corretude Segundo Cormen et al. (2002): um algoritmo é dito correto se, para cada instância de entrada, ele pára com a saída correta (ou informa que não há solução para aquela entrada. deseja-se que um algoritmo termine e seja correto Um algoritmo correto sempre termina? E se eu oferecer um algoritmo correto que permite obter uma solução em 3 anos? Problema intratável: não existe um algoritmo que solucione com demanda de recursos e tempo razoável. Problemas para os quais não se conhece solução eciente: N P-difícil, N P-completo Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 6 / 21

Sumário 1 Algoritmos 2 Eciência O que é eciência? Análise Experimental Análise de Algoritmos 3 Bibliograa Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 7 / 21

Eciência Computadores são muito rápidos atualmente No entanto, problemas crescem mais rapido do que a velocidade do computador É muito importante levar em consideração a eciência de um algoritmo ao desenvolver software: alguns programas executam instantaneamente alguns programas executam de um dia para o outro, alguns programas podem executar por séculos. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 8 / 21

Um problemas e muitas estratégias e soluções Temos um mapa rodovíario e nossa meta é determinar a menor rota de um local a outro. O numero de rotas pode ser enorme. Diversas estratégias podem ser utilizadas para obter a menor rota. Como garantir uma boa rota? Garantir a corretude do algoritmo! Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 9 / 21

Eciência Uma das perguntas comuns em entrevista de emprego do Google: Qual a maneira mais eciente de ordenar um milhão de inteiros de 32 bits? É importante conseguir relacionar classes de problemas e algoritmos com a eciência com base no tempo de execução. Para conhecer a resposta é preciso: denir eciente, denir uma metodologia padronizada para medir eciência, e comparar a eciência entre os algoritmos. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 10 / 21

Eciência A eciência pode ser associada aos recursos computacionais: a quantidade de espaço de armazenamento que utiliza, a quantidade de tráfego que gera em uma rede de computadores, a quantidade de dados que precisam ser movidos do disco ou para o disco. No entanto para a maior parte dos problemas a eciência está relacionada ao tempo de execução em função do tamanho da entrada a ser processada. Objetivo desse tópico da disciplina ser capaz de, dado um problema, mapea-lo em uma classe de algoritmos e encontrar a melhor escolha entre os algoritmos, com base em sua eciência. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 11 / 21

Eciência: análise experimental Computar o tempo total de execução de um programa #include <stdio.h> #include <time.h> int main (void) { time_t t1, t2, total; t1 = time(null); // retorna hora atual do sistema /* algoritmo */ t2 = time(null); total = difftime(t2,t1); // retorna a diferenca t2-t1 printf("\n\ntotal: %ld seg.\n", total); return 0; } Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 12 / 21

Gráco da análise experimental Se realizarmos diversos experimentos e computarmos o tempo para entradas diferentes, poderemos traçar um gráco como abaixo no eixo x está o tamanho da entrada no eixo y está o tempo em milisegundos que o algoritmo demora para processar a entrada Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 13 / 21

Eciência: análise experimental Desvantagens e limitações: é preciso realmente implementar e testar o algoritmo com diversas entradas diferentes a análise será feita por um conjunto limitado de dados o tempo dependerá de diversos fatores: hardware, sistema operacional, linguagem de programação, compilador, etc. Analise a armação abaixo Desenvolvi um novo algoritmo chamado TripleX que leva 14,2 segundos para processar 1.000 números, enquanto o método SimpleX leva 42,1 segundos. você trocaria o SimpleX que já roda na sua empresa pelo TripleX? há vários fatores envolvidos (acima) e mais: o TripleX também é mais rápido para processar quantidades maiores que 1.000 números? Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 14 / 21

Sumário 1 Algoritmos 2 Eciência O que é eciência? Análise Experimental Análise de Algoritmos 3 Bibliograa Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 15 / 21

Eciência: passos básicos e tamanho da entrada Abordagem O número de passos básicos necessários em função do tamanho da entrada que o algoritmo recebe. descorrelaciona a performance da máquina da performance do algoritmo. reduz a análise ao desempenho em função do tamanho da entrada. Tamanho da entrada? Depende do problema, mas geralmente é relativo ao número de elementos da entrada que são processados pelo algoritmo o número de elementos em um arranjo, lista, árvore, etc. o tamanho de um inteiro que é passado por parâmetro. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 16 / 21

Eciência: passos básicos e tamanho da entrada Passos básicos? Se referem às operações primitivas utilizadas pela máquina: operações aritméticas, comparações, chamadas à funções, retornos de funções, etc. Assumiremos o tamanho da entrada como sendo n cada operação leva aproximadamente o mesmo tempo constante. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 17 / 21

Eciência: TripleX vs. SimpleX TripleX : para uma entrada de tamanho n o algoritmo realiza n 2 + n operações. em termos de função, t(n) = n 2 + n. SimpleX : para uma entrada de tamanho n o algoritmo realiza 2000n operações. em termos de função, s(n) = 2000 n. Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 18 / 21

Eciência: TripleX vs. SimpleX Calculando o número de operações em função da entrada: n 1 10 100 1.000 10.000 t(n) = n 2 + n s(n) = 2000 n Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 19 / 21

Eciência: TripleX vs. SimpleX Calculando o número de operações em função da entrada: n 1 10 100 1.000 10.000 t(n) = n 2 + n 2 110 10.100 1.001.000 100.010.000 s(n) = 2000 n 2.000 20.000 20.000 2.000.000 20.000.000 Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 20 / 21

Bibliograa CORMEN, T.H. et al. Algoritmos: Teoria e Prática (Caps. 13). Campus. 2002. ZIVIANI, N. Projeto de algoritmos: com implementações em Pascal e C (Cap. 1). 2.ed. Thomson, 2004. FEOFILOFF, P. Minicurso de Análise de Algoritmos, 2010. Disponível em: http://www.ime.usp.br/~pf/livrinho-aa/. DOWNEY, A.B. Analysis of algorithms (Cap. 2), Em: Computational Modeling and Complexity Science. Disponível em: http://www.greenteapress.com/compmod/html/book003.html ROSA, J.L. Notas de Aula de Introdução a Ciência de Computação II. Universidade de São Paulo. Disponível em: http://coteia.icmc.usp.br/mostra.php?ident=639 Moacir Ponti Jr. (ICMCUSP) 01Análise de Algoritmos (1) 2010/2 21 / 21