Strings (Casamento de padrões) Estrutura de Dados II Jairo Francisco de Souza

Tamanho: px
Começar a partir da página:

Download "Strings (Casamento de padrões) Estrutura de Dados II Jairo Francisco de Souza"

Transcrição

1 Strings (Casamento de padrões) Estrutura de Dados II Jairo Francisco de Souza

2 Strings Tipo de dado importante para diversas aplicações. Abordaremos algumas questões relacionadas com Strings nos seguintes tópicos Busca em Strings (String matching) Codificação Compressão 2

3 Busca em Cadeias de Caracteres Dados a ser processados nem sempre se decompõem logicamente em registros independentes com pequenas partes identificáveis Este tipo de dados é caracterizado apenas pelo fato de que pode ser escrito como uma cadeia Uma cadeia é uma seqüência linear de caracteres, tipicamente podendo ser muito longa 3

4 Busca em Cadeias de Caracteres Cadeias são centrais em sistemas de processamento de textos, recuperação de informação, estudo de sequências de DNA em biologia computacional, etc. Esses objetos podem ser bem grandes e algoritmos eficientes são necessários para manipulá-los T = ABACAABACCABACABAABB P = ABACAB P é uma substring de T, mais exatamente, P = T[ ]. 4

5 Busca em Cadeias de Caracteres Outro tipo de cadeia é a cadeia binária Cadeia binária é uma seqüência de apenas valores 0 e 1 Em certo sentido, isso é simplesmente um caso especial de cadeia de caracteres Mas vale a pena fazer distinção, porque algoritmos diferentes são apropriados para cada caso Além disso, cadeias binárias aparecem naturalmente em muitas aplicações Por exemplo, alguns sistemas gráficos representam figuras como cadeias binárias 5

6 Busca em Cadeias de Caracteres Veremos que o tamanho do alfabeto a partir do qual os caracteres são tomados para formar uma cadeia é um fator importante no projeto de algoritmos de processamento de cadeias Uma operação fundamental sobre cadeias é o casamento de padrão: Dado uma cadeia de comprimento N e um padrão de comprimento M, encontrar uma ocorrência do padrão no texto Vamos usar o termo texto para referenciar tanto uma seqüência de valores 0 e 1 quanto qualquer outro tipo especial de cadeia 6

7 Busca em Cadeias de Caracteres A maioria dos algoritmos para o problema de casamento de padrão pode ser facilmente estendida para encontrar todas as ocorrências do padrão no texto O problema de casamento de padrão pode ser visto também como um problema de busca com o padrão sendo a chave 7

8 Um Breve Histórico O algoritmo mais óbvio de busca em cadeia, chamado algoritmo força-bruta ou algoritmo ingênuo, tem o pior caso de tempo de execução proporcional a MN Embora as cadeias que aparecem em muitas aplicações levam a um tempo de execução que é virtualmente proporcional a M + N 8

9 Um Breve Histórico Em 1970, S. A. Cook provou um resultado teórico sobre um tipo particular de autômato que implicava na existência de um algoritmo de casamento de padrão com tempo proporcional a M + N no pior caso D. E. Knuth e V. R. Pratt seguindo a construção que Cook usara na demonstração do seu teorema obtiveram um algoritmo relativamente simples e prático 9

10 Um Breve Histórico Ocorreu também que J. H. Morris descobriu praticamente o mesmo algoritmo como solução de um problema de edição de texto Os três cientistas, Knuth, Morris e Pratt, não se preocuparam em publicar o algoritmo até 1976 Nesse meio tempo, R. S. Boyer e J. S. Moore (e, independentemente, R. W. Gosper) descobriram um algoritmo que é muito mais rápido em muitas aplicações Muitos editores de texto usam esse algoritmo para busca de cadeias 10

11 Um Breve Histórico Em 1980, M. O. Rabin e R. M. Karp desenvolveram um algoritmo tão simples quanto o de força bruta que roda virtualmente sempre em tempo proporcional a M + N Além disso, o algoritmo deles estende-se facilmente a padrões bidimensionais que o torna mais útil que os outros para processamento de figuras 11

12 Algoritmo Força-Bruta O método óbvio para casamento de padrão resume-se em testar, em cada posição do texto onde o padrão pode casar, se ele de fato casa O proceedimento forcabruta a seguir busca dessa maneira a primeira ocorrência do padrão p no texto t 12

13 Algoritmo Força-Bruta procedure ForcaBruta ( var T: TipoTexto ; var n : integer ; var P: TipoPadrao; var m : integer ) ; { Pesquisa P[ 1..m] em T[ 1..n] } var i, j, k : Integer ; begin for i := 1 to n m + 1 do begin k := i ; j := 1; while T[ k ] = P[ j ] do begin j := j + 1; k := k + 1; end; if j > m then writeln ( Casamento na posicao, i:3 ) ; end; end; 13

14 Algoritmo Força-Bruta 14

15 Algoritmo Força-Bruta Pior caso O pior caso ocorre quando, por exemplo, o padrão e o texto são os dois uma seqüência de zeros seguidos por um 1 Por exemplo, e Ou seja, quando é preciso percorrer praticamente todo P várias vezes a cada posição de T, estando P no fim da cadeia Complexidade: m*n 15

16 Algoritmo KMP A idéia básica do algoritmo desenvolvido por Knuth, Morris e Pratt é: quando um descasamento é detectado, o falso começo consiste em caracteres que já conhecemos de antemão (porque eles estão no padrão) De alguma forma, podemos levar vantagem desta informação ao invés de retroceder o índice j por todos os caracteres conhecidos 16

17 Algoritmo KMP Foi o primeiro algoritmo cujo pior caso tem complexidade de tempo linear no tamanho do texto: O(n) É um dos algoritmos mais famosos para resolver casamento de padrões Tem implementação complicada e na prática perde em eficiência para outros algoritmos, como o de Boyer. 17

