lista de exercícios – parte 3: strings - ufjf.brcios-parte-3.pdf · ... parte 3: strings ... os...

3
Lista de exercícios – Parte 3: strings Estrutura de Dados II – Prof. Jairo Francisco de Souza Departamento de Ciência da Computação – Universidade Federal de Juiz de Fora Para uma uma árvore digital criada para armazenar chaves derivadas do alfabeto formato pelos n primeiros números inteiros começados de zero, pede-se: Construa o algoritmo recursivo de busca de uma dada chave Construa o algoritmo recursivo de inserção de uma dada chave Construa o algoritmo recursivo de remoção de uma dada chave Implemente um algoritmo de busca e inserção para uma árvore ternária digital ( TST – Ternary Search Tree), considerando a seguinte estrutura de nó: struct No { No *esq, *dir, *meio; int valor; bool ehChave = false; } Criar um algoritmo para testar se uma árvore digital é uma árvore digital de prefixo. Crie um algoritmo de busca e um algoritmo de inserção em uma árvore PATRICIA com alfabeto binário. Implemente o algoritmo força-bruta para busca de padrões que imprima na tela a quantidade de comparações realizadas para uma dada busca do padrão P no texto T. Dado uma cadeia de caracteres C, implemente uma função que calcule a tabela de prefixo do algoritmo KMP. Implemente o algoritmo KMP. No método BM, são utilizadas heurísticas de ocorrência e de casamento. Na heurística de ocorrência proposta, é necessário alinhar a posição que causou colisão no texto com o primeiro caractere no padrão que casa com este caractere. Apresente uma forma de implementação da tabela de deslocamento para esta heurística. Considerando a existência da tabela de deslocamento de ocorrência e de casamento, implemente o algoritmo BM. O acesso à tabela de ocorrência é feita através do método int getDeslOcorr(int posPadrao, char letraTexto). Já o acesso à tabela de casamento é feita através do método int getDeslCasam(int posPadrao, posTexto). Para o algoritmo BMH, implemente a função que retorna a tabela de deslocamento. Para o algoritmo BMHS, implemente a função que retorna a tabela de deslocamento. Implemente os algoritmos BMH e BMHS. Dada função de hashing h(x) = x mod 1003, implemente um algoritmo para realizar o pré-processamento do padrão P no algoritmo de Robin-Karp. Implemente a busca de padrões utilizando a abordagem de Robin-Karp sem armazenar

Upload: phamthien

Post on 17-Dec-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lista de exercícios – Parte 3: strings - ufjf.brcios-Parte-3.pdf · ... Parte 3: strings ... os valores de hashing das substrings em tabelas. – Considerando duas matrizes bidimensionais

Lista de exercícios – Parte 3: stringsEstrutura de Dados II – Prof. Jairo Francisco de Souza

Departamento de Ciência da Computação – Universidade Federal de Juiz de Fora

– Para uma uma árvore digital criada para armazenar chaves derivadas do alfabeto formato pelos n primeiros números inteiros começados de zero, pede-se:

– Construa o algoritmo recursivo de busca de uma dada chave– Construa o algoritmo recursivo de inserção de uma dada chave– Construa o algoritmo recursivo de remoção de uma dada chave

– Implemente um algoritmo de busca e inserção para uma árvore ternária digital (TST – Ternary Search Tree), considerando a seguinte estrutura de nó:

struct No { No *esq, *dir, *meio; int valor; bool ehChave = false;}

– Criar um algoritmo para testar se uma árvore digital é uma árvore digital de prefixo.

– Crie um algoritmo de busca e um algoritmo de inserção em uma árvore PATRICIA com alfabeto binário.

– Implemente o algoritmo força-bruta para busca de padrões que imprima na tela a quantidade de comparações realizadas para uma dada busca do padrão P no texto T.

– Dado uma cadeia de caracteres C, implemente uma função que calcule a tabela de prefixo do algoritmo KMP.

– Implemente o algoritmo KMP.

– No método BM, são utilizadas heurísticas de ocorrência e de casamento. Na heurística de ocorrência proposta, é necessário alinhar a posição que causou colisão no texto com o primeiro caractere no padrão que casa com este caractere. Apresente uma forma de implementação da tabela de deslocamento para esta heurística.

– Considerando a existência da tabela de deslocamento de ocorrência e de casamento, implemente o algoritmo BM. O acesso à tabela de ocorrência é feita através do método int getDeslOcorr(int posPadrao, char letraTexto). Já o acesso à tabela de casamento é feita através do método int getDeslCasam(int posPadrao, posTexto).

