Algoritmos e estruturas de dados
Upcoming SlideShare
Loading in...5
×
 

Algoritmos e estruturas de dados

on

  • 1,225 views

 

Statistics

Views

Total Views
1,225
Views on SlideShare
1,225
Embed Views
0

Actions

Likes
0
Downloads
45
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Algoritmos e estruturas de dados Algoritmos e estruturas de dados Presentation Transcript

    • Algoritmos e Estruturas de Dados Fernanda Maria Pereira Raupp Laboratório Nacional de Computação Científica
    • Modelo de computador e de programaEspecialização em Bioinformática F. M. P. Raupp/LNCC 2
    • 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
    • básicos dados construídos novosEspecialização em Bioinformática F. M. P. Raupp/LNCC 4
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • • 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
    • ? 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
    • 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
    • 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
    • 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
    • atribuição comunicação simples comandos condicionais compostos iterativos rotinasEspecialização em Bioinformática F. M. P. Raupp/LNCC 18
    • 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
    • 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
    • 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
    • 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
    • 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
    • (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
    • 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
    • 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
    • • 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
    • (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
    • • 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
    • vetores matrizes Estruturas de dados pilhas listas filas árvoresEspecialização em Bioinformática F. M. P. Raupp/LNCC 30
    • 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
    • • 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
    • • 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
    • 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
    • • 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
    • • 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
    • • 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
    • • 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
    • (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
    • • 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
    • • 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
    • 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
    • • 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
    • • 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
    • 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
    • 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
    • Á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
    • Á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
    • • 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
    • • 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
    • 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
    • • 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
    • • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • • 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
    • (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
    • • 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
    • (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