18 Algoritmo KMP O algoritmo computa o sufixo mais longo no texto que é também o prefixo de P. Quando o comprimento do sufixo no texto é igual a P, ocorre um casamento. O pré-processamento de P permite que nenhum caractere seja reexaminado. O apontador para o texto nunca é decrementado. 18

19 Algoritmo KMP 19

20 Algoritmo KMP Porém, como saber quantas posições devem ser deslocadas? Para tal, utilizamos uma função chamada de Função Prefixo, denotada por π. Por enquanto iremos considerar que essa função é conhecida. 20

21 Função Prefixo Tendo P = ababaca contra um texto T. Em (a) sendo, q = 5, de caracteres que parearam com T. Conhecendo estes q caracteres do texto é possível determinar que alguns deslocamentos s são inválidos (não precisam ser testados). O deslocamento s = s + 1 é inválido, mas o deslocamento s = s + 2 é potencialmente válido pelo que conhecemos do texto. Dado que q caracteres tiveram comparações com sucesso no deslocamento s, o próximo potencial deslocamento válido será: s = s + (q π[q]) 21

22 Função Prefixo A função prefixo encapsula o conhecimento sobre quantas posições deve-se caminhar para continuar procedendo o casamento do padrão, evitando comparações inúteis. Para tal, a função analisa o padrão fornecido e cria uma tabela de deslocamentos. Idéia simples. 22

23 Função Prefixo Valores da função prefixo para P: P q π a b a b a c a Outro exemplo: q P b c b a b c b a e b c b a b c b a Prefix

24 Caso importante Considere o exemplo abaixo: i P c g c g a g c g c g c Prefix ? Qual o valor para Prefix(10)? Prefix(9)=4. Mas P(4) P(10). Podemos concluir que Prefix(10)=0? Não, não podemos. 24

25 Caso importante Existe um prefixo mais curto com tamanho 2 que é igual a um sufixo de P(0,9), e P(10)=P(2). Podemos concluir que Prefix(10)=2+1=3. i P c g c g a g c g c g c Prefix ? 25

26 Exemplo 26