– Para o algoritmo BMH, implemente a função que retorna a tabela de deslocamento.

– Para o algoritmo BMHS, implemente a função que retorna a tabela de deslocamento.

– Implemente os algoritmos BMH e BMHS.

– Dada função de hashing h(x) = x mod 1003, implemente um algoritmo para realizar o pré-processamento do padrão P no algoritmo de Robin-Karp.

– Implemente a busca de padrões utilizando a abordagem de Robin-Karp sem armazenar

Page 2: Lista de exercícios – Parte 3: strings - ufjf.brcios-Parte-3.pdf · ... Parte 3: strings ... os valores de hashing das substrings em tabelas. – Considerando duas matrizes bidimensionais

os valores de hashing das substrings em tabelas.

– Considerando duas matrizes bidimensionais P e T, utilize a abordagem de Robin-Karp para descobrir se a matriz P ocorre em T. Implemente o algoritmo de busca.

– Considerando um alfabeto formado somente por letras de A a Z, implemente um algoritmo de compressão que utilize a abordagem RLE (Run-length encoding) para comprimir uma sequência de caracteres.

– Implemente o algoritmo de decodificação para o algoritmo acima.

– Considerando uma cadeia de caracteres C, implemente um algoritmo para calcular a frequência de ocorrência de cada caractere e retorne uma tabela ordenada por maior frequência.

– Dado uma árvore de Huffman, monte uma tabela contendo o código a ser utilizado para comprimir cada caractere contido na árvore. A tabela a ser retornada deve ser uma matriz com duas colunas, onde a segunda coluna contém o código correspondente ao caractere contigo na primeira coluna.

– Dada uma sequência de caractere e uma tabela como a retornada no exercício anterior, crie uma função de Huffman que retorne o código comprimido para a sequência de entrada. Para facilitar, considere o código comprimido como sendo uma cadeia de caracteres, ao invés de uma sequência de bits.

– Dado um código comprimido e uma árvore de Huffman, crie uma função para descomprimir a sequência de entrada. Para facilitar, considere o código comprimido como sendo uma cadeia de caracteres, ao invés de uma sequência de bits.

– Dada uma tabela com as frequências de cada caractere em um dado texto, implemente um algoritmo para criar uma árvore de Huffman. Como sugestão, pode-se pensar na implementação através de um vetor (como na implementação do heapsort).

– Dado a entrada CORROCOCOGAOCOR, mostre passo-a-passo da construção da árvore de Huffman utilizando a abordagem adaptativa.

– Decodifique o a seguinte sequência criada com Huffman adaptativo: e 0s 00t 100r 000u 01 1101 111 1100a 10 00 1111 11101 0001 111 01 110.

– Implemente os algoritmos de codificação LZ77, LZ78 e LZW.

– Implemente os algoritmos de decodificação LZ77, LZ78 e LZW.

– A cada passagem do algoritmo de compressão LZ77, é gerado uma tupla (m, l, c), onde m é o deslocamento à direita dentro do dicionário, l é a quantidade de caracteres lidos de forma circular no dicionário e c é o próximo caractere do buffer. Considere que a tupla (m, l, c) possa ser representada como MLC, ou seja, toda a tupla pode ser representada com 3 caracteres. Por exemplo, a tupla <3, 2, h> seria representada como 32h. Considere também que as tuplas são representadas sem espaço, ou seja, 00x11y representa as tuplas <0,0,x><1,1,y>. Pede-se:

– Qual o melhor caso para o algoritmo LZ77? Mostre um exemplo.– Considerando-se tb, td e tt como, respectivamente, o tamanho do buffer, o tamanho

do dicionário e o tamanho do texto, qual a melhor taxa de compressão que o algoritmo pode

Page 3: Lista de exercícios – Parte 3: strings - ufjf.brcios-Parte-3.pdf · ... Parte 3: strings ... os valores de hashing das substrings em tabelas. – Considerando duas matrizes bidimensionais

alcançar, aproximadamente?

– Seguindo o mesmo raciocínio do exercício anterior, qual seria a melhor taxa de compressão possível para o algoritmo LZ78?

– Faça um algoritmo em pseudo-código de alto nível para representar a busca em um sistema de recuperação de informação em que utiliza arquivos invertidos na abordagem TF-IDF.