Anda di halaman 1dari 55

Estrutura de Dados e Algoritmos em C

Roberto de Beauclair Seixas tron@impa.br

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 qualificao especial, se mquinas pudessem ser utilizadas. Gottfried Wilhelm Leibniz
2

Engenharia de Software
Engenharia de software a rea interdisciplinar que engloba vertentes tecnolgicas e gerencial visando a abordar, de modo sistemtico, os processos de construo, implantao e manuteno de produtos de software com qualidade assegurada por construo, segundo cronogramas e custos previamente definidos.
3

Engenharia de Software
Interdisciplinar baseada nos seguintes reas: Cincia da Computao Sistemas e Modelos Avaliao de Complexidade de Problemas lgebra Linear Clculo Administrao de Projetos Comunicao
4

Estrutura de Dados
Em linguagens de programao o Tipo de Dado de uma varivel define o conjunto de valores que a varivel pode assumir. Tipo Abstrato de Dados o Tipo de Dado em termos do que os usurios podem fazer e no ao computador. Estrutura de Dados um mtodo particular de se implementar um Tipo Abstrato de Dados. A implementao de um Tipo Abstrato de Dados escolhe uma Estrutura de Dados para represent-lo. Cada Estrutura de Dados construda dos tipos bsicos (int, real, char) ou dos tipos estruturados (array, record) de uma linguagem de programao.
5

Abu Abd-Allah ibn Musa al'Khwarizmi


Seu trabalho mais importante escrito em 830 nos d a palavra lgebra.
classifica a soluo de equaes quadrticas e d mtodos geomtricos para completar o quadrado.

Al'Khwarizmi tambm escreveu nmeros Hindu-rabe.


Este texto de rabe est perdido mas uma traduo latina Algoritmi de numero Indorum, em ingls Al-Khwarizmi on the Hindu Art of Reckoning, deu origem a palavra algoritmo que deriva do nome dele no ttulo.

O primeiro uso do zero com lugar posicional na anotao bsica provavelmente foi devida a al'Khwarizmi.

Algoritmo
Dicionrio Webster:
Any special method of solving a certain kind of problem.

Algoritmo
Dicionrio Webster:
Any special method of solving a certain kind of problem. ( parece coisa do McGuiver! )

Algoritmo
Fundamentals of Computer Algorithms; E.Horowitz, S.Sahni; 1978:
A precise method useable by a computer for the solution of a problem.

Algoritmo
Fundamentals of Computer Algorithms; E.Horowitz, S.Sahni; 1978:
A precise method useable by a computer for the solution of a problem.

10

Linguagem C
Desenvolvida pelo Bell Lab no incio dos anos 70, visando a implementao do UNIX. Possui um padro feito por Kernighan e Ritchie em 1978. Tem facilidades para a programao em alto e baixo nveis e gera cdigo eficiente. Possui um grande conjunto de operadores, o que permite um cdigo compacto, porm de baixa legibilidade. excelente para construir programas portveis.
11

Oops!
#include <stdio.h> main(){char *b=" .:-;!/>)|&IH%*#"; float i,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);}

12

Motivao: Presente

Engenharia de Software: What the Hell is this?


Engenheiros Civis fazem Plantas antes de construrem prdios; Engenheiros Eletrnicos fazem Esquemas antes de montarem aparelhos; Engenheiros Mecnicos fazem Desenhos antes de produzirem mquinas; Engenheiros de Software so superdotados pela Me Natureza, e no precisam de nada disso!
Se prdios fossem construdos da mesma forma que fazemos sistemas, o primeiro pica-pau que aparecesse no planeta destruiria a humanidade - Weinberg
14

A Engenharia de Software uma rea MUITO NOVA!


O ser humano faz casas e abrigos h milhes de anos; O ser humano lida com eletricidade h milhares de anos; O ser humano produz mquinas e ferramentas h outros milhares de anos; O ser humano faz software h 40 anos.
Estamos nos primrdios da computao...
15

Concluso
A formulao de um problema freqentemente mais essencial do que sua soluo, a qual pode ser meramente uma questo de habilidade matemtica ou experimental.
Einstein e Infeld, A Evoluo da Fsica - 1938

