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

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

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

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

Análise de Algoritmos

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

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

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

Complexidade de algoritmos Notação Big-O

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Introdução à linguagem C

Algoritmos e Estruturas de Dados I

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

1/50. Conceitos Básicos. Programa Básico

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

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

Conhecendo a Linguagem de Programação C

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

Aula 03 - Linguagem C

Programação de Computadores II

Disciplina de Algoritmos e Programação

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

Aula 07: Algoritmos de busca e Listas encadeadas

Programação: Vetores

Programação Estruturada

Disciplina: Introdução à Engenharia da Computação

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Algoritmos: tipos de dados, variáveis e expressões

Faculdade de Computação

Aula 13: Listas encadeadas (estruturas lineares)

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Programação I A Linguagem C. Prof. Carlos Alberto

Introdução à Computação MAC0110

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Linguagem C. André Tavares da Silva.

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Lição 4 Fundamentos da programação

Paradigmas de Linguagens

Análise de Algoritmos Estrutura de Dados II

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Linguagens de Programação

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C#

Aula teórica 4. Tema 3. Linguagem de Programação Java. Manipulação de informação simples (cont.)

Introdução a Programação de Jogos

Laboratório de Programação II

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Sintaxe da linguagem Java

Bits e operações. Sistemas de Computação

Princípios de Desenvolvimento de Algoritmos MAC122

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Programação Básica. Estrutura de um algoritmo

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

AULA 02 DADOS PRIMITIVOS E EXERCÍCIOS

Introdução à Programação

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

INTRODUÇÃO A LINGUAGEM C

BC1424 Algoritmos e Estruturas de Dados I Aula 02: Ponteiros, estruturas e alocação de memória

Teoria da computabilidade Indecidíveis Decidíveis

Teoria dos Grafos Aula 3

Estrutura de Programas e Tipos de Dados Simples

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

Linguagens de Programação Classificação

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Algoritmos e Estruturas de Dados. Prof. Marcelo Zorzan Profa. Melissa Zanatta

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

Transcrição:

MCTA028 Programação Estruturada Aula 02: Custos de um algoritmo e funções de complexidade Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 3Q-20106 1

Linguagem C: Tipos de dados 2