27 Algoritmo KMP public static int KMPmatch(String text, String pattern) { int n = text.length(); int m = pattern.length(); int[] fail = prefixfunction(pattern); int i = 0; int j = 0; while (i < n) { if (pattern.charat(j) == text.charat(i)) { if (j == m - 1) return i - m + 1; // match i++; j++; } else if (j > 0) j = fail[j - 1]; else i++; } return -1; // no match } public static int[] prefixfunction(string pattern) { int[] fail = new int[pattern.length()]; fail[0] = 0; int m = pattern.length(); int j = 0; int i = 1; while (i < m) { if (pattern.charat(j) == pattern.charat(i)) { fail[i] = j + 1; i++; j++; } else if (j > 0) // j follows a matching prefix j = fail[j - 1]; else { // no match fail[i] = 0; i++; } } return fail; } 27

28 Algoritmo KMP Como são evitadas comparações em P, o algoritmo é executado em tempo polinomial. É feito um pré-processamento em P O(n) É feito um processamento em T O(m) Processamento total: O(n + m) 28

29 Exercício Considere o texto abaixo: ABACAABACCABACABAABB Pesquise o padrão ABACAB utilizando o método KMP. Diga quantas comparações o método faz. 29

30 Algoritmo BMH Também chamado de Boyer-Moore-Horspool. Pela extrema simplicidade de implementação e comprovada eficiência, o BMH deve ser escolhido em aplicações de uso geral que necessitam realizar casamento exato de cadeias. A idéia é pesquisar no padrão no sentido da direita para a esquerda, o que torna o algoritmo muito rápido. Executado frequentemente em editores de texto para os comandos de localizar" e "substituir". Veremos primeiro o algoritmo BM, o algoritmo original. 30

31 Algoritmo BM O algoritmo faz a varredura dos símbolos do padrão da direita para à esquerda (rightmost). O algoritmo utiliza duas funções pré-processadas para deslocar o padrão à direita. Estas funções dos deslocamentos são chamadas funções de ocorrência e de casamento. 31

32 Heurística de ocorrência Alinha a posição que causou a colisão no texto com o primeiro caractere no padrão que casa com este caractere; Ex.: P ={cacbac}, T ={aabcaccacbac} a a b c a c c a c b a c c a c b a c c a c b a c c a c b a c c a c b a c c a c b a c 32

33 Heurística de ocorrência A partir da posição 6, da direita para a esquerda, existe uma colisão na posição 4 de T, entre b do padrão e c do texto. Logo, o padrão deve ser deslocado para a direita até o primeiro caractere no padrão que casa com c. O processo é repetido até encontrar um casamento a partir da posição 7 de T. 33

34 Heurística do casamento Ao mover o padrão para a direita, faça-o casar com o pedaço do texto anteriormente casado. Ex.: P ={cacbac} no texto T ={aabcaccacbac} a a b c a c c a c b a c c a c b a c c a c b a c c a c b a c 34

35 Heurística do casamento Novamente, a partir da posição 6, da direita para a esquerda, existe uma colisão na posição 4 de T, entre o b do padrão e o c do texto. Neste caso, o padrão deve ser deslocado para a direita até casar com o pedaço do texto anteriormente casado, no caso ac, deslocando o padrão 3 posições à direita. O processo é repetido mais uma vez e o casamento entre P e T ocorre. 35

36 Escolha da heurística O algoritmo BM escolhe a heurística que provoca o maior deslocamento do padrão. Esta escolha implica em realizar uma comparação entre dois inteiros para cada caractere lido do texto, penalizando o desempenho do algoritmo com relação ao tempo de processamento. Várias propostas de simplificação ocorreram ao longo dos anos. As que produzem os melhores resultados são as que consideram apenas a heurística de ocorrência. 36

37 Algoritmo BMH A simplificação mais importante é devida a Horspool em Executa mais rápido do que o algoritmo BM original. Parte da observação de que qualquer caractere já lido do texto a partir do último deslocamento pode ser usado para endereçar a tabela de deslocamentos. Endereça a tabela com o caractere no texto correspondente ao último caractere do padrão. 37

38 Algoritmo BMH Tabela de Deslocamentos Para pré-computar o padrão o valor inicial de todas as entradas na tabela de deslocamentos é feito igual a m. A seguir, apenas os m 1 primeiros caracteres do padrão são usados para obter os outros valores da tabela. Formalmente, d[x] = min { j tal que j = m (1 j < m & P [m j] = x) }. Ex.: Para o padrão P ={teste}, os valores de d são d[t] = 1, d[e] = 3, d[s] = 2, e todos os outros valores são iguais ao valor de P, nesse caso m = 5. Para o padrão P={bola}, os valores de d são d[b] = 3, d[o] = 2, d[l] = 1, d[a] = 4. 38

39 Algoritmo BMH 39

40 Algoritmo BMH [e] 40

41 Algoritmo BMH { G C A T C G C A G A G A G T A T A C A G T A C G } 41

42 Algoritmo BMH achou! 42

43 Algoritmo BMH 43

44 Implementação procedure BMH ( var T: TipoTexto ; var n : integer ; var P: TipoPadrao ; var m: integer ) ; { Pesquisa P[ 1.. m] em T[ 1.. n] } var i, j, k : Integer ; d : array [ 0..MaxTamAlfabeto] of integer ; begin { Pre processamento do padrao } for j := 0 to MaxTamAlfabeto do d[ j ] : = m; for j := 0 to m-2 do d[ ord(p[ j ] ) ] : = m-j-1 ; i : = m; while i <= n do { Pesquisa } begin k := i ; j : = m; while (T[ k ] = P[ j ] ) and ( j >0) do begin k : = k 1; j : = j 1; end; if j = 0 then writeln ( Casamento na posicao :,k+1:3); i : = i + d[ ord(t[ i ] ) ] ; end; 44 end;

45 Exercício Considere o texto abaixo: ABACAABACCABACABAABB Pesquise o padrão ABACAB utilizando o método BMH. Diga quantas comparações o método faz. 45

46 Algoritmo BHMS Sunday (1990) apresentou outra simplificação importante para o algoritmo BM, ficando conhecida como BMHS. Variante do BMH: endereçar a tabela com o caractere no texto correspondente ao próximo caractere após o último caractere do padrão, em vez de deslocar o padrão usando o último caractere como no algoritmo BMH. Para pré-computar o padrão, o valor inicial de todas as entradas na tabela de deslocamentos é feito igual a m + 1. A seguir, os m primeiros caracteres do padrão são usados para obter os outros valores da tabela. Formalmente d[x] = min{j tal que j = m (1 j m & P [m + 1 j] = x)}. Exemplo: Para o padrão P = teste, os valores de d são d[t] = 2, d[e] = 1, d[s] = 3, e todos os outros valores são iguais ao valor de P

47 Implementação procedure BMHS ( var T: TipoTexto ; var n : integer ; var P: TipoPadrao ; var m: integer ) ; var i, j, k : Integer ; d : array [ 0.. MaxChar] of integer ; begin { Pre processamento do padrao } for j := 0 to MaxChar do d[ j ] : = m+1; for j := 0 to m-1 do d[ ord(p[ j ] ) ] : = m j ; i : = m; while i <= n do { Pesquisa } begin k := i ; j : = m; while (T[ k ] = P[ j ] ) and ( j >0) do begin k : = k 1; j : = j 1; end; if j = 0 then writeln ( Casamento na posicao :, k+1:3); i : = i + d[ ord(t[ i +1])]; end; end; 47

48 Implementação O pré-processamento do padrão ocorre nas duas primeiras linhas do código. A fase de pesquisa é constituída por um laço em que i varia de m até n, com incrementos d[ord(t[i+1])], o que equivale ao endereço na tabela d do caractere que está na i + 1-ésima posição no texto, a qual corresponde à posição do último caractere de P. 48

49 Exemplo [e] 49

50 Exemplo Shift para [c] = 4 Shift para [c] = 4 match! 50

51 Algoritmo BMHS Embora normalmente utiliza-se a comparação do padrão seguindo da direita, ao contrário dos algoritmos de BM e BMH, o algoritmo de Sunday pode comparar o padrão de forma arbitrária. Caso saiba-se qual o caracter menos comum no padrão, ele pode ser utilizado primeiro na comparação 51

52 Exercício Considere o texto abaixo: ABACAABACCABACABAABB Pesquise o padrão ABACAB utilizando o método BMHS. Diga quantas comparações o método faz. 52

53 BM - Análise Os dois tipos de deslocamento (ocorrência e casamento) podem ser pré-computados com base apenas no padrão e no alfabeto. Assim, a complexidade de tempo e de espaço para esta fase é O(m + c). O pior caso do algoritmo é O(n + rm), onde r é igual ao número total de casamentos, o que torna o algoritmo ineficente quando o número de casamentos é grande. O melhor caso e o caso médio para o algoritmo é O(n/m), um resultado excelente pois executa em tempo sublinear. 53

54 BMH - Análise O deslocamento de ocorrência também pode ser pré-computado com base apenas no padrão e no alfabeto. A complexidade de tempo e de espaço para essa fase é O(c). Para a fase de pesquisa, o pior caso do algoritmo é O(nm), o melhor caso é O(n/m) e o caso esperado é O(n/m), se c não é pequeno e m não é muito grande. 54

55 BMHS - Análise Na variante BMHS, seu comportamento assintótico é igual ao do algoritmo BMH. Entretanto, os deslocamentos são mais longos (podendo ser iguais a m + 1), levando a saltos relativamente maiores para padrões curtos. Por exemplo, para um padrão de tamanho m = 1, o deslocamento é igual a 2m quando não há casamento. 55

56 Análise 56

57 Método Robin-Karp Princípio: tratar cada substring de tamanho M do texto como chave de uma tabela de dispersão padrão é encontrado quando a chave da substring coincide com a do padrão como se procura chave específica, não é preciso guardar a tabela, mas apenas calcular as chaves com tabela virtual: tamanho elevado reduz probabilidade de falsas escolhas Para que o método seja eficaz cálculo da chave deve ser menos pesado que fazer as comparações função de dispersão: h(k) = k mod q q primo grande cálculo das chaves: chave da posição i usa a da posição i-1 M caracteres transformam-se em número: empacotados na máquina como palavra, e esta interpretada como número 57

58 Pré-processamento do padrão = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} = 10 P temos: (P[1] * 10 + P[2]) = 19 (19 * 10) + P[3] = 199 (199 * 10) + P[4] = 1991 = alfabeto = tamanho de Dado um caractere, a representação numérica deste será sua posição no alfabeto Complexidade O(m) Generalizando: P[m] + (P[m-1]+ (P[m-2] (P[2] + P[1]) )) 58

59 Processamento do texto Padrão P Texto T = 1887 tempo O(m), para s = = 8871 não usaremos tempo O(m) para s > 0, pois temos que: s = 0, temos O(m) s > 0, temos O(1) s variando de 0 à n m para calcular m - 1 temos O(lg m) = O(m) + (n m)o(1) + O(lg m) = O(n) (1887 m - 1 * P[1]) * + P[s+m] = 8871, onde m - 1 foi previamente calculado Portanto temos tempo O(1), para cada deslocamento s > 0 59

60 Método Robin-Karp Aplicando a idéia para caracteres: Atribuir números a cada letra (código ASCII, por exemplo) Aplicar hashing para a cadeia S[1,..,m] na base b (número primo) Por exemplo, considerando a base como 101 (a base pode ser o tamanho do alfabeto): Palavra hi = =

61 Método Robin-Karp Os valores das transformações de P e das substrings de T são muito grandes, quando m e são muito longos Solução 1: reduzir esses valores a uma faixa controlada, utilizando módulo de um número q,, por exemplo. Novo problema: um mesmo valor pode representar substrings distintas. Solução 2: ocorrendo um provável casamento de ocorrendo um provável casamento de P com uma substring X de T, cada caractere de P deve ser comparado a cada caractere de X, para verificar se o casamento realmente acontece. 61

62 Método Robin-Karp Implementação Calcular hashing(padrao) Calcular hashing(substrings(texto)) Opção: Guardar em uma tabela Pesquisar hashing(padrao) na tabela Se não encontrar, padrão não existe no texto Se encontrar, Verificar se Substring(TEXTO) = PADRAO Se for diferente, padrão não existe no texto 62

63 Método Robin-Karp Usado para descobrir casos de plágio Análise: - custo para pré-processamento do padrão P é O(m) - custo para processamento do texto T é O(n) - número máximo de deslocamentos s válidos é n m + 1 No pior caso: - Todas as substrings X de T casam com P Sabemos que o número de deslocamentos s válidos é n m + 1, então temos s possíveis X, sabemos também que X = P = m, é possível concluir então que para cada s faremos m comparações, então: O((n-m+1)m). 63

64 Exercício Aplique o método de Robin-Karp para criar a tabela de hashing do texto abaixo, considerando um tamanho 3 de caracteres pro hashing e um alfabeto de tamanho 27, onde a letra A é denotada pelo número 1, B pela número 2, C como 3, D como 4, etc... Texto = ABCAABAC Como você procuraria a existência do padrão ABA no texto? 64

Reconhecimento de Padrões. Prof. Flávio Humberto Cabral Nunes

Reconhecimento de Padrões. Prof. Flávio Humberto Cabral Nunes Reconhecimento de Padrões Prof. Flávio Humberto Cabral Nunes Conteúdo 1. Força Bruta 2. Knuth-Morris-Pratt 3. Boyer-Moore 4. Aho-Corasick Capítulo: 13 (APOSTILA). Força Bruta Características principais

Leia mais

Casamento de Padrões

Casamento de Padrões Casamento de Padrões Ricardo Terra rterrabh [at] gmail.com Ricardo Terra (rterrabh [at] gmail.com) Casamento de Padrões Fevereiro, 2013 1 / 34 CV Nome: Ricardo Terra Email: rterrabh [at] gmail.com www:

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Processamento de Cadeias de Caracteres Última alteração: 21 de Setembro de 2004 Transparências elaboradas por Fabiano Cupertino Botelho, Charles Ornelas Almeida e Nivio Ziviani Projeto de Algoritmos Cap.8

Leia mais

Universidade Federal de Mato Grosso do Sul Estruturas de Dados e Programação. Processamento de Cadeias

Universidade Federal de Mato Grosso do Sul Estruturas de Dados e Programação. Processamento de Cadeias Universidade Federal de Mato Grosso do Sul Estruturas de Dados e Programação Processamento de Cadeias 1 Introdução Processar documentos é atualmente uma das principais funções dos computadores. São inúmeras

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Problema do casamento de cadeias Algoritmo

Leia mais

Algoritmos em Strings

Algoritmos em Strings Algoritmos em Strings R. Rossetti, A.P. Rocha, A. Pereira, P.B. Silva, T. Fernandes FEUP, MIEIC, CAL, 2010/2011 1 Índice Pesquisa exacta (string matching) Pesquisa aproximada (approximate string matching)

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Processamento de Cadeias de Caracteres Última alteração: 31 de Outubro de 2010 Transparências elaboradas por Fabiano Cupertino Botelho, Charles Ornelas Almeida, Israel Guerra e Nivio Ziviani Projeto de

Leia mais

Análise e Síntese de Algoritmos. Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32

Análise e Síntese de Algoritmos. Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32 Análise e Síntese de Algoritmos Emparelhamento de Cadeias de Caracteres CLRS, Cap. 32 Contexto Revisão Algoritmos em Grafos Programação Linear Programação Dinâmica Algoritmos Greedy Emparelhamento de Cadeias

Leia mais

Processamento de Cadeias de Caracteres

Processamento de Cadeias de Caracteres Projeto de Algoritmos Cap.8 Processamento de Cadeias de Caracteres Seção 8. 3 Notação Texto: arranjo T[..n] de tamanho n; Padrão: arranjo P[..m] de tamanho m n. Os elementos de P e T são escolhidos de

Leia mais

Tabelas Hash. Prof. Túlio Toffolo BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I

Tabelas Hash. Prof. Túlio Toffolo  BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Tabelas Hash Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 Aulas 23 e 24 Algoritmos e Estruturas de Dados I Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa

Leia mais

Hashing: conceitos. Hashing

Hashing: conceitos. Hashing Hashing: conceitos hashing é uma técnica conhecida como espalhamento, mapeamento ou randomização que tenta distribuir dados em posições aleatórias de uma tabela (array) associa cada objeto (de um determinado

Leia mais

Pesquisa: operação elementar

Pesquisa: operação elementar Pesquisa: operação elementar uma das operações mais usadas em programação pesquisas em: vectores, matrizes, tabelas de registos, ficheiros, tipos de dados estruturados (hierarquicos),... necessidade de

Leia mais

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou

Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou Tabelas de hash Acabamos de estudar como implementar uma tabela hashing aberta e estudaremos agora como implementar uma tabela hashing fechada ou também denominada de tabela hashing com endereçamento aberto.

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Implemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) {

Implemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) { Implemente a função de remoção de uma chave na tabela hashing fechada em questão. void remover(tabela tabela, int n) { } Tabelas de hash fechada: Exercício int posicao = buscar(tabela, n); if (posicao

Leia mais

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que:

Tabelas Hash. informação, a partir do conhecimento de sua chave. Hashing é uma maneira de organizar dados que: Tabelas Hash Tabelas Hash O uso de listas ou árvores para organizar informações é interessante e produz bons resultados. Porem, em nenhuma dessas estruturas se obtém o acesso direto a alguma informação,

Leia mais

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri

Unidade VI. Técnicas de Teste de Software Teste Estrutural. Profa. Dra. Sandra Fabbri Unidade VI Técnicas de Teste de Software Profa. Dra. Sandra Fabbri Os requisitos de teste são extraídos de uma implementação em particular Teste dos detalhes procedimentais A maioria dos critérios dessa

Leia mais

Pesquisa em Memória Primária. Prof. Jonas Potros

Pesquisa em Memória Primária. Prof. Jonas Potros Pesquisa em Memória Primária Prof. Jonas Potros Transformação de Chave (Hashing) transformação de chave difere-se dos métodos anteriores, porque os registros são armazenados em uma tabela e são diretamente

Leia mais

i a[i]

i a[i] Técnicas de Hashing Outra forma de se fazer busca em uma tabela, é construir-se a tabela de forma a facilitar a busca, colocando-se cada elemento numa posição pré-determinada. Tal posição é obtida aplicando-se

Leia mais

Estrutura de dados 1. Processamento de Cadeias de Caracteres

Estrutura de dados 1. Processamento de Cadeias de Caracteres Estrutura de dados 1 Processamento de Cadeias de Caracteres Casamento de Cadeias Casamento de Cadeias Casamento Exato Casamento Aproximado Compressão Por Que Usar Compressão Compressão de Textos em Linguagem

Leia mais

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho Gilson de Souza Carvalho gaucho.gilson@hotmail.com 3.1.3 Condições compostas Linguagem e Técnicas em Programação As condições que vimos até agora sempre foram únicas. Entretanto, conforme aumenta a complexidade

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos

Leia mais

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves Informática II Linguagem Computacional Estruturas de Controle: Estruturas de Repetição Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves 1 Sumário q Estruturas de Controle de Fluxo Repetição Enquanto

Leia mais

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final) Algoritmos e Programação Informática II Ciência da Computação Prof. Dr. Leandro Alves Neves Aula 10 1 Sumário Estruturas de Controle de Fluxo q Repetição Enquanto (Teste no início) Repeat (Teste no final)

Leia mais

Pesquisa em Memória Primária Hashing

Pesquisa em Memória Primária Hashing Pesquisa em Memória Primária Hashing Livro Projeto de Algoritmos Nívio Ziviani Capítulo 5 Seções 5.5 http://www2.dcc.ufmg.br/livros/algoritmos/ ( Hashing ) Transformação de Chave Os registros armazenados

Leia mais

Análise de Algoritmos Estrutura de Dados II

Análise de Algoritmos Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

Aula 1. Teoria da Computação III

Aula 1. Teoria da Computação III Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável

Leia mais

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza Árvores B Hashing Estrutura de Dados II Jairo Francisco de Souza Pesquisa sequencial Procedimento Elementos pesquisados sucessivamente Comparação determina se o elemento foi encontrado ou não Exemplo:

Leia mais

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula Tópicos Introdução Árvore digital Árvore digital binária

Leia mais

Algoritmos probabilísticos

Algoritmos probabilísticos Algoritmos probabilísticos Na execução, algumas decisões usam números aleatórios Tempo de execução depende não só da entrada mas também de números aleatórios gerados Eficiência: pior caso é o mesmo ue

Leia mais

ESTRUTURA DE DADOS I AULA I

ESTRUTURA DE DADOS I AULA I ESTRUTURA DE DADOS I AULA I PROF. ME. HÉLIO ESPERIDIÃO O que é um dado? Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa de coleta). o que é a informação A

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Análise Sintática Descendente O analisador sintático descendente é parecido com o analisador

Leia mais

Endereçamento Aberto

Endereçamento Aberto Endereçamento Aberto ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo dbeder@usp.br 11/2008 Material baseado em slides

Leia mais

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso: Compressão de Textos Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM O volume

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré

Compressão Sem Perdas: Codificações Huffman e Aritmética. Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré Compressão Sem Perdas: Codificações Huffman e Aritmética Adelar da Silva Queiróz Marcelo Teixeira Thiago da Silva Sodré Compressão Sem Perdas (Lossless Data Compression) Refere-se a métodos de compressão

Leia mais

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Análise de Complexidade de Algoritmos. mario alexandre gazziro Análise de Complexidade de Algoritmos mario alexandre gazziro Definição A complexidade de um algoritmo consiste na quantidade de esforço computacional necessária para sua execução. Esse esforço é expresso

Leia mais

A Linguagem Lua Lua Puc-Rio

A Linguagem Lua Lua Puc-Rio A Linguagem Lua Lua foi projetada e implementada por uma equipe no Tecgraf, o Grupo de Computação Gráfica da Puc-Rio (Pontifícia Universidade Católica do Rio de Janeiro). 1 Exemplos de linguagens de scripts

Leia mais

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos (tempo ou espaço) podem ser proibitivos. 1 Suponha que duas

Leia mais

Laços de repetição for, while, do-while

Laços de repetição for, while, do-while Computação Eletrônica Laços de repetição for, while, do-while Prof: Luciano Barbosa Estruturas de Repetição Imagine um programa que calcula a média de um aluno. Este programa é bastante simples, bastaria:

Leia mais

Introdução à Computação II Unesp Rio Claro 2012Prof. Rafael Oliveira

Introdução à Computação II Unesp Rio Claro 2012Prof. Rafael Oliveira Recursão A recursão é bastante usada na matemática para definir funções, usando elas mesmas nas suas próprias definições. Por exemplo o cálculo de um fatorial, pode ser representada em forma de recursão

Leia mais

13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II

13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II 13 Hashing (parte 2) SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP)

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 03 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 03 Disciplina: Linguagem

Leia mais

AULA 21. Algoritmos p.760/792

AULA 21. Algoritmos p.760/792 AULA 21 Algoritmos p.760/792 Busca de palavras (string matching) CLRS 32 Algoritmos p.761/792 Busca de palavras em um texto Dizemos que um vetor P [1.. m] ocorre em um vetor T [1.. n] se P [1.. m] = T

Leia mais

Programação Introdução

Programação Introdução PROGRAMAÇÃO Programação Introdução Prof. Dr. Adriano Mauro Cansian 1 Introdução Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas,

Leia mais

Informática para Ciências e Engenharias 2013/14. Teórica 7

Informática para Ciências e Engenharias 2013/14. Teórica 7 Informática para Ciências e Engenharias 2013/14 Teórica 7 Na aula de hoje... Controlo de execução ciclos condicionais while end Exemplos raiz quadrada histograma fórmula química while while e matrizes

Leia mais

Estruturas de Dados Tabelas de Espalhamento

Estruturas de Dados Tabelas de Espalhamento Estruturas de Dados Tabelas de Espalhamento Prof. Eduardo Alchieri (introdução) Uma estrutura como, as árvores binárias de busca, que trabalhe na ordem de log n é muito eficiente, mas em algumas situações

Leia mais

4 C odigos de Huffman 4.1 Arvores de c odigo folhas os internos n ıvel altura Arvore bin aria arvore bin aria ordenada

4 C odigos de Huffman 4.1 Arvores de c odigo folhas os internos n ıvel altura Arvore bin aria arvore bin aria ordenada 4 Códigos de Huffman 4.1 Árvores de código Numa árvore qualquer, os nós que não têm filhos são chamados de folhas e os demais nós são chamados de nós internos. Se um nó de uma árvore é filho de outro,

Leia mais

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo

Radix Sorting. Várias aplicações têm chaves que são inteiros, definidos dentro de um intervalo Radix Sorting Os registros a serem ordenados podem ter chaves bastante complexas, como por exemplo sequências de caracteres (lista telefônica) o Ordenação via comparação de chaves Várias aplicações têm

Leia mais

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II

Pesquisa em memória primária: hashing. Algoritmos e Estruturas de Dados II Pesquisa em memória primária: hashing Algoritmos e Estruturas de Dados II Hashing Algoritmos vistos efetuam comparações para localizar uma chave. Os registros armazenados em uma tabela são diretamente

Leia mais

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Busca em Memória Primária Estrutura de Dados II Estrutura de Dados II COM10078 2017-I Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

Busca em Memória Primária Estrutura de Dados II

Busca em Memória Primária Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Busca em Memória Primária Estrutura de Dados II COM10078 Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

Estruturas de dados para listas arrays e listas ligadas

Estruturas de dados para listas arrays e listas ligadas Estruturas de dados para listas arrays e listas ligadas Fernando Lobo Algoritmos e Estrutura de Dados Algumas figuras retiradas do livro Introduction to Algorithms, 3rd Edition. 1 / 29 Listas Uma lista

Leia mais

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa ANÁLISE DE ALGORITMOS: PARTE 1 Prof. André Backes Algoritmos 2 Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa Precisamos escrever o seu algoritmo Um algoritmo

Leia mais

Tabelas de Dispersão. Estrutura de Dados e Algoritmos

Tabelas de Dispersão. Estrutura de Dados e Algoritmos Tabelas de Dispersão Tabelas de Dispersão Sumário Definição. Características. Resolução de colisões: dispersão com listas e dispersão aberta. Teste quadrático. Desempenho de tabelas de dispersão. Interface

Leia mais

Informática para Ciências e Engenharias 2014/15. Teórica 7

Informática para Ciências e Engenharias 2014/15. Teórica 7 Informática para Ciências e Engenharias 2014/15 Teórica 7 Na aula de hoje... Controlo de execução ciclos condicionais while end Exemplos raiz quadrada histograma fórmula química while while e matrizes

Leia mais

Técnicas Inteligência Artificial

Técnicas Inteligência Artificial Universidade do Sul de Santa Catarina Ciência da Computação Técnicas Inteligência Artificial Aula 03 Métodos de Busca Parte 1 Prof. Max Pereira Solução de Problemas como Busca Um problema pode ser considerado

Leia mais

VETORES Motivação AULA 19

VETORES Motivação AULA 19 AULA 19 VETORES 19.1 Motivação Considere o problema de calcular a média aritmética das notas de 5 alunos de uma disciplina e determinar e escrever o número de alunos que obtiveram nota superior à média

Leia mais

MC3305 Algoritmos e Estruturas de Dados II. Aula 02 Hashing. Prof. Jesús P. Mena-Chalco.

MC3305 Algoritmos e Estruturas de Dados II. Aula 02 Hashing. Prof. Jesús P. Mena-Chalco. MC3305 Algoritmos e Estruturas de Dados II Aula 02 Hashing Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 2Q-2015 1 Sobre a busca de dados/chaves 2 Busca em tabelas (vetores/arrays) Para se resolver

Leia mais

Refinamentos sucessivos

Refinamentos sucessivos Refinamentos sucessivos Objetivos: Estudar a técnica de refinamentos sucessivos Jogo: 2048 Implementaremos o jogo 2048, com o objetivo de estudar a manipulação dos elementos de uma matriz Utilizaremos

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente Compiladores - Análise Ascendente Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Descendente vs. Ascendente As técnicas de análise que vimos até agora (recursiva com retrocesso,

Leia mais

Tabelas de dispersão/hash

Tabelas de dispersão/hash Tabelas de dispersão/hash 1 Tabelas de dispersão/hash 1. Considere uma tabela de hash de tamanho m = 1000 e a função de hash h(k)= [m.(k.a % 1)], com A=( 5-1)/2. Calcule os valores de hash das chaves 61,

Leia mais

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente Compiladores - Análise Ascendente Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Análise Descendente vs. Ascendente As técnicas de análise que vimos até agora (recursiva com retrocesso,

Leia mais

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10:

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 1 8: Figura 1 9: Figura 1 10: Lista de Figuras Figura 1 1: Módulo de Memória DRAM 26 Figura 1 2: Um Disco Magnético com Três Pratos e Seis Superfícies 28 Figura 1 3: Geometria de uma Superfície de Disco Magnético 29 Figura 1 4: Um

Leia mais

INSTRUÇÕES DE REPETIÇÃO

INSTRUÇÕES DE REPETIÇÃO Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 6 INSTRUÇÕES DE REPETIÇÃO As instruções de repetição permitem fazer com que a execução de uma

Leia mais

Aprendizado de Máquina

Aprendizado de Máquina Aprendizado de Máquina Template Matching Luiz Eduardo S. Oliveira Universidade Federal do Paraná Departamento de Informática http://lesoliveira.net October 25, 2012 Luiz S. Oliveira (UFPR) Aprendizado

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho Conteúdo Exercícios e implementação de algoritmos: Número capicua Constante

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Capítulo 1: Alfabetos, cadeias, linguagens

Capítulo 1: Alfabetos, cadeias, linguagens Capítulo 1: Alfabetos, cadeias, linguagens Símbolos e alfabetos. Um alfabeto é, para os nossos fins, um conjunto finito não vazio cujos elementos são chamados de símbolos. Dessa maneira, os conceitos de

Leia mais

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza Árvores B Hashing Estrutura de Dados II Jairo Francisco de Souza Funções Hashing Divisão Compressão de chaves alfanuméricas Multiplicação Enlaçamento Deslocado Limite Função Meio-Quadrado Extração Transformação

Leia mais

6) ESTRUTURA DE UM PROGRAMA

6) ESTRUTURA DE UM PROGRAMA Página 1 de 16 6) ESTRUTURA DE UM PROGRAMA = = program ; = uses

