estrutura de dados e algoritmos em c - impa - instituto de …rbs/eda/eda_impa.pdf ·...

55
Estrutura de Dados e Algoritmos em C Roberto de Beauclair Seixas [email protected]

Upload: lydung

Post on 07-Dec-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

Estrutura de Dados e Algoritmos em C

Roberto de Beauclair [email protected]

Page 2: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

2

Porque usar computador ?“É indigno de homens eminentes perder

horas como escravos na tarefa desgastante de calcular. Esse trabalho bem poderia ser confiado a pessoas sem qualquer qualificação especial, se máquinas pudessem ser utilizadas.”

Gottfried Wilhelm Leibniz

Page 3: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

3

Engenharia de Software“Engenharia de software é a área

interdisciplinar que engloba vertentes tecnológicas e gerencial visando a abordar, de modo sistemático, os processos de construção, implantação e manutenção de produtos de software com qualidade assegurada por construção, segundo cronogramas e custos previamente definidos.”

Page 4: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

4

Engenharia de SoftwareInterdisciplinar baseada nos seguintes áreas:

Ciência da ComputaçãoSistemas e ModelosAvaliação de Complexidade de ProblemasÁlgebra LinearCálculoAdministração de ProjetosComunicação

Page 5: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

5

Estrutura de DadosEm linguagens de programação o Tipo de Dado de uma variável define o conjunto de valores que a variável pode assumir.Tipo Abstrato de Dados é o Tipo de Dado em termos do que os usuários podem fazer e não ao computador.Estrutura de Dados é um método particular de se implementar um Tipo Abstrato de Dados.A implementação de um Tipo Abstrato de Dadosescolhe uma Estrutura de Dados para representá-lo. Cada Estrutura de Dados é construída dos tipos básicos (int, real, char) ou dos tipos estruturados (array, record) de uma linguagem de programação.

Page 6: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

6

Abu Abd-Allah ibn Musa al'Khwarizmi

Seu trabalho mais importante escrito em 830 nos dá a palavra álgebra.

classifica a solução de equações quadráticas e dá métodos geométricos para completar o quadrado.

Al'Khwarizmi também escreveu números Hindu-árabe. Este texto de árabe está perdido mas uma tradução latina “Algoritmi de numero Indorum”, em inglês “Al-Khwarizmi on theHindu Art of Reckoning”, deu origem a palavra algoritmo que deriva do nome dele no título.

O primeiro uso do zero com lugar posicional na anotação básica provavelmente foi devida a al'Khwarizmi.

Page 7: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

7

Dicionário Webster:“Any special method of solving a certain kind of problem.”

Algoritmo

Page 8: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

8

Dicionário Webster:“Any special method of solving a certain kind of problem.”

( parece coisa do McGuiver! )

Algoritmo

Page 9: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

9

Fundamentals of Computer Algorithms; E.Horowitz, S.Sahni; 1978:

“A precise method useable by a computer for thesolution of a problem.”

Algoritmo

Page 10: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

10

Fundamentals of Computer Algorithms; E.Horowitz, S.Sahni; 1978:

“A precise method useable by a computer for thesolution of a problem.”

Algoritmo

Page 11: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

11

Linguagem CDesenvolvida pelo Bell Lab no início dos anos 70,

visando a implementação do UNIX. Possui um padrão feito por Kernighan e Ritchie em 1978.

Tem facilidades para a programação em “alto” e “baixo” níveis e gera código eficiente.

Possui um grande conjunto de operadores, o que permite um código compacto, porém de baixa legibilidade.

É excelente para construir programas portáveis.

Page 12: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

12

Oops!#include <stdio.h>

main(){char *b=" .:-;!/>)|&IH%*#"; floati,j,k,r,x,y=-16; while (puts(""),y++<15) for(x=0;x++<84; putchar(b[(int)k&15])) for(i=k=r=0; j=r*r-i*i-2+x/25, i=2*r*i+y/10, j*j+i*i<11&&k++<111; r=j);}

Page 13: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

Motivação:Presente

Page 14: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

14

