300 likes | 573 Views
Complexidade de Algoritmos. DAS 5102 – Fundamentos da Estrutura da Informação Prof. Dr. rer . nat. Daniel D. Abdala abdala@das.ufsc.br. Objetivos. Introduzir o conceito de análise de algoritmos; Introduzir o conceito de complexidade assintótica;
E N D
Complexidade de Algoritmos DAS 5102 – Fundamentos da Estrutura da Informação Prof. Dr. rer. nat. Daniel D. Abdala abdala@das.ufsc.br
Objetivos • Introduzir o conceito de análise de algoritmos; • Introduzir o conceito de complexidade assintótica; • Explicar via exemplos como medir a complexidade de algoritmos; • Explicar o conceito de complexidade média de melhor e de pior caso.
Plano de Aula • Algoritmos • Análise de Algoritmos • Conceitos Básicos • Complexidade no Tempo e no Espaço • Notação Assintótica
Conceitos Básicos – Algoritmos • Algoritmo – Ferramenta para resolução de problemas. • Problemas são descritos via: • Uma descrição de todos os seus parâmetros de entrada (INPUT) • Um enunciado sobre que propriedades a solução deve satisfazer
Conceitos Básicos – Algoritmos Exemplo : Problema de Ordenação Entrada : Seqüência L (a1, ..., aN) Saída : L’ (a1’, ..., aN’) que é uma permutação da entrada tal que a1’≤ a2’ ≤ ... ≤ aN’ • Um Algoritmo é dito CORRETO se para todas as possíveis entradas ele termina com a respos-ta correta.
Algoritmos Eficiente - Motivação • Dois computadores • PC (106instr/s) • SC (108instr/s) • Dois algoritmos de ordenação • Alg1 – TAlg1 = 2N2 • Alg2 – TAlg2 = 50NlogN • Problema : Ordenar 106 números • SC – • PC –
Análise de Algoritmos • Análise de algoritmos é uma disciplina da computa-ção que se preocupa em medir e analisar os recur-sos necessários por algoritmos para levar a termo sua execução.
Complexidade no Tempo e no Espaço (N) • Espacial – mede a quantidade de memória que o algoritmo requer para sua execução • Temporal – mede o tempo, dada uma entrada de dados, que o algoritmo requer para produzir uma resposta (mais usado) • As medidas de análise utilizadas devem conter as seguintes características: • Ser independentes da tecnologia empregada (hardware e software); • Modelo matemático simplificado que representa os fatores mais relevantes;
Complexidade no Tempo e no Espaço (N) • Temporal – função que relaciona o tamanho da entrada com o tempo de execução: t = f(N) • Espacial – função que relaciona o tamanho da entrada com o espaço de armazenamento requerido: e = g(N)
Considerações • Sempre que criamos um algoritmo, existem três perguntas que devem ser formuladas: • O algoritmo é correto? • Quanto tempo ele leva em função da entrada N? • O problema pode ser resolvido de uma maneira melhor?
Notação Assintótica • Também conhecida com notação O • (diz-se big O) • Definição: Considere uma função f(n) não negativa para todos n>=0. Diz-se que f(n) é O(g(n)) e escrevemos f(n) = O(g(n)), se existem um inteiro n0 e uma cons-tante c>0, tais que para todo inteiro m>=n0, f(n) < c g(n). • Em resumo: Podemos ignorar as constantes!
Exemplo: Tempo de execução • Considere a seguinte situação. O problema apresentado a seguir foi resolvido de cinco maneiras diferentes, resultando em cinco algoritmos (A1 ... A5). • Tais algoritmos foram implementados utilizando diferentes níveis de complexidade computacional. Supondo que uma operação leva 1ms para ser executado, e dado Tk(n) sendo a complexidade, ou seja, o número de operações que o algoritmo efetua para N entradas. • Quais serão os tempos de execução de cada um destes algoritmos?
Exemplo: Tempo de execução Tempo de execução em função do tamanho da entrada
Exemplo • Entrada : número N • Saída : número r representando a soma dos N primeiros inteiros.
Exemplo: Fibonacci • A série tem a seguinte forma: • A função F(N) é definida por: Implementação recursiva (exponencial):
Exemplo: Fibonacci • O algoritmo é correto? • Quanto tempo ele leva em função da entrada N? • O problema pode ser resolvido de uma maneira melhor? • (1) sim! Ele é a implementação direta da definição • (2) T(n) – número de passos computacionais • Para n ≤ 2 • Para n > 2 • Note que
Exemplo: Fibonacci • Quão demorada é a execução do algoritmo? • Fn ≈ 20,694n • F200 –> T(200) ≥ F200 ≥2138 passos computacionais • SC –> 40.1012 passos computacionais / segundo • fib1(200) @ SC = 292 segundos • (3) Existe uma maneira de se calcular números da série de Fibonacci de maneira mais eficiente? • Lab!
Exemplo: Fibonacci Chamadas recursivas de fib1(n)
Pontos Chave • Algoritmos são maneiras factíveis para solução de problemas numéricos, no entanto eles precisam ser analisados de modo a garantir sua eficácia; • Análise de Algoritmos é uma disciplina que define uma maneira sistemática de avaliação de algoritimos; • Complexidade no Tempo e no Espaço definem formas de estimarmos quanto tempo um programa demora para se executar em função de sua entrada assim como quanto espaço em disco ele requer; • Notação Assintótica ou notação BigO é uma forma de indicar a tendência de crescimento do tempo de execução de algoritmos.
Para o Lar • Última chance para entregar o exercício de nivelamento é dia 08/09 (prova 1)!; • Ler o capítulo 0 (prólogo) do livro “Algorithms” (Dasgupta) para a prova; • Procure na internet uma forma mais eficiente de calcular números fatoriais; • Procure na internet uma forma mais eficiente de ordenação de números que a vista na aula.
Bibliografia • S. Dasgupta, C. H. Papadimitriou, U. V. Vazirani. Algorithms, Chap. 0; • R. Sedgewick, Addison-Wesley. Algorithms in C, Parts 1-4: Fundamentals, Data Structures, Sorting, Searching, 3rd edition, 1997.