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



Documentos relacionados
Análise de complexidade

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

Complexidade de Algoritmos. Edson Prestes

Pesquisa Sequencial e Binária

BCC202 - Estrutura de Dados I

Figura 1 Busca Linear

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

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

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

Resolução de problemas e desenvolvimento de algoritmos

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

EFICIÊNCIA DE ALGORITMOS E

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

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

Árvores Binárias de Busca

FACULDADE DE IMPERATRIZ - FACIMP BACHARELADO EM SISTEMAS DE INFORMAÇÃO ESTRUTURA DE DADOS 2. Vieira Lima Junior. Everson Santos Araujo

1. NÍVEL CONVENCIONAL DE MÁQUINA

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

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Universidade Federal de Alfenas

INF 1010 Estruturas de Dados Avançadas

ICC Introdução para JavaScript

2. Representação Numérica

Pointer Jumping. odg(v) e idg(v): graus de saída e entrada do vértice v V. um vértice r tal que. O vértice r é dita raíz de T

Introdução às Linguagens de Programação

3 Sistemas de Numeração:

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

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

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

Estrutura de Dados Básica

2ª Lista de Exercícios

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

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

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

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Processamento da Informação Teoria. Algoritmos e Tipos de dados

Algoritmos de Busca em Tabelas

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

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

Linguagens Livres de Contexto e Autômatos a Pilha (Push- Down) Um Modelo de Computação de Força Intermediária. Gramática Livre de Contexto

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

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

Tutorial de Matlab Francesco Franco

Algoritmos de pesquisa. Tabelas de dispersão/hash

1 O que é um computador? Definição uma máquina que lê dados, efectua cálculos e fornece resultados.

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

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

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

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

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

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

Fundamentos de Sistemas Operacionais

OBI2014 Caderno de Tarefas

Computadores de Programação (MAB353)

Somatórias e produtórias

5. EXPERIÊNCIAS E ANÁLISE DOS RESULTADOS Os Programas de Avaliação

Árvores de Suporte de Custo Mínimo

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

COMPILADORES E INTERPRETADORES

Análise de Algoritmos

Orientação a Objetos

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v /15

Organização de Computadores

Organização e Arquitetura de Computadores I. de Computadores

Notas da Aula 17 - Fundamentos de Sistemas Operacionais

Análise e Complexidade de Algoritmos

O modelo do computador

Árvore Binária de Busca

Arquiteturas RISC. (Reduced Instructions Set Computers)

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

OTIMIZAÇÃO VETORIAL. Formulação do Problema

A integral também é conhecida como antiderivada. Uma definição também conhecida para integral indefinida é:

Algoritmo e Programação

Gerenciamento de Projetos Modulo II Ciclo de Vida e Organização do Projeto

Introdução à Lógica de Programação

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

Disciplina de Projetos e Análise de Algoritmos. Aula 1 - Apresentação aos Algoritmos Computacionais

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

PARA A CONSTRUÇÃO DOS GRÁFICOS

Autómatos Finitos Determinísticos

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

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

Componentes da linguagem C++

Sobre o Professor Dr. Sylvio Barbon Junior

Computadores e Sistemas de Informação. Bases de Dados Relacionais (linguagem SQL)

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

Informática no Ensino de Matemática Prof. José Carlos de Souza Junior

Uma lei que associa mais de um valor y a um valor x é uma relação, mas não uma função. O contrário é verdadeiro (isto é, toda função é uma relação).

Busca. Pesquisa sequencial

Introdução ao Matlab. 1 Algumas regras e comandos do Matlab. 3 de março de Docente Responsável : Prof. Dr. Antônio C. Roque

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

Aula 03 Limite assintótico para a ordenação, Ordenação em tempo linear

Tópico 11. Aula Teórica/Prática: O Método dos Mínimos Quadrados e Linearização de Funções

Recursão em Listas. Universidade Federal de Uberlândia - UFU Faculdade de Computação - FACOM Lista de exercícios de Programação Funcional

Disciplina de Banco de Dados Introdução

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

Prof. Esp. Adriano Carvalho

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Transcrição:

Sistemas Distribuídos: Princípios e Algoritmos Introdução à Análise de Complexidade de Algoritmos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.ufma.br 20 de agosto de 2012 Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 1 / 30

Agenda 1 Medindo Tempo de Execução 2 Classes de Complexidade 3 Definição e Manipulação da Notação Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 2 / 30

Medindo Tempo de Execução Medindo Tempo de Execução Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 3 / 30

