Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos

Slides:



Advertisements
Apresentações semelhantes
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Advertisements

Estruturas de Controle
Estruturas de Repetição
Programação Orientada a Objetos – Parte II
Algoritmos de Ordenação
CÁLCULO DA INVERSA DA BASE
Algoritmos e Estrutura de Dados I
Introdução à Computação - Jorge Macêdo
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

Pesquisa em Memória Primária
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
HeapSort Filas de Prioridade – Heap
Medida do Tempo de Execução de um Programa
Medida do Tempo de Execução de um Programa
David Menotti Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
Pascal comandos iterativos: FOR WHILE REPEAT Matrizes (tabelas)
Linguagem C Estruturas de Controle de Fluxos
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
Aula T04 – BCC202 Análise de Algoritmos (Parte 2) Túlio Toffolo www
Algoritmos de Ordenação
Algoritmos de Ordenação
Algoritmos e Estruturas de Dados I – Estruturas de Controle de Fluxo
O Portal do Estudante de Computação
Introdução à Programação
Algoritmos e Estruturas de Dados II
Linguagem de Programação I Parte II
Linguagem de Programação I Parte III
Multiplicação de Matrizes
Construção de Algoritmos AULA 03
Desempenho, Método de Shell, Quicksort
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Introdução a Programação
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Algoritmo e Programação
Programação de PIC em C Exposição das funções básicas para
Introdução à complexidade de algoritmos Luiz Gonzaga da Silveira Junior.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo III Comandos de Controle.
Como analisar um algoritmo
Recursividade Profs. De Prog2 e Lab2.
Algoritmos.
CLASSIFICAÇÃO DE DADOS
ALGORITMIA. ALGORITMO Conjunto de instruções ou acções que ao serem executadas, permitirão realizar uma determinada tarefa.
Prof. Alessandro Gonçalves
Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Analise de Algoritmos e Notação Assintótica
Exercícios Análise de algoritmos & Ordenação
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Berilhes Borges Garcia Algoritmos Uma ferramenta para resolver um problema de computação bem- especificado (O espírito da computação) Exemplo: ordenação.
Sistemas de Controle III N8SC3
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Laço ou loop e repetição
ORDENAÇÃO EM TEMPO LINEAR
Troca de Mensagens Síncronas n Consequências do uso de comunicação assíncrona:  Um processo pode se adiantar muito em relação aos outros. Para sincronizar.
ALGORITMOS Profº Antonio Carlos Marcelino de Paula 1.
USP – ICMC – SSC SSC0300 2º Semestre 2015
Ordenação (Sorting) Ordenar é dispor os elementos de um conjunto numa ordem ascendente ou descendente. Problema: Dados n números, arranjá-los em ordem.
Análise e Complexidade de Algoritmos
Curso Programadores de Informática
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
UNIVERSIDADE FEDERAL DE MINAS GERAIS Exercícios de Revisão 1 Crisitano Arbex Valle Vinicius Fernandes dos Santos
Comportamento Assintótico
Transcrição da apresentação:

Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos

Técnicas de Análise de Algoritmos Determinar o tempo de execução de um programa pode ser um problema complexo – Ex: f(n) = 3n 2 + n log n + 42 Determinar a ordem do tempo de execução, sem preocupação com o valor da constante envolvida, pode ser uma tarefa mais simples – Ex: f(n) = O(n 2 ) Algoritmos e Estrutura de Dados II

Técnicas de Análise de Algoritmos A análise utiliza técnicas de matemática discreta, envolvendo contagem ou enumeração dos elementos de um conjunto: – manipulação de somas – produtos – permutações – fatoriais – coeficientes binomiais – solução de equações de recorrência Algoritmos e Estrutura de Dados II

Análise do Tempo de Execução Comandos de atribuição, leitura ou escrita: – O(1) Comando de decisão: – Tempo dos comandos dentro do condicional + tempo para avaliar a condição, que é O(1) Sequência de comandos: – Determinado pelo maior tempo de execução de qualquer comando da sequência (regra da soma) Algoritmos e Estrutura de Dados II

Análise do Tempo de Execução Anel (for ou while): – ( Tempo de execução do corpo do anel + tempo para avaliar condição (geralmente O(1)) ) – x número de iterações Procedimentos não recursivos: – Devem ser avaliados separadamente Partimos de procedimentos que não chamam outros Avaliamos então procedimentos chamadores Processo é repetido até chegar no programa principal Algoritmos e Estrutura de Dados II