Leia mais

Aula 31: Encadeamento exterior. Modelo de encadeamento exterior. Complexidade do encadeamento exterior

Aula 31: Encadeamento exterior. Modelo de encadeamento exterior. Complexidade do encadeamento exterior 31.1 Aula 31: Encadeamento exterior Conceito de encadeamento Modelo de encadeamento exterior Complexidade do encadeamento exterior 31.2 Introdução Recordando: uma colisão ocorre quando duas chaves diferentes

Leia mais

Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Ciência da Computação

Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Ciência da Computação Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Ciência da Computação PROJETO E ANÁLISE DE ALGORITMOS Casamento Exato e Aproximado de Cadeias de Caracteres Terceiro Trabalho

Leia mais

Linguagens de Domínio Específico

Linguagens de Domínio Específico Linguagens de Domínio Específico Fabio Mascarenhas 2016.1 http://www.dcc.ufrj.br/~fabiom/dsl Processamento de uma DSL Gramáticas Vamos usar uma notação parecida com a de expressões regulares para definir

Leia mais

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Algoritmos de busca Basicamente podem ser citadas duas estratégias para procurar (ou buscar) algo em uma coleção de dados: Busca

Leia mais

Alfabeto, Cadeias, Operações e Linguagens

Alfabeto, Cadeias, Operações e Linguagens Linguagens de Programação e Compiladores - Aula 3 1 Alfabeto, Cadeias, Operações e Linguagens 1.Conjuntos Para representar um determinado conjunto é necessário buscar uma notação para representá-lo e ter