Engenharia de Software:What the Hell is this?

Engenheiros Civis fazem Plantas antes de construírem prédios;Engenheiros Eletrônicos fazem Esquemas antes de montarem aparelhos; Engenheiros Mecânicos fazem Desenhos antes de produzirem máquinas; Engenheiros de Software são superdotados pela Mãe Natureza, e não precisam de nada disso!

“Se prédios fossem construídos da mesma forma que fazemos sistemas, o primeiro pica-pau que aparecesse no planeta destruiriaa humanidade” - Weinberg

Page 15: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

15

A Engenharia de Software é uma área MUITO NOVA!

O ser humano faz casas e abrigos há milhões de anos;O ser humano lida com eletricidade há milhares de anos;O ser humano produz máquinas e ferramentas há outros milhares de anos;O ser humano faz software há 40 anos.

Estamos nos primórdios da computação...

Page 16: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

16

Conclusão“A formulação de um problema é

freqüentemente mais essencial do que sua solução, a qual pode ser meramente uma questão de habilidade matemática ou experimental.”

Einstein e Infeld, “A Evolução da Física” - 1938

Page 17: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

17

Aderência da Linguagem

Page 18: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

Motivação:Passado e Futuro(?)

Page 19: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

19

Alan M. Turing (1912-1954)

Computing Machinery and Intelligence. Mind, Vol. LIX. 433-460, 1950.

Os computadores terão inteligência.

Debate: Então, e agora ?Será uma relação simbiótica ?(computador como uma ferramenta)Os computadores terão “consciência”?

Page 20: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

20

53 anos depoisPrevisão de tecnologia de Turing foi fantástica!

Armazenamento de Gb de memória são comuns.

Previsão de inteligência foi otimista. Vários locais da Internet oferecem “chatterbots” do Teste de Turing. Ninguém passou (ainda)

http://www.loebner.net/Prizef/loebner-prize.html

Os testes de Turing ainda se apresentam como desafios de longo prazo.Mas acredita-se que não demorará

menos de 50 anos, mais de 10 anos.

Page 21: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

21

Mas, houve progresso ...Computadores solucionaram alguns problemas: “Mapa de 4 cores”

K. Appel and W. Haken, “The solution of the four-color-map problem,” Scientific American, Oct 1977, 108-121

e uma prova “manual” http://www.math.gatech.edu/~thomas/FC/fourcolor.html(1995)

Os computadores venceram o campeão mundial de xadrezcom alguma ajuda dos programadores, mas … venceu!

Os computadores estão presentes no dia-a-diaAjudam a projetar e idealizar novas coisas

Estas são relações simbióticas.Aprendizado e formação de conhecimento ainda são ilusórios.

Page 22: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

22

Armadilha dos númerosOs seres humanos possuem 100 Tb de informação (1012) e podem processar 100 T ops.

ROBOT, Hans Moravec, Oxford, 1998, page 58

Então, um supercomputador “tem” um poder comparável.O Genoma humano tem 109 bits:

90% não possuem informação alguma (proteínas de ligação)90% em comum com os chimpanzés 90% comum entre os indivíduosEntão, realmente só 106 bytes são relevantes (huh?!)

Estamos perdendo algo ...Um excelente algoritmo de compressão ? Uma melhor linguagem de programação ?Técnicas de aprendizado ?

Page 23: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

23

Charles Babbage (1791-1871)

Os objetivo de Babbage foram alcançados

mas ainda precisamos de melhores algoritmos e máquinas mais rápidas.

O que acontecerá quando:A capacidade de processamento for infinita ? A capacidade de armazenamento for infinita ?

Limites remanescentes:Conteúdo: A capacidade de informação do CyberspaceSoftware: Bugs, >100$ por linha de código (!)Processamento: > 1,000 $/cpu/ano

Page 24: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

24

BenefíciosHoje os computadores podem:

Ler para os cegos (OCR & Texto → Fala)Ouvir para os surdos (Fala → Texto)Escrever para os deficientes (Fala → Texto)

Logo:Substituir deficiências:

