MC102 Algoritmos e Programação de Computadores



Documentos relacionados
BCC202 - Estrutura de Dados I

Análise de complexidade

ALGORITMO I VARIÁVEIS INDEXADAS

Recursividade. Túlio Toffolo BCC202 Aula 08 Algoritmos e Estruturas de Dados I

Estrutura de Dados Básica

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

MC Slide 13 Noções de eficiência e buscas

GFM015 Introdução à Computação Linguagem C / Introdução à Modularização de Programas (uso de subprogramas)

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Variáveis e estruturas de controlo. Introdução à Programação André L. Santos

EFICIÊNCIA DE ALGORITMOS E

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

Pesquisa Sequencial e Binária. Introdução à Programação SI2

Curso de C. Introdução by Arnaldo V. Moura e Daniel F. Ferber

Introdução à Programação. Recursão

Lista de Exercícios 05 Estruturas de Dados Homogêneas - Matrizes

Experimentos com a memória cache do CPU

Algoritmos de Busca em Tabelas

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

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

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

Princípios de funcionamento dos computadores

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

Java. Marcio de Carvalho Victorino

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

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Pesquisa Sequencial e Binária

COMPUTADOR SIMPLIFICADO E COMPUTADOR DIGITAL. Algoritmos e Programação APG0001

Implementando uma Classe e Criando Objetos a partir dela

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

Aula 1 Tipo Abstrato de Dados

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

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

Analise o código abaixo:

Introdução à Programação Bacharelado em Sistemas de Informação 3ª Lista de Exercícios - Solução Procedimentos e Funções

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

7. Estrutura de Decisão

Pesquisa Sequencial e Binária

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

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

Algoritmo e Programação

Sistemas Computacionais II Professor Frederico Sauer

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

3. Arquiteturas SIMD. 3.1 Considerações iniciais

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

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

José Romildo Malaquias

Programação Paralela e Distribuída (DCC/UFRJ)

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

VARIÁVEIS INDEXADAS VETORES E MATRIZES

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

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

INF 1620 P1-10/04/02 Questão 1 Nome:

UNIVERSIDADE FEDERAL DE UBERLÂNDIA FACULDADE DE ENGENHARIA ELÉTRICA COLEGIADO DO CURSO DE GRADUAÇÃO EM ENGENHARIA ELÉTRICA/ENG.

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Busca. Pesquisa sequencial

Introdução à Programação

9 Comandos condicionais

INF 1010 Estruturas de Dados Avançadas

Curso de Linguagem C

Algoritmos e Linguagem de Programação I

Aula 3 Alocação Dinâmica

PROGRAMA DE DISCIPLINA

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Organização de Computadores

Algoritmos e Programação de Computadores I. Prof. Eduardo

MC-102 Aula 17 Strings e Matrizes

A FÓRMULA DE CONVERSÃO ENTRE AS UNIDADES É: F = 1.8 C

Aula 06 - Funções. O que é uma Função - Comando return - Protótipos de Funções - Tipos de Funções - Escopo de Variáveis - Passagem de parâmetros

Programação Estruturada

INF 1010 Estruturas de Dados Avançadas

Orientação a Objetos

2ª Lista de Exercícios

Capítulo 2: Introdução à Linguagem C

Disciplina de Projetos e Análise de Algoritmos

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

Projeto de Banco de Dados

PROGRAMA DE DISCIPLINA

Índice. Capítulo 2 Estrutura de Dados sequencial com armazenamento sequencial

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB

INF 1005 Programação I

Introdução a PHP (Estruturas de Controle)

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

André Vignatti DINF- UFPR

Linguagem de Programação I. Aula 05 Linguagem C

Algoritmos e Programação Estruturada

Lista de Exercícios 06 Estruturas de Dados Homogêneas - Matrizes

e à Linguagem de Programação Python

MC-102 Aula 01. Instituto de Computação Unicamp

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Introdução à Organização de Computadores. Execução de Programas Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007

Comandos Sequenciais if else, e Switch

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

Componentes da linguagem C++

Transcrição:

MC102 Algoritmos e Programação de Computadores Instituto de Computação UNICAMP Primeiro Semestre de 2015

Roteiro 1 Fundamentos de análise de algoritmos 2 Cálculo da função de custo 3 Exercícios Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 2 / 23

Fundamentos de análise de algoritmos Como analisar um algoritmo: Contar o número de operações realizadas pelo algoritmo para uma dada entrada. Expressar este número em função do tamanho da entrada (n). Exemplos de funções de custo de um algoritmo: f1 (n) = 5n f 2 (n) = 2n 2 f 3 (n) = n log n Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 4 / 23

Fundamentos de análise de algoritmos A análise é sempre realizada em relação a um dado modelo computacional. No nosso caso, vamos considerar um modelo simplificado: O computador tem um único processador. Todos os acessos à memória têm o mesmo custo. Instruções são executadas sequencialmente. Não há instruções nem operações paralelas. Todas as instruções têm custo similar (uma unidade). Geralmente estamos interessados em medir o uso dos recursos do sistema (tempo de processamento, uso de memória, largura de banda, consumo de energia, etc). Nesta aula vamos considerar como custo computacional apenas o tempo de processamento de um programa. Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 5 / 23