Linguagem C: Tipos de dados Tipos de dados primários. Tipos de dados derivados. Tipos definidos pelo usuário. (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 3

Linguagem C char tem 8 bits (não é 16 bits como em Java) não existe tipo booleano (usar int ou char): 0 falso 0 verdadeiro Na verdade C99 permite o uso de palavras true/false nos programas (mas o compilador os trata como os valores 1 e 0 de qualquer forma) tipos inteiros podem ser signed ou unsigned não tem tipo string: usa-se vetor de char 4

Linguagem C: Números inteiros (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 5

Linguagem C: Números reais (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 6

Linguagem C: Caracteres (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 7

Linguagem C: void (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 8

Tipos de dados (tipos.c) Size Size Size Size Size Size Size of of of of of of of char is 1 short is 2 int is 4 long is 8 float is 4 double is 8 long double is bytes bytes bytes bytes bytes bytes 16 bytes $ uname a Linux xxxxxxxxx 4.2.0 c9 #1 SMP x86_64 x86_64 x86_64 GNU/Linux 9

Executando um programa 10

$ gcc hello c world.c $./a.out $ gcc hello c world.c o hello c world.exe $./hello c world.exe $ echo $? 11

12

Especificadores de formato %c %s char string %i ou %d %f ou %lf inteiro float (promoção para double) Exemplo: printf("%3.2f\n", 1.234); printf("%.2f\n", 1234.678); 1.23 1234.68 13

Especificadores de formato The color: blue First number: 12345 Second number: 0025 Third number: 1234 Float number: 3.14 Hexadecimal: ff Octal: 377 Unsigned value: 150 Just print the percentage sign % 14

Especificadores de formato P = blue Q = 1234 R = 3.141590 15

Custo de um algoritmo e funções de complexidade Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG) 16

1995 2015 17

Medida do tempo de execução de um programa Algoritmos são encontrados em todas as áreas de Computação. O projeto de algoritmos é influenciado pelo estudo de seus comportamentos. Análise de algoritmos? 18

(1) Análise de um algoritmo particular Qual é o custo de usar um dado algoritmo para resolver um problema específico? Características que devem ser investigadas: Tempo de execução. Quantidade de memória. 19

(2) Análise de uma classe de algoritmos Qual é o algoritmo de menos custo possível para resolver um problema particular? Toda uma familia de algoritmos é investigada. Procura-se identificar um que seja o melhor possível. Colocam-se limites para a complexidade computacional dos algoritmos pertencentes à classe. 20

21

Custo de um algoritmo Se conseguirmos determinar o menor custo possível para resolver problemas de uma dada classe, então teremos a medida da dificuldade inerente para resolver o problema. Quando um algoritmo é igual ao menor custo possível, o algoritmo é ótimo para a medida de custo considerada. Podem existir vários algoritmos para resolver um mesmo problema. Se a mesma medida de custo é aplicada a diferentes algoritmos então é possível compará-los e escolher o mais adequado. 22

Fonte: http://hqwallbase.com/images/big/stairways-1514922.jpg 23

Medida de custo pela execução de um programa em uma plataforma real 24

(1) Medida de custo pela execução de um programa em uma plataforma real Tais medidas são bastante inadequadas e os resultados jamais devem ser generalizados: Os resultados são dependentes do compilador que pode favorecer algumas construções em detrimento de outras; Os resultados dependem de hardware; Quanto grandes quantidades de memória são utilizadas, as medidas de tempo podem depender deste aspecto. 25

(1) Medida de custo pela execução de um programa em uma plataforma real Tais medidas são bastante inadequadas e os resultados jamais devem ser generalizados: Os resultados são dependentes do compilador que pode favorecer algumas construções em detrimento de outras; Os resultados dependem de hardware; Quanto grandes quantidades de memória são utilizadas, as medidas de tempo podem depender deste aspecto. Apesar disso, há argumentos a favor de se obterem medidas reais de tempo: Exemplo: Quando há vários algoritmos distintos para resolver o problema; Assim, são considerados tanto os custos reais das operações como os custos não aparentes, tais como alocação de memória, indexação, carga, dentre outros. 26

Medida de custo por meio de um modelo matemático 27

28

(2) Medida de custo por meio de um modelo matemático 29

(2) Medida de custo por meio de um modelo matemático Usa um modelo matemático baseado em um computador idealizado. Deve ser especificado o conjunto de operações e seus custos de execuções. É mais usual ignorar o custo de algumas das operações e considerar apenas as mais significantes. Em algoritmos de ordenação: Consideramos o conjunto de comparações entre os elementos do conjunto a ser ordenado e ignoramos as operações aritméticas, de atribuição e manipulação de índices, caso existam. 30

Função de complexidade 31

Função de complexidade Para medir o custo de execução de um algoritmo, é comum definir uma função de custo ou função de complexidade f. Função de complexidade de tempo: mede o tempo necessário para executar um algoritmo para um problema de tamanho n. Função de complexidade de espaço: mede a memória necessária para executar um algoritmo para um problema de tamanho n. 32

Função de complexidade Para medir o custo de execução de um algoritmo, é comum definir uma função de custo ou função de complexidade f. Função de complexidade de tempo: mede o tempo necessário para executar um algoritmo para um problema de tamanho n. Função de complexidade de espaço: mede a memória necessária para executar um algoritmo para um problema de tamanho n. Utilizaremos f para denotar uma função de complexidade de tempo daqui para frente. Na realidade, f não representa tempo diretamente, mas o número de vezes que determinada operação (considerada relevante) é realizada. 33

Exemplo: Maior elemento Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[0...n-1], para n>=1 34

Exemplo: Maior elemento Seja f uma função de complexidade tal que de comparações entre os elementos de A. é o número Logo: 35

Exemplo: Maior elemento 36

Tamanho da entrada de dados A medida do custo de execução de um algoritmo depende principalmente do tamanho de entrada dos dados. É comum considerar o tempo de execução de um programa como uma função do tamanho de entrada. 37

Tamanho da entrada de dados A medida do custo de execução de um algoritmo depende principalmente do tamanho de entrada dos dados. É comum considerar o tempo de execução de um programa como uma função do tamanho de entrada. No caso da função para determinar o máximo, o custo é unifome (n-1) sobre todos os problemas de tamanho n. Já para um algoritmos de ordenação isso não ocorre: se os dados de entrada estiverem quase ordenados, então o algoritmo pode ter que trabalhar menos. 38

Melhor caso, pior caso e caso médio Melhor caso: Menor tempo de execução sobre todas as entradas de tamanho n. Pior caso: Maior tempo de execução sobre todas as entradas de tamanho n. Caso médio (caso esperado): Média dos tempos de execução de todas as entradas de tamanho n. Aqui supoe-se uma distribuição de probabilidades sobre o conjunto de entradas de tamanho n. Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG) 39

Exemplo: Busca de um registro Considere o problema de acessar os registros de um arquivo (cada registro tem chave única). O problema: Dada uma chave qualquer, localize o registro que contenha esta chave Considere o algoritmo de busca sequencial. 40

Exemplo: Busca de um registro 41

Exemplo: Busca de um registro 42

Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Quando o elemento procurado é o primeiro consultado 43

Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Pior caso: Quando o elemento procurado é o primeiro consultado Quando o elemento procurado é o último consultado 44

Exemplo: Busca de um registro Seja f uma função de complexidade tal que f(n) é o número de registros consultados. Melhor caso: Quando o elemento procurado é o primeiro consultado Pior caso: Quando o elemento procurado é o último consultado Caso médio: 45

Exemplo: Busca de um registro (caso médio) Consideremos que toda pesquisa recupera um elemento. Para recuperar o i-ésimo elemento são necessárias i comparações. 46

Exemplo: Busca de um registro (caso médio) Consideremos que toda pesquisa recupera um elemento. Para recuperar o i-ésimo elemento são necessárias i comparações. Seja a probabilidade de que o i-ésimo elemento seja procurado: Se cada elemento tiver a mesma probabilidade de ser escolhido que todos os outros, então Uma pesquisa examina aproximadamente metade dos elementos 47

Comparando programas 48

Comparação de programas Exemplo: O programa1 leva O programa2 leva vezes para ser executado. vezes para ser executa. Qual dos dois é o melhor? 49

Comparação de programas Exemplo: O programa1 leva O programa2 leva vezes para ser executado. vezes para ser executa. Qual dos dois é o melhor? Depende do tamanho do problema. Para n<50, o programa 2 é melhor Para n>50, o programa 1 é melhor 50

Comparação de programas 51

Comparação de funções de complexidade Introdução baseada nas aulas do Prof. Antonio A. F. Loureiro (UFMG) 52

(*) Fonte: http://algs4.cs.princeton.edu/14analysis/ 53

Atividade em aula 54

Atividade em aula 2 3 3.46 x 120 128.456000 55

Atividade em aula 56

Atividade em aula 6.00E+47 5.00E+47 4.00E+47 3.00E+47 2.00E+47 f1 f2 f3 f4 f5 1.00E+47 0 57

Atividade em aula 1.00E+50 1.00E+45 1.00E+40 1.00E+35 1.00E+30 1.00E+25 1.00E+20 1000000000000000 f1 f2 f3 f4 f5 10000000000 100000 1 58