melhor memória, melhor visão, …Novas formas de comunicação

Tradução automática de telefonemasRevolucionar a interface homem-computador

Page 25: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

25

Vannevar Bush (1890-1974)

“As We May Think” The Atlantic Monthly, 1945http://www.theatlantic.com/unbound/flashbks/computer/bushf.htm

MemexTodo conhecimento humano

… “a billion books” hyper-linked together ...Registrando tudo o que se vê

filmes e fotos ... “a machine which types when talked to” ...

Navigate by… text search following links associations ...

Conexões diretas ao sistema nervoso ?

Page 26: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

26

Memex IndividualMemex: “Lembrar o que é visto e ouvido e rapidamente

devolver qualquer informação solicitada”

Page 27: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

27

Quanto de Informação Existe ?

Logo, tudo poderá ser gravado e catalogado.A maioria da informação nunca será vista.Fundamentos tecnológicos:

Atenção humana“Sumarização” automáticaBusca automática

http://www.lesk.com/mlesk/ksg97/ksg.html

Page 28: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

28

ResumoPense seriamente sobre AlgoritmosQual o melhor algoritmo para um problema?

→ “aderência”Oito paradigmas para projetar um bom algoritmo:

1. reduzir a um problema conhecido (ex: ordenação); 2. recursão; 3. criar ou expandir uma estrutura de dados; 4. dividir e conquistar; 5. guloso; 6. programação dinâmica; 7. probabilidade; 8. aproximação.

Page 29: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

29

Cuidado com os efeitos colaterais!

Page 30: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

30

Estruturas de Dados e Algoritmos em C

Proposta de Curso – Nível Iniciação CientíficaA finalidade deste curso é ensinar ao aluno as técnicas básicas de estruturação de dados em linguagens convencionais e capacitá-lo a empregar essas técnicas, na construção de pequenos programas.

Descrição do CursoFamiliarizar os alunos com a linguagem de programação C, enfocando os elementos essenciais para a construção de programas confiáveis, seguros, corretos, eficientes e baratos. Para tanto, as estruturas de dados básicas serão estudadas e implementadas em C, bem como algoritmos para manipulá-las.

Page 31: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

31

EmentaLinguagem C

Conceitos fundamentaisExpressõesControle de fluxoFunções

Estruturas de dados básicasVetoresMatrizesCadeia de caracteresTipos estruturados

Estruturas de dados dinâmicasAlocação dinâmicaListas encadeadasPilhasFilasÁrvores

Ordenação e buscaArquivosOrdenaçãoBusca Hashing

AplicaçõesGrafos e árvoresBuscasÁrvore geradora mínimaCaminho mínimoRedes de fluxo

Page 32: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

32

Problema AlgorítmicoProblema

E ⇒ conjunto das possíveis entradasS ⇒ conjunto das saídas desejadasR(E,S) ⇒ relação entre entradas e saídas desejadasO ⇒ operações válidas

SoluçãoA ⇒ algoritmo correto

e sA

∀e ∈ E (e,s) ∈ R(E,S)

Page 33: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

33

Solução de Problemasmodelo matemáticoalgoritmo informal

modelo matemáticoalgoritmo informal

tipo abstrato de dadospseudo código

tipo abstrato de dadospseudo código

estrutura de dadosprograma

estrutura de dadosprograma

código de máquinacódigo de máquina...

Page 34: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

34

Algoritmos e Complexidade

Problema, Instância e Algoritmo.Dado um problema:

Como encontrar um algoritmo eficiente para solucioná-lo ?Uma vez encontrado, como compará-lo a outros algoritmos que também resolvem o problema ?Como determinar se o algoritmo está correto ?Como determinar se o algoritmo é eficiente ?

Page 35: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

35

AlgoritmoConjunto finito de instruções, composta de uma ou

mais operações válidas, com o objetivo de resolver um problema específico.Operações válidas

definidas 5 ÷ 0efetivas √ π

Término em tempo finito (procedimento computacional)Entrada (opcional)Saída (uma ou mais)

Page 36: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

36