Fundamentos de análise de algoritmos Para exemplificar a diferença entre funções de custo, suponha: Um computador com 1GHz. Uma instrução executada a cada ciclo da máquina (1GHz = 10 9 instruções por segundo). Considere, por exemplo, que o tamanho da entrada é n = 1000000: Algoritmo com custo f (n) = n: O computador gastará aproximadamente 1 milissegundo. Algoritmo com custo f (n) = n log n: O computador gastará aproximadamente 6 milissegundos. Algoritmo com custo f (n) = n n: O computador gastará aproximadamente 1 segundo. Algoritmo com custo f (n) = n 2 : O computador gastará aproximadamente 17 minutos. Algoritmo com custo f (n) = n 3 : O computador gastará aproximadamente 32 anos. Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 6 / 23

Considere o número de atribuições realizadas por esta função: void troca(int *x, int *y) { int aux; } aux = *x; *x = *y; *y = aux; f (n) = 2 + 3 = 5 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 8 / 23

Considere o custo de inicialização de um vetor: for (i = 0; i < n; i++) v[i] = 0; i = 0: f (n) = 1 i < n: f (n) = n + 1 i++: f (n) = n v[i] = 0: f (n) = n Total: f (n) = 3n + 2 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 9 / 23

Considere o número de multiplicações realizadas por esta função: int fatorial(int n) { int fat = 1; for (i = 2; i <= n; i++) fat = fat * i; } return fat; n f (n) = 1 = n 1 i=2 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 10 / 23

Considere o número de somas entre elementos das matrizes: for (i = 0; i < n; i++) for (j = 0; j < n; j++) c[i][j] = a[i][j] + b[i][j]; f (n) = 1 = n = n 2 i=0 j=0 i=0 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 11 / 23

Considere o número de muliplicações entre elementos das matrizes: for (i = 0; i < n; i++) for (j = 0; j < n; j++) { c[i][j] = 0; for (k = 0; k < n; k++) c[i][j] = c[i][j] + (a[i][k] * b[k][j]); } f (n) = 1 = n = n 2 = n 3 i=0 j=0 k=0 i=0 j=0 i=0 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 12 / 23

Considere o número de chamadas à função troca usadas para inverter a ordem dos elementos de um vetor: for (i = 0; i < n/2; i++) troca(a[i], a[n - i - 1]); f (n) = n/2 1 i=0 1 = n/2 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 13 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 0; i < n; i++) for (j = 0; j < n; j++) soma++; f (n) = 1 = n = n 2 i=0 j=0 i=0 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 14 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 0; i < n; i++) for (j = 0; j < i; j++) soma++; i 1 f (n) = 1 = i = i=0 j=0 i=0 n(n 1) 2 = n2 n 2 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 15 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 0; i < n; i++) for (j = 0; j < n * n; j++) soma++; f (n) = i=0 n 2 1 j=0 1 = n 2 = n 3 i=0 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 16 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 1, k = 1; i <= n; i++, k = k * 2) for (j = 1; j <= k; j++) soma++; f (n) = n i=1 2 (i 1) j=1 1 = n 2 (i 1) = 2 n 1 i=1 Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 17 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 1, k = 2; i <= n; i++, k = k * 2) for (j = 1; j <= n/k; j++) soma++; n/2 n i f (n) = 1 = i=1 j=1 n n 2 i i=1 n i=1 n 2 i = n n i=1 1 2 i n i=1 1 2 i = n Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 18 / 23

Considere o número de execuções do comando soma++: soma = 0; for (i = 2; i <= n; i++) for (j = 1; j <= n/i; j++) soma++; f (n) = n i=2 n/i j=1 1 = n n i i=2 n i=2 n i = n n i=2 1 i n ln n Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 19 / 23

Exercícios for (i = 0; i < n; i++) for (j = 0; j < n; j++) { if (i < j) X(n, i, j); if (i == j) for (k = j + 1; k < n; j++) Y(n, i, j); else Z(n, i, j); } Considerando o trecho de código acima, responda: Quantas vezes a função X é executada? Quantas vezes a função Y é executada? Quantas vezes a função Z é executada? Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 21 / 23

Exercícios for (i = 0; i < n; i++) for (j = i + 1; j < n; j++) { teste(vetor, i, j); } for (k = j + 1; k < n; k++) for (l = k + 1; l < n; l++) teste(vetor, k, l); Considerando o trecho de código acima, calcule: Um limitante inferior para o número de execuções da função teste. Um limitante superior para o número de execuções da função teste. Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 22 / 23

Exercícios for (i = 0; i < n; i++) { for (j = 0; j < i; j++) for (k = j + 1; k < i; k++) teste(vetor, j, k); } for (j = i; j < n; j++) for (k = j + 1; k < n; k++) teste(vetor, j, k); Considerando o trecho de código acima, calcule: Um limitante inferior para o número de execuções da função teste. Um limitante superior para o número de execuções da função teste. Instituto de Computação (UNICAMP) MC102 Primeiro Semestre de 2015 23 / 23