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
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
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
Alan M. Turing
(1912-1954)
Computing Machinery and Intelligence. Mind, Vol. LIX. 433-460, 1950.
Os computadores tero inteligncia.
53 anos depois
Previso de tecnologia de Turing foi fantstica!
Armazenamento de Gb de memria so comuns.
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
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
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?!)
Charles Babbage
(1791-1871)
Os objetivo de Babbage foram alcanados
mas ainda precisamos de melhores algoritmos e mquinas mais rpidas.
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
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 ...
Memex Individual
Memex: Lembrar o que visto e ouvido e rapidamente devolver qualquer informao solicitada
26
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
29
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
Aplicaes
Grafos e rvores Buscas rvore geradora mnima Caminho mnimo Redes de fluxo
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
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
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
no correto!
Escolher
sempre o ponto mais prximo muito restritivo, pois pode nos levar a fazer movimentos desnecessrios.
40
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
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!
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
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
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
1000 1s 10 s 2m 2.7 h -
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
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 )
54
Moral da Histria
Computers do not solve problems, People do! E.R.Davidson
55