Medindo Tempo de Execução Introdução à Complexidade Este conhecimento permite identificar os algoritmos mais eficientes para resolver vários problemas encontrados com frequência; É muito importante no desenvolvimento de softwares de alta qualidade; A notação assintótica permite comparar a eficiência de algoritmos de forma independente de diferenças de hardware nos quais eles são executados ou de linguagens de programação nas quais eles são implementados. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 4 / 30

Medindo Tempo de Execução Ordenação por Seleção void selecao (int[] A) { int maxposition, temp, i, j; for (i = A.length-1; i>0; i--) { maxposition = i; for (j = 0; j < i; j++) { if (A[j] > A[maxPosition]) { maxposition = j; } } // troca A[i] com A[maxPosition] temp = A[i]; A[i] = A[maxPosition]; A[maxPosition] = temp; } } Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 5 / 30

Medindo Tempo de Execução Ordenação por Seleção: tempo de execução para 2000 inteiros (ms) Tipo de Computador Tempo microcomputador doméstico 51,915 estação de trabalho 11,508 minicomputador 2,382 mainframe 0,431 supercomputador 0,087 Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 6 / 30

Medindo Tempo de Execução Algumas Considerações... Os tempos de execução do algoritmo também variam de acordo com a linguagem de programação utilizada; Mesmo utilizando uma única linguagem, diferentes compiladores gerarão diferentes instruções em linguagem de máquina, gerando tempos de execução diferentes; Algoritmos consomem recursos (como tempo e espaço) que depende do tamanho do problema a ser resolvido; Chamemos de n o tamanho do problema. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 7 / 30

Medindo Tempo de Execução Ordenação por Seleção: variando n (ms) Tamanho vetor (n) Comp Doméstico Estação Trab 125 12,5 2,8 250 49,3 11,0 500 195,8 43,4 1000 780,3 172,9 2000 3114,9 690,5 Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 8 / 30

Medindo Tempo de Execução Representação Gráfica dos Resultados Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 9 / 30

Medindo Tempo de Execução Considerações As curvas possuem a forma f(n) = an 2 +bn+c e a diferença entre elas são as constantes a,b,c; Se implementarmos o mesmo algoritmo em diferentes linguagens e executarmos em outras máquinas ele continuará a ter um comportamento quadrático em função do tamanho do vetor; Na análise de complexidade procuramos descobrir a curva que caracteriza o tempo de execução em função do tamanho do problema; Desprezaremos as constantes e termos não dominantes; Para a notação-o, a função f(n) = an 2 +bn+c é dita O(n 2 ): Focamos no termo dominante (an 2 ) e ignoramos o resto (bn+c); ignora-se também a constante a. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 10 / 30

Medindo Tempo de Execução Contribuição do Termo n 2 n f(n) an 2 n 2 : % total 125 2,8 2,7 94,7 250 11,0 10,8 98,2 500 43,4 43,1 99,3 1000 172,9 172,4 99,7 2000 690,5 689,6 99,9 Tabela: Considerando a = 0,0001724, b = 0,0004 e c=0,1 Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 11 / 30

Classes de Complexidade Classes de Complexidade Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 12 / 30

Classes de Complexidade Classes de Complexidade Comuns Nome Notação-O constante O(1) logaritmo O(log n) linear O(n) nlogn O(nlogn) quadrática O(n 2 ) cúbica O(n 3 ) exponencial O(2 n ) exponencial O(10 n ) Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 13 / 30

Classes de Complexidade Exemplo Dado um algoritmo A, executado um computador de 1 MIPS, quanto tempo leva para calcular uma solução para diversos tamanhos do problema? Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 14 / 30

Classes de Complexidade Convertendo os Resultados... Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 15 / 30

Classes de Complexidade Necessidade Mais Usual Que tamanho n pode assumir para que o algoritmo A possa ser executado em um ano ou uma semana ou um dia? Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 16 / 30

Classes de Complexidade Considerações sobre as Classes de Complexidade Se pudermos substituir um algoritmo linear A por um algoritmo logarítmico B, um problema que levaria uma hora para ser solucionado por A levaria apenas 31,75 micro-segundos para que B o solucionasse... Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 17 / 30

Classes de Complexidade Pior Caso, Caso Médio e Melhor Caso Nem sempre um algoritmo leva o mesmo tempo para resolver problemas de um dado tamanho, independentemente de seus dados de entrada; Isto leva à necessidade de analisarmos o melhor caso, pior caso e o caso médio da execução do algoritmo; O QuickSort, por exemplo, custa em média O(nlogn) mas seu pior caso é O(n 2 ). Pior caso do Quicksort: vetor já ordenado: particionamento gerará uma região com n 1 elementos e outra com apenas 1 elemento. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 18 / 30

Classes de Complexidade Lembrando o Funcionamento do QuickSort Dividir: O vetor A[p..r] é particionado em dois sub-vetores A[p..q] e A[q +1..r], onde cada elemento de A[p..q] é menor ou igual a qualquer elemento de A[q +1..r]. Conquistar: Os sub-vetores A[p..q] e A[q + 1..r] são ordenados por chamadas recursivas a QuickSort. Combinar: os vetores são ordenados no próprio vetor A, não é necessário trabalho adicional para combiná-los. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 19 / 30

Classes de Complexidade Alguns Exemplos: Algoritmos de Pesquisa Algoritmo Complexidade busca sequencial O(n) busca binária O(log n) tabela de espalhamento a O(1) árvore binária de busca O(log n) a sob certas condições: colisões Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 20 / 30

Classes de Complexidade Alguns Exemplos: Algoritmos de Ordenação Algoritmo Complexidade Seleção, Inserção O(n 2 ) QuickSort, HeapSort, MergeSort O(n log n) RadixSort a O(n) a ordenação sem comparações entre os elementos de entrada. Exige que os elementos estejam em uma faixa 1 a k, para algum inteiro k. Quando k = O(n), a ordenação é executada em tempo linear. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 21 / 30

Classes de Complexidade Outros Exemplos Algoritmo Complexidade problema do caixeiro viajante a exponencial jogos como xadrez exponencial algoritmo simples para a multiplicação O(n 3 ) de duas matrizes quadradas a dado um mapa com cidades e o custo para viajar entre elas (quando possível), encontrar a rota de menor custo que faça o caixeiro passar exatamente uma vez em cada cidade Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 22 / 30

Definição e Manipulação da Notação Definição e Manipulação da Notação Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 23 / 30

Definição e Manipulação da Notação Definição da Notação-O Dizemos que f(n) é O(g(n)) se existem constantes positivas K e n 0 tal que f(n) g(n) para todo n n 0. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 24 / 30

Definição e Manipulação da Notação Definição da Notação-O Figura: Θ(), O(), Ω() Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 25 / 30

Definição e Manipulação da Notação Exemplo de Prova Formal Suponha que um algoritmo A ordene uma sequência de n números, colocando-os em um vetor em ordem ascendente e que o número exato de passos que ele realiza é f(n) = 3+6+9+ +3n. Provemos que este algoritmo é O(n 2 ): f(n) = 3+6+9+ +3n = 3(1+2+ +n) = 3n(n+1) 2 Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 26 / 30

Definição e Manipulação da Notação Exemplo de Prova Formal Se escolhermos K = 3, n 0 = 1 e g(n) = n 2, substituindo na definição formal da notação-o, podemos demonstrar que f(n) g(n) para todo n n 0 e que a desigualdade vale para todo n 1: 3n(n +1) 3n 2 2 n 2 +n 2n 2 n n 2 1 n O que claramente vale para todo n 1. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 27 / 30

Definição e Manipulação da Notação Dicas Práticas Para simplificar as provas, utiliza-se atalhos que normalmente compreendem separar a expressão f(n) em um termo determinante e outros termos menores e eliminar estes últimos. Para isto, podemos classificar as funções: O(1) < O(logn) < O(n) < O(nlogn) < O(n 2 ) < O(n 3 ) < O(2 n ) < O(10 n ) Exemplo: O(6n 3 15n 2 +3nlogn) = O(6n 3 ) = O(n 3 ) Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 28 / 30

Definição e Manipulação da Notação Base de Logaritmos Não escrevemos a base de logaritmos dado que para mudar a base basta multiplica-lo por uma constante; Exemplo: para mudar um logaritmo da base 2 para a base 10 podemos utilizar a seguinte fórmula: Mas como log 10 n = log 2n log 2 10 1 log 2 10 = 0,3010 Poderíamos ter escrito a fórmula de conversão como: log 10 n = 0,3010 log 2 n Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 29 / 30

Definição e Manipulação da Notação Considerações finais De acordo com a definição formal, se f(n) é O(n) então é também O(n 2 ),O(n 3 ),... No entanto, o limite que falamos é o mais próximo conhecido; Para problemas pequenos, as constantes podem assumir um papel determinante no desempenho do algoritmo; Portanto, a notação-o não necessariamente é válida para problemas pequenos. Francisco Silva (UFMA/LSD) SD: Princípios e Algoritmos 20 de agosto de 2012 30 / 30