16

Aderncia da Linguagem

17

Motivao: Passado e Futuro(?)

Alan M. Turing
(1912-1954)
Computing Machinery and Intelligence. Mind, Vol. LIX. 433-460, 1950.
Os computadores tero inteligncia.

Debate: Ento, e agora ?


Ser uma relao simbitica ? (computador como uma ferramenta) Os computadores tero conscincia?
19

53 anos depois
Previso de tecnologia de Turing foi fantstica!
Armazenamento de Gb de memria so comuns.

Previso de inteligncia foi otimista.


Vrios locais da Internet oferecem chatterbots do Teste de Turing. Ningum 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 no demorar
menos de 50 anos, mais de 10 anos.

20

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 campeo mundial de xadrez


com alguma ajuda dos programadores, mas venceu!

Os computadores esto presentes no dia-a-dia Ajudam a projetar e idealizar novas coisas Estas so relaes simbiticas. Aprendizado e formao de conhecimento ainda so ilusrios.
21

Armadilha dos nmeros


Os seres humanos possuem 100 Tb de informao (1012) e podem processar 100 T ops.
ROBOT, Hans Moravec, Oxford, 1998, page 58

Ento, um supercomputador tem um poder comparvel. O Genoma humano tem 109 bits:
90% no possuem informao alguma (protenas de ligao) 90% em comum com os chimpanzs 90% comum entre os indivduos Ento, realmente s 106 bytes so relevantes (huh?!)

Estamos perdendo algo ...


Um excelente algoritmo de compresso ? Uma melhor linguagem de programao ? Tcnicas de aprendizado ?
22

Charles Babbage
(1791-1871)
Os objetivo de Babbage foram alcanados
mas ainda precisamos de melhores algoritmos e mquinas mais rpidas.

O que acontecer quando:


A capacidade de processamento for infinita ? A capacidade de armazenamento for infinita ?

Limites remanescentes:
Contedo: A capacidade de informao do Cyberspace Software: Bugs, >100$ por linha de cdigo (!) Processamento: > 1,000 $/cpu/ano
23

Benefcios
Hoje os computadores podem:
Ler para os cegos (OCR & Texto Fala) Ouvir para os surdos (Fala Texto) Escrever para os deficientes (Fala Texto)

Logo:
Substituir deficincias: ` melhor memria, melhor viso, Novas formas de comunicao ` Traduo automtica de telefonemas Revolucionar a interface homem-computador

24

Vannevar Bush (1890-1974)


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

Memex
Todo 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 ...

Conexes diretas ao sistema nervoso ?


25

Memex Individual
Memex: Lembrar o que visto e ouvido e rapidamente devolver qualquer informao solicitada

26

Quanto de Informao Existe ?


Logo, tudo poder ser gravado e catalogado. A maioria da informao nunca ser vista. Fundamentos tecnolgicos:
Ateno humana Sumarizao automtica Busca automtica http://www.lesk.com/mlesk/ksg97/ksg.html

27

Resumo
Pense seriamente sobre Algoritmos Qual o melhor algoritmo para um problema? aderncia Oito paradigmas para projetar um bom algoritmo:
1. reduzir a um problema conhecido (ex: ordenao); 2. recurso; 3. criar ou expandir uma estrutura de dados; 4. dividir e conquistar; 5. guloso; 6. programao dinmica; 7. probabilidade; 8. aproximao.
28

Cuidado com os efeitos colaterais!

29

Estruturas de Dados e Algoritmos em C


Proposta de Curso Nvel Iniciao Cientfica
A finalidade deste curso ensinar ao aluno as tcnicas bsicas de estruturao de dados em linguagens convencionais e capacit-lo a empregar essas tcnicas, na construo de pequenos programas.

Descrio do Curso
Familiarizar os alunos com a linguagem de programao C, enfocando os elementos essenciais para a construo de programas confiveis, seguros, corretos, eficientes e baratos. Para tanto, as estruturas de dados bsicas sero estudadas e implementadas em C, bem como algoritmos para manipul-las.

