Algoritmos e estruturas de dados

1,196 views
1,138 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,196
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
49
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Algoritmos e estruturas de dados

  1. 1. Algoritmos e Estruturas de Dados Fernanda Maria Pereira Raupp Laboratório Nacional de Computação Científica
  2. 2. Modelo de computador e de programaEspecialização em Bioinformática F. M. P. Raupp/LNCC 2
  3. 3. Algoritmo • é um conjunto de instruções bem definido em pseudo linguagem computacional • define as estruturas dos dados • formata o resultado Objetivos do Curso • apresentar tipos de dados • apresentar tipos de estruturas de dados • apresentar alguns algoritmosEspecialização em Bioinformática F. M. P. Raupp/LNCC 3
  4. 4. básicos dados construídos novosEspecialização em Bioinformática F. M. P. Raupp/LNCC 4
  5. 5. Tipos básicos 1 - inteiro (int) • exemplos: -203, 0, 55521 • operações: +, -, *, div e mod int oper int = int 2 - real (real) • exemplos: 0.000056, -1.22, 3.912, 10.0 • operações: +, -, *, /, ** real oper real = realEspecialização em Bioinformática F. M. P. Raupp/LNCC 5
  6. 6. 3 - lógico (log) • um dado lógico tem valor V ou F • operações: conjunção (e), disjunção (ou) e negação(~) A B AeB A ou B ~A V V V V F V F F V F F V F V V F F F F V 4 - carectere (car) • pode ser um algarismo, uma letra ou um símbolo especial ( %, _ , $, !, .. ). • exemplos: ‘A’, ‘a’, ‘-‘, ‘0’, ‘ ‘Especialização em Bioinformática F. M. P. Raupp/LNCC 6
  7. 7. Operando tipos básicos: ? int, real e car podem ser comparados por < , ? , ? , >, =, ? ? tipos log somente são comparados por = ou ? ? funções básicas podem ter resultados diferentes dos de seus argumentos. Exemplos: 20.1 + 0.84 = 20.94 trunc(-75.433333) = -75 2>3=F real (1) = 1. int (0.0005) = 0Especialização em Bioinformática F. M. P. Raupp/LNCC 7
  8. 8. Tipos construídos 1 - vetor • agrega número fixo de dados de um mesmo tipo • formato: vet [ limite_inf .. limite_sup ] de tipobásico onde limite_inf e limite_sup são constantes inteiras • exemplos: notas: vet [ 1 .. 3 ] de real notas = [ 8.4, 5.0, 7.6 ] classe_social: vet [ 1..4 ] de car classe_social = [ ‘A’, ‘B’, ‘C’, ‘D’ ]Especialização em Bioinformática F. M. P. Raupp/LNCC 8
  9. 9. 2 - registro • reúne dados de diferentes tipos • formato: reg( elem1: tipo1, elem2 : tipo2, ... , elemn : tipo n ), onde elemi é o i-ésimo elemento do registro • exemplos: empregado: reg (num_ord: int, cargo: car, sal: real) empregado.num_ord = 123 empregado.cargo = ‘m’ empregado.sal = 523,00 aminoacido: reg (codigo: car, massa_atom: real) aminoacido.codigo = T aminoacido.massa_atom = 1000.05Especialização em Bioinformática F. M. P. Raupp/LNCC 9
  10. 10. 3 - seqüência • coleção ordenada de dados de um mesmo tipo sem restrição de tamanho • formato seq tipobásico onde tipobásico é o tipo das componentes • exemplos x : car b, r, q, seqvazia: seq car seqvazia = ‘ ‘ % seqüência vazia q = ‘ARNDCQ’ • funções pré-existentes x = princ ‘ARNDCQ’ % princ faz x = ‘A’ r = cont q % cont faz r = ‘RNDCQ’ b = q conc ‘T’ % conc faz b= ‘ARNDCQT’Especialização em Bioinformática F. M. P. Raupp/LNCC 10
  11. 11. 4 - alternativa (alt) • define uma variável com mais de um tipo • formato: alt ( tipo1 | ... | tipon ) • exemplos: aminoacido: alt (int | car) aminoacido = 1 aminoacido = ‘A’Especialização em Bioinformática F. M. P. Raupp/LNCC 11
  12. 12. 5 - referência (ref) • alocação regular: compilador declaração de endereço para uma variável seu valor • alocação dinâmica: compilador referência a endereço para 1a. parte uma variável seu endereço compilador alocação da endereço para 2a. parte variável seu valor desalocação compilador endereço para 3a. parte da variável valor liberadoEspecialização em Bioinformática F. M. P. Raupp/LNCC 12
  13. 13. • formatos: ref tipobásico aloque (variável) desaloque (variável) • exemplos: p : ref int aloque (p) desaloque (p) • acesso aos dados: ? o identificador variável acessa o endereço na memória ? o identificador variável? acessa seu valor • exemplos: p = 6539783ab34ade p? = 2034Especialização em Bioinformática F. M. P. Raupp/LNCC 13
  14. 14. ? valores dos endereços da memória são atribuídos ou comparados (= ou ? ), e não operados. ? se variável = nil, então ela não aponta para nenhum valor medida : ref real medida = nilEspecialização em Bioinformática F. M. P. Raupp/LNCC 14
  15. 15. 6 - enumeração (enu) • define tipo de dados por meio de valores ordenados. • formato geral ( id 1, id2 , ..., idn ) • exemplos: mês = (jan,fev,mar,abr,mai,jun,jul,ago,set,out,nov,dez) mês_nasc : mês base = (ade, cit, gua, tim) aminoacido : vet [1 .. 100 ] de base aminoacido [2] = citEspecialização em Bioinformática F. M. P. Raupp/LNCC 15
  16. 16. Construindo novos tipos • a partir de tipos básicos e construídos podemos formar novos tipos • formato: tipo nome :: definição • exemplos: tipo cadeia :: seq car dna : cadeia dna = ‘FELTDAIP’ tipo semestre :: reg (sem : int, ano: int) inicio_curso : semestre inicio_curso.sem = 1 inicio_curso.ano = 2002Especialização em Bioinformática F. M. P. Raupp/LNCC 16
  17. 17. Estrutura de um algoritmo• um algoritmo é definido por um conjunto de instruções• formato geral : nome % comentários dados comandos principais procedimentos• os dados são descritos por declarações de tipos e variáveis tipo nome :: definição var nome1, nome2, ... , nomen : tipo;• exemplos de dados: tipo nome :: seq car var estado, regiao, pais : nome; var i, j, k : int; var area : real;Especialização em Bioinformática F. M. P. Raupp/LNCC 17
  18. 18. atribuição comunicação simples comandos condicionais compostos iterativos rotinasEspecialização em Bioinformática F. M. P. Raupp/LNCC 18
  19. 19. Tipos de Comandos • comandos em um algoritmo podem ser simples e compostos: início comando_1; comando_2; ? comando_n fim • um comando mais à direita está associado a um comando imediatamente acima mais à esquerdaEspecialização em Bioinformática F. M. P. Raupp/LNCC 19
  20. 20. 1 - atribuição: • formato: variável ? expressão; • exemplos: var x, y, z : real; var aux; var custo: vet [0..5] de real; var barato: log; x ? (y+z) / 2; custo[1] ? custo[2] + 7,80; barato ? custo[1] < custo[5]; aux ? x; x ? y; y ? aux;Especialização em Bioinformática F. M. P. Raupp/LNCC 20
  21. 21. 2 - entrada: • formato: leia (lista_de_variáveis); • exemplos: var x : real; var i : int; var a : vet[1..3] de real; leia (x, a, i); 3 - saída: • formato: escreva (lista_de_variáveis); • exemplos: var x : real; var i : int; var a : vet[1..3] de real; escreva (x, a, i);Especialização em Bioinformática F. M. P. Raupp/LNCC 21
  22. 22. 4 - Comandos condicionais: • formatos: (1) se condição então comando; (2) se condição então comando_1 senão comando_2; • exemplos: se x < y então z ? x senão z ? y; ou início z ? y; se x < z então z ? x fimEspecialização em Bioinformática F. M. P. Raupp/LNCC 22
  23. 23. 5 - Comandos de iteração: (1) enquanto condição faça comando; • exemplos: enquanto x ? y faça x ? 2*x; enquanto valor = V faça inicio leia(i); i ? i + 1; se i = 10 então valor ? F fim (2) repita comando até condição; • exemplo: x ? 0; repita x ? x + 1; escreva ( x ); até x > 10; • o bloco de comandos é realizado pelo menos 1 vezEspecialização em Bioinformática F. M. P. Raupp/LNCC 23
  24. 24. (3) para var de val_inic com incr val_incr até val_fin faça comando;• var, var_inic, val_incr e val_fin devem ser do tipo int;• exemplo: somando 10 números reais var v: vet [ 1 .. 10 ] de real; início leia(v); soma ? 0; para i de 1 com incr 1 até 10 faça soma ? soma + v[i]; escreva(soma); fim Especialização em Bioinformática F. M. P. Raupp/LNCC 24
  25. 25. 6 - Escape da malha: escape; • interrompe o comando de iteração • exemplo: enquanto i < 10 faça início ... se x = 5 então escape; ... fim escreva(x); 7 - Seleção: conforme variável faça lista_de_casos; • formato de lista_de_casos: valor1: comando1;... ; valorn: comandon; (outro: comando;) • exemplo: conforme i faça 0:x? sen(x); 1:x? cos(x); 2:x? tg(x); outro: x ? x+1;Especialização em Bioinformática F. M. P. Raupp/LNCC 25
  26. 26. Procedimentos(a) rotina• formato: proc nome_do_proc (lista_de_parâmetros) comandosonde a lista_de _parâmetros é (nome1 : tipo1 , ... , nomen : tipon )• chamada da rotina pelo algoritmo: execute nome_do_proc (lista_de_argumentos)• os tipos dos parâmetros e argumentos devem ser iguais• o controle volta ao algoritmo principal após a execuçãodo último comando da rotina ou após o comando: retorneEspecialização em Bioinformática F. M. P. Raupp/LNCC 26
  27. 27. • exemplo de rotina tipo cadeia :: seq de car var cadpolip: cadeia; início leia (cadpolip); execute acheproteina (cadpolip); fim proc acheproteina (polip: cadeia) var proteina: cadeia; inicio proteina ? ‘CMFPSYATLIDEANDQE’; resul? F; se polip = proteina então resul ? V; escreva (resul) fimEspecialização em Bioinformática F. M. P. Raupp/LNCC 27
  28. 28. (b) função• formato: proc nome : tipo (lista_de_parâmetros)onde tipo define o tipo do resultado da função• a chamada da função junto com a lista de argumentos éfeita avaliando-se uma expressão• o controle volta ao algoritmo principal após o comando: retorne expressão• utilizamos função quando o procedimento retorna aoprograma somente um valorEspecialização em Bioinformática F. M. P. Raupp/LNCC 28
  29. 29. • exemplo: tipo cadeia :: seq de car var grupo : cadeia; var achou : log; início leia (grupo); achou ? acheproteina ( grupo); escreva (achou); fim proc acheproteina : log (grupodado: cadeia) var proteina : cadeia; inicio proteina ? ‘CMFPSYATLIDEANDQE’; se grupodado = proteina então retorne V senão retorne F fimEspecialização em Bioinformática F. M. P. Raupp/LNCC 29
  30. 30. vetores matrizes Estruturas de dados pilhas listas filas árvoresEspecialização em Bioinformática F. M. P. Raupp/LNCC 30
  31. 31. Vetores e Matrizes (1) vetores ‘A’ b= ‘A’ ‘C’ ‘G’ ‘T’ b = ‘C’ ‘G’ ‘T’ • consulta aos elementos: b[1] = ‘A’ b[2] = ‘C’ b[3] = ‘G’ b[4] = ‘T’ • atribuição: b[4] ? ‘U’ • representação natural: [ ‘A’, ‘C’ , ‘G’ , ‘U’ ] do tipo vet [1 .. 4] de carEspecialização em Bioinformática F. M. P. Raupp/LNCC 31
  32. 32. • representação baseada: um vetor armazenado namemória ocupa células contíguas ‘A’ ‘C’ ‘G’ ‘U’ b b+1 b+2 b+3(2) matrizes -1 2 1 M = -2 0 1 0 1 -1• consulta a um elemento da matriz: o primeiro índicerefere-se à linha e o segundo à coluna do elemento• representação natural: M: vet [1.. 3] de vet [1 ..3] de int M ? [ [-1,2,1], [-2,0,1], [0,1,-1] ]; (M[2]=[-2,0,1] e M[2][1] = -2 )Especialização em Bioinformática F. M. P. Raupp/LNCC 32
  33. 33. • representação linear: as matrizes são armazenadas por linhas -1 2 1 M = -2 0 1 0 1 -1 1a. linha 2a. linha 3a. linha -1 2 1 -2 0 1 0 1 -1 M M+1 ... M+8Especialização em Bioinformática F. M. P. Raupp/LNCC 33
  34. 34. Listas Lineares • estrutura de dados organizada de forma linear • uma lista possui n nós (n ? 0) • um nó pode conter um dado básico ou composto • quando n=0 dizemos que a lista é vazia lista nó1 nó2 nó3 nó4 ... • podemos operar sobre os nós de uma lista: consultar, inserir, deletar, etc • a representação dos nós depende do armazenamento da lista na unidade de memóriaEspecialização em Bioinformática F. M. P. Raupp/LNCC 34
  35. 35. • representação por contigüidade: os nós da lista estão armazenados em endereços contíguos da memória • definição tipo lista :: vet [1 .. n] de tipodedado • declaração de uma lista var x : lista • exemplo: (lista de cadeias laterais dos resíduos de uma proteína) tipo cadeia :: seq car tipo lista :: vet [1 .. 200] de cadeia var PROTT12 : lista; PROTT12[100] ? ‘ CB H H H ‘Especialização em Bioinformática F. M. P. Raupp/LNCC 35
  36. 36. • procedimento para acessar o k-ésimo nó da lista:proc acessar (x: lista; k, end: int ; sinal: log; val: tipodedado) se k ? 0 ou k > end então sinal ? F senão início val ? x [ k ]; sinal ? V fim x(1) x(2) x(3) ... x(k) ... x(end) Especialização em Bioinformática F. M. P. Raupp/LNCC 36
  37. 37. • procedimento para inserir um novo nó antes do k-ésimo nó da lista: x(1) x(2) x(3) ... x(k) ... x(end) x(1) x(2) x(3) ... val x(k) ... x(end) 1 2 3 k k+1 end+1proc inserir (x: lista; k, end: int ; sinal: log; val: tipodedado) var i : int ; se k ? 0 ou k > end então sinal ? F senão início para i de end com incr -1 até k faça x [ i + 1] ? x [ i ]; end ? end + 1; x [ k ] ? val; sinal ? V fimEspecialização em Bioinformática F. M. P. Raupp/LNCC 37
  38. 38. • procedimento para remover o k-ésimo nó da lista: x(1) x(2) x(3) ... x(k) x(k+1) ... x(end) x(1) x(2) x(3) ... x(k+1) ... x(end) 1 2 3 k end-1 proc remover (x : lista; k, end: int ; sinal : log) var i : int ; se k ? 0 ou k > end então sinal ? F senão início para i de k com incr 1 até end-1 faça x [ i ] ? x [ i + 1]; end ? end - 1; sinal ? V fimEspecialização em Bioinformática F. M. P. Raupp/LNCC 38
  39. 39. (b) representação por encadeamento• indicada para representação de listas de tamanho flexível• ordem virtual entre os nós• cada nó possui informação sobre seu dado e sobre o nóseguinte• definição tipo nó :: reg ( dado : tipodedado; prox : ref nó ) dadox prox dadoy prox nó i nó i+1 • lista vazia é denotada por nil ou /Especialização em Bioinformática F. M. P. Raupp/LNCC 39
  40. 40. • inicializa-se uma lista fazendo-se ref a uma lista vazia lista nil var lista : ref nó; lista ? nil• para compor uma lista precisamos de uma variável auxiliarp do tipo referência a nó. Após o comando aloque(p)temos as informações a seguir:p ? contém o end da posição de um reg. com dois elementosp ? . dado ?? contém o valor do dado do nó pp ? . próximo ?? informa a posição do nó seguinte ao nó p p dado proxEspecialização em Bioinformática F. M. P. Raupp/LNCC 40
  41. 41. • exemplo: inicialização de uma lista encadeada com um nó lista valor prox nil p tipo nó :: reg (dado: info; prox: ref nó) var lista, p: ref nó; valor : info; lista ? nil; leia (valor); aloque (p); % aloca endereços para elementos de reg p? . dado ? valor; p? . prox ? lista; lista ? p; Especialização em Bioinformática F. M. P. Raupp/LNCC 41
  42. 42. Pilhas• estrutura de dados linear que obedece o seguinte critério:o último elemento inserido no conjunto será o primeiroelemento a ser retirado (last in first out - lilo)• pode-se definir pilhas utilizando seqüências• exemplo: tipo pilha_seq :: seq car; var p : pilha_seq; var j : car; p ? ‘ ‘; % pilha vazia p ? ‘abcdefghij’; se p = ‘ ‘ % acessa topo da pilha então erro senão j ? princ p;Especialização em Bioinformática F. M. P. Raupp/LNCC 42
  43. 43. • pode-se definir pilha usando um registro contendo umdado inteiro, que indica o topo da pilha, e um vetor paraos elementos da pilha Registro de uma pilha topo elem1 elem2 ... elemnEspecialização em Bioinformática F. M. P. Raupp/LNCC 43
  44. 44. • exemplo: tipo pilha_vet :: reg (topo: int; elem: vet [1..10] de dado) var p: pilha_vet; var i, j : dado; p.topo ? 0; % inicialização se p.topo = 10 % empilha um elemento i então erro senão inicio p.topo ? p.topo + 1; p.elem [ p.topo ] ? i fim se p.topo = 0 % desempilha um elemento entao nada senão p.topo ? p.topo - 1 se p.topo = 0 % consulta elemento no topo da pilha entao erro senão j ? p.elem [ p.topo ]Especialização em Bioinformática F. M. P. Raupp/LNCC 44
  45. 45. Filas• estrutura de dados linear que obedece ao critério:o primeiro elemento inserido no conjunto será o primeiroelemento a ser retirado (first in first out - fifo)• pode-se definir filas utilizando registros registro de uma fila começo término elem1 elem2 ... elemnEspecialização em Bioinformática F. M. P. Raupp/LNCC 45
  46. 46. tipo fila_vet:: reg (com,term: int; elem: vet [1..10] de dado)var f : fila_vet;var i, j : dado;f.com? 1; % inicializaçãof. term ? 0;se f.term = 10 % insere na fila um dado ientão errosenão inicio f.term ? f.term + 1; f.elem [ f.term ] ? i fimse f.term < f.com % retira da filaentão nadasenão f.com ? f.com + 1se f.term < f.com % consulta elemento no início da filaentão errosenão j ? f.elem [ f.com ]Especialização em Bioinformática F. M. P. Raupp/LNCC 46
  47. 47. Árvores • estrutura de dados com relação de hierarquia • uma árvore T é um conjunto finito de nós que apresenta um nó denominado raiz e os demais nós formam subárvores raiz nó grau nível A 2 0 B 0 1 C 3 1 D 0 2 E 0 2 F 0 2 árvore TEspecialização em Bioinformática F. M. P. Raupp/LNCC 47
  48. 48. Árvores Binárias • são estruturas do tipo árvore, onde o grau de cada nó é no máximo 2 • subárvores de uma árvore binária são especificadas por subárvores à esquerda e subárvores à direita • exemplos de aplicações organismos hidrocarbonos CnH2n+2 organismosprocarioto eucarioto organelas núcleo proteínas dna Especialização em Bioinformática F. M. P. Raupp/LNCC 48
  49. 49. • usa-se o método de alocação encadeada para alocar osdados de uma estrutura em árvore binária na unidade dememória• ordem pré-fixada: o primeiro nó é a raiz da árvore,seguido pelas subárvores da esquerda e depois da direita, eretornando ao nó imediatamente acima• esquema para cada nó da árvore• exemplo:Especialização em Bioinformática F. M. P. Raupp/LNCC 49
  50. 50. • muitos algoritmos para busca de dados em estruturas de árvores utilizam recursividade • recursividade é uma técnica utilizada em algoritmos quando deseja-se que um procedimento chame a si mesmo • exemplo: fatorial de um número natural 9! = 9*8*7*6*5*4*3*2*1 0! = 1 n! = (n-1)! * n, para n > 0 proc fat: int (n: int) se n = 0 então retorne 1 senão retorne n * fat ( n - 1);Especialização em Bioinformática F. M. P. Raupp/LNCC 50
  51. 51. Busca de Dados• uma tabela reúne em uma mesma linha diferentes tiposde dados que se relacionam.• uma tabela deve ter um identificador chave para seusdados proteína seqüência autor Prot1a ‘VALDET’ Hamilton, F. Prot2b ‘CILG’ Levi, A. Prot3c ‘FELD’ Levi, A. Prot4d ‘AA’ Ruth, M.• busca seqüencial e busca binária são exemplos demetodologias aplicadas para consultar dados em umatabela ou lista linear• vamos definir tabela como sendo um vetor de tamanhon de registro, o qual possui um campo chaveEspecialização em Bioinformática F. M. P. Raupp/LNCC 51
  52. 52. • busca seqüencial para tabela não ordenada:proc seq_nord ( t : tabela; arg : chave; n, i : int) % t : tabela para a busca % arg : argumento de busca % n : número de entradas na tabela % i :índice da tabela procurado ( i = 0 : não existe arg) var r : int; inicio i ? 0; para r de 1 com incr 1 até n faça se t[ r ].chave = arg então inicio i ? r; escape fim fim % do procedimentoEspecialização em Bioinformática F. M. P. Raupp/LNCC 52
  53. 53. • busca seqüencial para tabela ordenadaproc seq_ord ( t : tabela; arg : chave, n, i : int) % t – tabela para a busca % arg – argumento de busca % n – número de entradas na tabela % i – índice da tabela procurado (i = 0: não existe arg) var r : int; inicio i ? 0; para r de 1 com incr 1 até n faça se t[ r ].chave ? arg então inicio se t[ r ].chave = arg então i ? r ; escape fim fim % do procedimentoEspecialização em Bioinformática F. M. P. Raupp/LNCC 53
  54. 54. b) busca binária para tabela ordenada proc busca_bin ( t : tabela; arg : chave, n, i : int) % t : tabela para a busca % arg : argumento de busca % n : número de entradas na tabela % i : índice da tabela procurado (i = 0: não existe arg) var r, u, v : int; início i ? 0; u ? 1; v ? n; enquanto u ? v e i = 0 faça início r ? ( u + v ) div 2; se t[ r ].chave = arg então i ? r senão se arg > t[ r ].chave então u ? r + 1; senão v ? r – 1; fim % do enquanto fim % do procedimentoEspecialização em Bioinformática F. M. P. Raupp/LNCC 54
  55. 55. Classificação de Dados• classificamos dados para fazer relatórios, por exemplo• as entradas de uma tabela são ordenadas através desua chave de classificação• existem vários algoritmos de ordenação de uma tabelaou uma lista linear• o exemplo a seguir ordenar uma tabela com númerosinteiros de d dígitos.Especialização em Bioinformática F. M. P. Raupp/LNCC 55
  56. 56. Fila inicial 19 13 45 27 01 26 31 02 09 60 filas 1o. dígito 2o. dígito F0 60 01,02,09 F1 01,31 13,19 F2 02 26,27 F3 13 31 F4 nil 45 F5 45 nil F6 26 60 F7 27 nil F8 nil nil F9 19,09 nil Fila final 01 02 09 13 19 26 27 31 45 60Especialização em Bioinformática F. M. P. Raupp/LNCC 56
  57. 57. proc ord_distrib ( d, n: int ; c : vet [1 .. n] de int ) % c: vetor contendo as chaves da tabela % d : número de dígitos do maior número da tabela % n : número de elementos da tabela (n=10) var i, j, k: int; início para k de 0 com incr 1 até 9 faça Fk ? nil ; para i de 1 com incr 1 até d faça para j de 1 com incr 1 até n faça início k ? o menor i-ésimo dígito da c[ j ]; Fk ? c[ j ] % inserção de c[j] na fila Fk fim j ? 1; para k de 0 com incr 1 até 9 faça enquanto Fk ? nil faça início c[ j ] ? Fk; % remoção de c[j] da fila Fk j? j+1 fim fim % do procedimentoEspecialização em Bioinformática F. M. P. Raupp/LNCC 57
  58. 58. Conceitos Importantes (1) Complexidade de Tempo de Execução de um Algoritmo entrada saída de passos de dados resultado • em um algoritmo cada passo consiste na execução de um número de operações básicas com tempos de execução constantes • o tempo de execução de um algoritmo é o tempo (h, min, ou seg) que este leva para produzir um resultadoEspecialização em Bioinformática F. M. P. Raupp/LNCC 58
  59. 59. • analiticamente, o tempo de execução de um algoritmo é determinado contando-se o número de passos a menos de constantes aditivas e multiplicativas • exemplo: algoritmo: inversão de uma seqüência s de tamanho n leia (s) para j de 1 com incr 1 até (n div 2) faça temp ? s[j] s[j] ? s[n-j+1] s(1) s(2) ... s(n-1) s(n) s[n-j+1] ? temp fim escreva (s) • complexidade: ler, executar um bloco com 3 passos repetidos n/2 vezes mais escrever: 1 + 3 x n/2 + 1= 2 + 3n/2 ? complexidade nEspecialização em Bioinformática F. M. P. Raupp/LNCC 59
  60. 60. (2) Notação O T ( n ) ? n 2 ? 2 n ? 1 ? T (n ) ? O (n 2 ) T ( n ) ? 2 ? 3n/2 ? T ( n ) ? O ( n ) T ( n ) ? 3n 2 ? 1 ? T ( n ) ? O ( n 2 ) T ( n ) ? 2002 ? T ( n ) ? O (1) T ( n ) ? n / 2 ? 1 ? T (n ) ? O (n ) T (n) ? 2n ? n 2 ? T (n) ? O(2n ) (3) Outras complexidades • lembrando do modelo computacional, podemos definir as complexidades : ? de espaço (quantidade de memória) ? de entrada e de saída (número de acessos à memória externa) ? de comunicação (número de mensagens trocadas)Especialização em Bioinformática F. M. P. Raupp/LNCC 60
  61. 61. • dado um algoritmo A e um conjunto de entradas de dados E, vamos denotar por Ti o tempo de execução de A tendo como entrada de dados Ei, então definimos: ? complexidade do pior caso de A: max { Ti }. ? complexidade do melhor caso de A: min { Ti }. ? complexidade do caso médio de A: ? pi Ti , onde pi é a probabilidade de ocorrência da entrada Ei. • o conceito de complexidade do pior caso é o mais utilizado pois ele fornece um limite superior para o tempo de execução de um algoritmo para todos os critérios.Especialização em Bioinformática F. M. P. Raupp/LNCC 61
  62. 62. (4) Classe P e NP algoritmo complexidade eficiente polinomial Classe P existe um algoritmo Problemas polinomial de decisão Classe NP pode existir um algoritmo polinomial para justificar a resposta do tipo simEspecialização em Bioinformática F. M. P. Raupp/LNCC 62

×