Leia mais

4. Constantes. Constantes pré-definidas

4. Constantes. Constantes pré-definidas 4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.

Leia mais

Otimização em Grafos

Otimização em Grafos Otimização em Grafos Luidi G. Simonetti PESC/COPPE 2017 Luidi Simonetti (PESC) EEL857 2017 1 / 33 Definição do Problema Dado: um grafo ponderado G = (V, E), orientado ou não, onde d : E R + define as distâncias

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Técnicas de Projeto de Algoritmos Força Bruta IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/36 Técnica de Projeto de Algoritmos por Força

Leia mais

Estruturas de Controle em c#

Estruturas de Controle em c# Estruturas de Controle em c# Fábio Moura Governo de Pernambuco Agenda Tipos de estruturas de controle; if; if-else; if-else-if; switch-case; while; do-while; for; foreach; Exercício. Tipos de Estruturas

Leia mais

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica) SCC 202 Algoritmos e Estruturas de Dados I Pilhas (Stacks) (implementação dinâmica) Operações alocação encadeada dinâmica typedef struct elem{ tipo_info info; struct elem *lig; tipo_elem; typedef struct{

Leia mais

Algoritmos de pesquisa. Tabelas de dispersão/hash

Algoritmos de pesquisa. Tabelas de dispersão/hash Algoritmos de pesquisa Tabelas de dispersão/hash Introdução Motivação: Considerar o problema de pesquisar um determinado valor num vetor. Se o vetor não está ordenado, a pesquisa requer O(n) de complexidade.

Leia mais

Um Estudo Teórico e Experimental em Algoritmos Clássicos de Busca em Texto

Um Estudo Teórico e Experimental em Algoritmos Clássicos de Busca em Texto Um Estudo Teórico e Experimental em Algoritmos Clássicos de Busca em Texto PAULO SÉRGIO R. CARVALHO DEIVE DE OLIVEIRA ALESSANDRA GUARACY ALISSON GOMES FERNADO CESAR DA CONCEIÇÃO JOSEANE FREIRE JONES ALBUQUERQUE

Leia mais

Casamento de Cadeias. Introdução. Introdução. Estrutura de Dados. Cadeia de caracteres: sequência de elementos denominados caracteres.

Casamento de Cadeias. Introdução. Introdução. Estrutura de Dados. Cadeia de caracteres: sequência de elementos denominados caracteres. Introdução de Cadeias Estrutura de Dados II Prof. Guilherme Tavares de Assis Universidade Federal de Ouro Preto UFOP Instituto de Ciências Exatas e Biológicas ICEB Departamento de Computação DECOM 1 Cadeia

Leia mais

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I

Departamento de Engenharia Rural Centro de Ciências Agrárias. Programação I Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Exercícios Variáveis compostas homogêneas Multidimensionais (matrizes e outras abstrações) Manipulação de Strings e caracteres

Leia mais

Hashing (Tabela de Dispersão)

Hashing (Tabela de Dispersão) Hashing (Tabela de Dispersão) Prof. Marcos Alves 2009-B Roteiro Contextualização Conceitos Básicos Hashing (método de pesquisa) Hashing Perfeito Hashing Imperfeito Colisões Métodos de Tratamento de Colisões

Leia mais

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio

Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio Aula 03: Análise de algoritmos melhor caso, pior caso e caso médio David Déharbe Programa de Pós-graduação em Sistemas e Computação Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas

Leia mais

Algoritmos e Estrutura de Dados. Aula 11 Estrutura de Dados: Tabelas Hash Parte II Prof. Tiago A. E. Ferreira

Algoritmos e Estrutura de Dados. Aula 11 Estrutura de Dados: Tabelas Hash Parte II Prof. Tiago A. E. Ferreira Algoritmos e Estrutura de Dados Aula 11 Estrutura de Dados: Tabelas Hash Parte II Prof. Tiago A. E. Ferreira Introdução Como visto na aula passada as tabelas hash: Diminuem a quantidade de endereçamento

Leia mais

Programação de Computadores II

Programação de Computadores II Programação de Computadores II 1. Programação Básica 2019.1 Slides adaptados do material de Karina Mochetti Problema, Algoritmo, Programa Um programa de computador é a implementação de um algoritmo para

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos Complexidade de Algoritmos Definição A Complexidade de um Algoritmo consiste na quantidade de trabalho necessária para a sua execução, expressa em função das operações fundamentais,

Leia mais

Professor Mauricio Lederer Algoritmos. Entrada e saída de dados

Professor Mauricio Lederer Algoritmos. Entrada e saída de dados Entrada Algoritmos Entrada e saída de dados Muitas vezes, um algoritmo, para que possa trabalhar, precisa de dados de entrada informados pelo usuário, porque nem sempre é necessário ter esse tipo de dados.

Leia mais

5. Expressões aritméticas

5. Expressões aritméticas 5. Expressões aritméticas 5.1. Conceito de Expressão O conceito de expressão em termos computacionais está intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando

Leia mais

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. Lista 1 8 de abril de 2013 1 Exercícios Básicos 1.1 Na bibliografia Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b. 1.2 Outros 1. Projete

Leia mais

TABELAS DE DISPERSÃO/HASH

TABELAS DE DISPERSÃO/HASH 1/47 TABELAS DE DISPERSÃO/HASH Introdução 2/47 Introdução Motivação - Considerar o problema de pesquisar um determinado valor num vetor: - Se o vetor não está ordenado, a pesquisa requer O(n) de complexidade

Leia mais

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)

Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Complexidade de Algoritmos! Uma característica importante de qualquer algoritmo é seu tempo de execução! é possível determiná-lo através de métodos empíricos, considerando-se entradas diversas! é também

Leia mais