30

Ementa
Linguagem C
Conceitos fundamentais Expresses Controle de fluxo Funes

Ordenao e busca
Arquivos Ordenao Busca Hashing

Estruturas de dados bsicas


Vetores Matrizes Cadeia de caracteres Tipos estruturados

Aplicaes
Grafos e rvores Buscas rvore geradora mnima Caminho mnimo Redes de fluxo

Estruturas de dados dinmicas


Alocao dinmica Listas encadeadas Pilhas Filas rvores

31

Problema Algortmico
Problema
E conjunto das possveis entradas S conjunto das sadas desejadas R(E,S) relao entre entradas e sadas desejadas O operaes vlidas

Soluo
A algoritmo correto

e e E

s (e,s) R(E,S)
32

Soluo de Problemas
modelo modelomatemtico matemtico algoritmo algoritmoinformal informal tipo tipoabstrato abstratode dedados dados pseudo pseudocdigo cdigo estrutura estruturade dedados dados programa programa ... cdigo cdigode demquina mquina
33

Algoritmos e Complexidade
Problema, Instncia e Algoritmo. Dado um problema:
Como encontrar um algoritmo eficiente para solucion-lo ? Uma vez encontrado, como compar-lo a outros algoritmos que tambm resolvem o problema ? Como determinar se o algoritmo est correto ? Como determinar se o algoritmo eficiente ?

34

Algoritmo
Conjunto finito de instrues, composta de uma ou mais operaes vlidas, com o objetivo de resolver um problema especfico.
Operaes vlidas
definidas efetivas 50

Trmino em tempo finito (procedimento computacional) Entrada (opcional) Sada (uma ou mais)

35

Alguns Exemplos Iniciais


Para qualquer algoritmo, temos que provar que ele sempre retornar o resultado desejado para todas as instncias possveis do problema.

Correo (Correctness) Eficincia

36

Critrios de Anlise
Eficcia
Correo
especificao

problema algoritmo

requisitos cdigo

Eficincia
Tempo Espao Simplicidade / Clareza Otimalidade
SIM soluo verificao NO erros

Parcialmente Correto
entrada vlida sada desejada pode ser tempo infinito

Limitaes
Computabilidade Tratabilidade

Totalmente Correto
tempo finito sada desejada
37

Correo no bvio!

Voc recebeu a tarefa de programa um brao 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.

38

Vizinho Mais Prximo

Inicie em algum ponto p0 e ento v para o ponto mais prximo 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 no visitados i=i+1 escolha e visite o ponto pi, mais prximo de pi-1 retorne ao ponto inicial

Este algoritmo simples de entender, simples de entender e muito eficiente. Est correto ?
39

Vizinho Mais Prximo


Algoritmo

no correto!

Escolher

sempre o ponto mais prximo muito restritivo, pois pode nos levar a fazer movimentos desnecessrios.
40

Par Mais Prximo

Conectar ao par mais prximo de pontos cuja conexo no ir causar um ciclo ou bifurcaes, at se formar uma nica cadeia de pontos com todos os pontos.
faa n ser o nmero de pontos do conjunto e d = para i = 1 at n - 1 faa para cada par de pontos (x,y) de caminhos parciais if (dist(x,y) <= d) ento 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. Ento agora estar correto ?
41

Par Mais Prximo


Algoritmo

no correto!

Existe

algoritmo correto ?!

42

Um algoritmo correto
Podemos tentar todas as ordenaes de pontos possveis e ento selecionar a ordenao que minimiza o comprimento total. Uma vez que todas as possveis ordenaes so consideradas, podemos garantir que teremos o melhor caminho possvel. Mas, isso significa testar n! permutaes, que extremamente lento. To lento que invivel quanto se tem mais de 10 ou 20 pontos. Concluso: No existe um algoritmo correto eficiente!

 Traveling Salesman Problem 


43