Exemplo 1 void exemplo1(int n) { int i, a; a = 0; for (i = 0; i < n; i++) a += i; } Qual a função de complexidade para o número de atribuições à variável a? Qual a ordem de complexidade da função exemplo1? f(n) = 1 + n f(n) = O(n)  1 1 [0:n-1]  1

Exemplo 2 void exemplo2(int n) { int i, j, a = 0; for (i = 0; i < n; i++) for (j = n; j > i; j--) a += i + j; }  1 [0:n-1] [n:i+1]  1 Qual a função de complexidade para o número de atribuições à variável a? Algoritmos e Estrutura de Dados II

Exemplo 2 Algoritmos e Estrutura de Dados II

Exemplo 2 void exemplo2(int n) { int i, j, a = 0; for (i = 0; i < n; i++) for (j = n; j > i; j--) a += i + j; }  1 [0:n-1] [n:i+1]  1 Qual a função de complexidade para o número de atribuições à variável a? Qual a ordem de complexidade da função exemplo2? f(n) = (n 2 + n + 2) / 2 f(n) = O(n 2 )

Exemplo 3 Algoritmo de Ordenação – Seleciona o menor elemento do conjunto – Troca este com o primeiro elemento A[0] – Repita as duas operações acima com os n - 1 elementos restantes, depois com os n - 2, até que reste apenas um Qual a função de complexidade para o número de comparações em A? Algoritmos e Estrutura de Dados II

Exemplo 3 void Ordena(int* A, int n) { int i, j, min, x; for (i = 0; i < n-1; i++) { min = i; for (j = i + 1; j < n; j++) if (A[j] < A[min]) min = j; x = A[min]; A[min] = A[i]; A[i] = x; } Algoritmos e Estrutura de Dados II [0:n-2] [i+1:n-1]  1

Exemplo 3 Algoritmos e Estrutura de Dados II

Exemplo 3 Algoritmo de Ordenação – Seleciona o menor elemento do conjunto – Troca este com o primeiro elemento A[0] – Repita as duas operações acima com os n - 1 elementos restantes, depois com os n - 2, até que reste apenas um Qual a função de complexidade para o número de comparações em A? Qual a ordem de complexidade da função exemplo2? f(n) = (n 2 – n) / 2 f(n) = O(n 2 )

Exercício 1 // considere A, B e C vetores globais void p1(int n) { int i, j, k; for (i = 0; i < n; i++) for (j = 0; j < n; j++) { C[i][j] = 0; for (k = n-1; k >= 0; k--) C[i][j] += A[i][k] * B[k][j]; } Algoritmos e Estrutura de Dados II O que esse procedimento faz? Qual a sua função de complexidade? [0:n-1]  1 [n-1:0]  1

Multiplicação de matrizes Strassen em 1969 achou um algoritmo que resolve este problema em O(n ) Coppersmith-Winograd: O(n ) em 1990 Andrew Stothers: O(n ) em 2010 Virginia Williams: O(n ) em 2011 François Le Gall: O(n ) em 2014 – Baseado no método de Williams Algoritmos e Estrutura de Dados II

Exercício 2 void p2(int n) { int i, j, x, y; x = y = 0; for (i = 1; i <= n; i++) { for (j = i; j <= n; j++) x = x + 1; for (j = 1; j < i; j++) y = y + 1; } Algoritmos e Estrutura de Dados II Qual a função de complexidade de p2 em termos do número de atribuições?  [1:n] [i:n]  1 [1:i-1]  1

Exercício 3 void p3(n) { int i, j; for (i = 0; i < n; i++) { if (x[i] > 10) for (j = i+1; j < n; j++) x[j] = x[j] + 2; else x[i] = 1; j = n-1; while (j >= 0) { x[j] = x[j] - 2; j = j - 1; } Algoritmos e Estrutura de Dados II Qual a função de complexidade de p3 para o número de atribuições em x? [0:n-1] ? [i+1:n-1]  1 : [n-1:0]  1 Pior caso:

Exercício 3 void p3(n) { int i, j; for (i = 0; i < n; i++) { if (x[i] > 10) for (j = i+1; j < n; j++) x[j] = x[j] + 2; else x[i] = 1; j = n-1; while (j >= 0) { x[j] = x[j] - 2; j = j - 1; } Algoritmos e Estrutura de Dados II Qual a função de complexidade de p3 para o número de atribuições em x? Melhor caso: [0:n-1] ? [i+1:n-1]  1 : [n-1:0]  1