Alguns Exemplos IniciaisPara qualquer algoritmo, temos que provar que ele sempre

retornará o resultado desejado para todas as instâncias possíveis do problema.

⌦ Correção (Correctness)⌦ Eficiência

Page 37: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

37

Critérios de AnáliseEficácia

Correção

EficiênciaTempoEspaçoSimplicidade / ClarezaOtimalidade

LimitaçõesComputabilidadeTratabilidade

Parcialmente Corretoentrada válida → saída desejadapode ser tempo infinito

Totalmente Corretotempo finitosaída desejada

especificação

requisitos

código

verificação NÃOerros

problemaalgoritmo

SIMsolução

Page 38: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

38

Correção não é óbvio!⌦ Você recebeu a tarefa de programa um braço de robô de

soldagem. ⌦ O robô deve soldar (visitar) o primeiro ponto de solda,

depois o segundo, terceiro e assim por diante.⌦ Determine um algoritmo para achar o melhor caminho.

Page 39: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

39

Vizinho Mais Próximo⌦ Inicie em algum ponto p0 e então vá para o ponto mais

próximo p1. Repita o processo a partir de p1, etc. até que todos os pontos sejam visitados.

Escolha e visite um ponto inicial p0

p = p0; i = 0;enquanto existirem pontos não visitados

i = i + 1escolha e visite o ponto pi, mais próximo de pi-1

retorne ao ponto inicial

⌦ Este algoritmo é simples de entender, simples de entender e muito eficiente. Está correto ?

Page 40: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

40

Vizinho Mais Próximo⌦Algoritmo não é correto!

⌦Escolher sempre o ponto mais próximo é muito restritivo, pois pode nos levar a fazer movimentos desnecessários.

Page 41: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

41

Par Mais Próximo⌦ Conectar ao par mais próximo de pontos cuja conexão

não irá causar um ciclo ou bifurcações, até se formar uma única cadeia de pontos com todos os pontos.

faça n ser o número de pontos do conjunto e d = ∞para i = 1 até n - 1 faça

para cada par de pontos (x,y) de caminhos parciaisif (dist(x,y) <= d) então

xm = x; ym = y; d = dist(x,y);conecte (xm, ym) por uma aresta

conecte os dois pontos por uma aresta

⌦ Este algoritmo está correto para o contra-exemplo anterior. Então agora estará correto ?

Page 42: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

42

Par Mais Próximo⌦Algoritmo não é correto!

⌦Existe algoritmo correto ?!

Page 43: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

43

Um algoritmo corretoPodemos tentar todas as ordenações de pontos possíveis e então selecionar a ordenação que minimiza o comprimento total.Uma vez que todas as possíveis ordenações são consideradas, podemos garantir que teremos o melhor caminho possível.Mas, isso significa testar n! permutações, que é extremamente lento. Tão lento que é inviável quanto se tem mais de 10 ou 20 pontos.Conclusão: Não existe um algoritmo correto eficiente!

Traveling Salesman Problem

Page 44: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

44

Eficiência“Porque (simplesmente) não usar um supercomputador?”

Supercomputadores são para pessoas muito ricas e muito estúpidas para escrever algoritmos eficientes! (S.Skiena)Um algoritmo rápido rodando em um computador lento irá sempre ganhar de um supercomputador com um algoritmo ruim para instâncias suficientemente grandes.Normalmente, os problemas não chegam a ficar tão grandes antes do algoritmo rápido ganhar.

Page 45: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

45

Problema: Ponto em PolígonoDado em polígono plano simples, ou seja, os

lados não se cruzam, P e um ponto p do plano, decidir se p é interior ou não ao polígono P.

P•p

Page 46: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

46

Complexidade AssintóticaExiste algum algoritmo que resolve o problema?

Isso requer que o algoritmo pare após um número finito de passos para qualquer instância do problema.

Dado um certo algoritmo A, quão eficiente é este algoritmo? Dado dois algoritmos A e B, qual deles é superior?Dentre todos os algoritmos que resolvem o problema, qual deles é melhor?Medir a complexidade (ou eficiência) de um algoritmo pelo tempo necessário à sua execução em função do tamanho da instância. (Complexidade Assintótica O(f (n)))