Eficincia
Porque (simplesmente) no usar um supercomputador? Supercomputadores so para pessoas muito ricas e muito estpidas para escrever algoritmos eficientes! (S.Skiena) Um algoritmo rpido rodando em um computador lento ir sempre ganhar de um supercomputador com um algoritmo ruim para instncias suficientemente grandes. Normalmente, os problemas no chegam a ficar to grandes antes do algoritmo rpido ganhar.

44

Problema: Ponto em Polgono


Dado em polgono plano simples, ou seja, os lados no se cruzam, P e um ponto p do plano, decidir se p interior ou no ao polgono P.

45

Complexidade Assinttica
Existe algum algoritmo que resolve o problema?
Isso requer que o algoritmo pare aps um nmero finito de passos para qualquer instncia do problema.

Dado um certo algoritmo A, quo 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 eficincia) de um algoritmo pelo tempo necessrio sua execuo em funo do tamanho da instncia. (Complexidade Assinttica O(f (n)))

46

Anlise de Algoritmos
Recursos Computacionais
Tempo de execuo e quantidade de memria

Implementao do Algoritmo
Linguagem e arquitetura

Tamanho da entrada (N)


Nmero de elementos ou nmero de ns da expresso

Complexidade (tempo) de Pior Caso


T(N): Maior tempo de execuo do algoritmo com todos os problemas possveis de tamanho N. T(N) proporcional ao nmero total de instrues t (N) executadas para o pior caso de tamanho N T(N) = c t (N)
47

Definio 1
Um algoritmo A para resolver P tem complexidade O(f (n)) se existe uma constante k > 0 e um natural N tais que, para qualquer instncia de P de tamanho n > N, o nmero de passos de A necessrios para resolver esta instncia , no mximo, k f (n). ex. 1000 n2 ambiente computacional` natureza do mtodo
48

Ordens de Magnitude
xx+y for i 1 to n begin xx+y end for i 1 to n begin for j 1 to n begin xx+y end end

n2
49

Complexidade
Se um algoritmo processa problemas de tamanho n em tempo cn2 para alguma constante c, ento dizemos que a complexidade (time complexity) do algoritmo O(n2), lendo-se ordem n2.
algoritmo A1 A2 A3 A4 A5 complexidade n n log n n2 n3 2n 1s 1000 140 31 10 9 1m 1h 6x104 3.6x106 4893 2.0x105 244 1897 39 153 15 21
50

Tempo de Execuo
Tamanho Complexidade

20 0.02 s 0.09 s 0.04 s 0.02 s 0.4 s 1s

50 0.05 s 0.3 s 0.25 s 1s 1.1 h 35 a

100 0.1 s 0.6 s 1s 10 s 220 d 3E4 s

200 0.2 s 1.5 s 4s 1m 125 s

500 0.5 s 4.5 s 25 s 21 n 5E8 s

1000 1s 10 s 2m 2.7 h -

1000 n 1000 n log n 100 n 2 10 n 3 n log n 2n

Obs.: Supondo que 1 operao leva 1 s.


51

Curiosidades
Exploso Combinatorial
100! nmero com 158 dgitos 120! nmero com 200 dgitos nmero de prtons no universo 126 dgitos nmero de segundos desde o Big-Bang 24 dgitos

Impacto da Evoluo Tecnolgica


algoritmo n n2 n3 2n atuais N1 N2 N3 N4 100 x 100 N1 10 N2 4.64 N3 N4 + 6.64 1000 x 1000 N1 31.6 N2 10 N3 N4 + 9.97
52

Outra Curiosidade (sic!)


Dada a funo f abaixo, calcule o seu valor para x = 40545 e y = 70226. f (x , y ) = 9 x 4 - y 4 + 2 y 2 dgitos: 3 7 11 15 19 21 1010 -10-13 1.3 107 82152 2 Oops! O valor correto 1
53

Outra Curiosidade (sic!)


Dada a funo 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 Preciso simples: Preciso dupla: Preciso extendida: 1.172603 1.1726039400531 1.172603940053178 -0.8273960599 ( - 54767 / 66192 )

Oops! O valor correto

54

Moral da Histria
Computers do not solve problems, People do! E.R.Davidson
55

Anda mungkin juga menyukai