Page 47: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

47

Análise de AlgoritmosRecursos Computacionais

Tempo de execução e quantidade de memória

Implementação do AlgoritmoLinguagem e arquitetura

Tamanho da entrada (N)Número de elementos ou número de nós da expressão

Complexidade (tempo) de Pior CasoT(N): Maior tempo de execução do algoritmo com todos os problemas possíveis de tamanho N.T(N) é proporcional ao número total de instruções t (N) executadas para o pior caso de tamanho N ⇒ T(N) = c t (N)

Page 48: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

48

Definição 1Um algoritmo A para resolver P tem

complexidade O(f (n)) se existe uma constante k > 0 e um natural N tais que, para qualquer instância de P de tamanho n> N, o número de passos de A necessários para resolver esta instância é, no máximo, k f (n).

ex. 1000 n2 “ambiente computacional”` “natureza do método”

Page 49: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

49

Ordens de Magnitude

x ← x + y

1

for i ← 1 to n

begin

x ← x + y

end

n

for i ← 1 to n

begin

for j ← 1 to n

begin

x ← x + y

end

end

n2

Page 50: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

50

ComplexidadeSe um algoritmo processa problemas de tamanho n em tempo cn2 para alguma constante c, então dizemos que a complexidade (time complexity) do algoritmo é O(n2), lendo-se “ordem n2”.

algoritmo complexidade 1 s 1 m 1 hA1 n 1000 6x104 3.6x106

A2 n log n 140 4893 2.0x105

A3 n2 31 244 1897A4 n3 10 39 153A5 2n 9 15 21

Page 51: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

51

Tempo de Execução20 50 100 200 500 1000

1000 n 0.02 s 0.05 s 0.1 s 0.2 s 0.5 s 1 s

1000 n log n 0.09 s 0.3 s 0.6 s 1.5 s 4.5 s 10 s

100 n2 0.04 s 0.25 s 1 s 4 s 25 s 2 m

10 n3 0.02 s 1 s 10 s 1 m 21 n 2.7 h

nlog n 0.4 s 1.1 h 220 d 125 s 5E8 s -

2n 1 s 35 a 3E4 s

TamanhoComplexidade

Obs.: Supondo que 1 operação leva 1 µs.

Page 52: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

52

CuriosidadesExplosão Combinatorial

100! → número com 158 dígitos120! → número com 200 dígitosnúmero de prótons no universo → 126 dígitosnúmero de µ segundos desde o Big-Bang → 24 dígitos

Impacto da Evolução Tecnológicaalgoritmo atuais 100 x 1000 x

n N1 100 N1 1000 N1n2 N2 10 N2 31.6 N2n3 N3 4.64 N3 10 N32n N4 N4 + 6.64 N4 + 9.97

Page 53: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

53

Dada a função f abaixo, calcule o seu valor para x = 40545 e y = 70226.

f (x,y) = 9 x4 - y4 + 2 y2

dígitos: 3 7 11 15 19 211010 -10-13 1.3 107 82152 2

Oops! O valor correto é 1

Outra Curiosidade (sic!)

Page 54: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

54

Outra Curiosidade (sic!)Dada a função f abaixo, calcule o seu valor para:

x = 77617 y = 33096.

f (x,y) = 333.75 y6 + x2 (11 x2 y2 - y6 - 121 y4 - 2) + 5.5 y8 + x/2y

Precisão simples: 1.172603…Precisão dupla: 1.1726039400531…Precisão extendida: 1.172603940053178…

Oops! O valor correto é -0.8273960599… ( - 54767 / 66192 )

Page 55: Estrutura de Dados e Algoritmos em C - IMPA - Instituto de …rbs/EDA/EDA_IMPA.pdf · 2005-11-29 · e Algoritmos em C zProposta de Curso – Nível Iniciação Científica ... ÆFamiliarizar

55

Moral da História

“Computers do not solve problems,People do!”

E.R.Davidson