2o Exame de Análise e Desenho de Algoritmos

Propaganda
2o Exame de Análise e Desenho de Algoritmos
Licenciatura em Engenharia Informática
Departamento de Informática
Universidade de Évora
12 de Julho de 2002
1. [4 valores] Apresente a trie resultante de inserir sucessivamente, numa trie inicialmente vazia,
as palavras da sequência:
agrado, sorte, cal, agricultura, bata, agradece, calma, massa
Considere que o alfabeto é constituı́do pelas 26 letras minúsculas.
2. [4 valores] Construa a árvore de Huffman para a sequência de sı́mbolos ADCEEAEBACCCBEECAA,
sobre o alfabeto Σ = {A, B, C, D, E}, e apresente o código de Huffman de cada sı́mbolo. Calcule
o ganho de compressão obtido com a codificação desta sequência. (Considere que cada sı́mbolo
tem, originalmente, um código de 3 bits.)
3. [4,5 valores] Apresente o autómato finito para pesquisa de texto correspondente ao padrão
yyxzyyxyyy e indique, justificando, o número de comparações de caracteres efectuadas durante
a pesquisa de todas as ocorrências deste padrão no texto yyxzyyxyyyxzyyxyyy (excluindo eventuais comparações de caracteres feitas para o cálculo da função de transição do autómato).
4. [4,5 valores] Seja t o grau mı́nimo de ramificação de uma árvore B de inteiros. Implemente,
em C, a função soma k menores que devolve a soma dos k menores elementos de uma árvore B,
para 0 < k < t, e indique, justificando, a sua complexidade temporal. Assuma que a árvore tem,
pelo menos, k elementos.
Considere a árvore B implementada através dos tipos:
#define MAXOCUP ...
typedef struct Bno {
int elementos[MAXOCUP];
struct Bno * filhos[MAXOCUP + 1];
int folha, ocupacao;
} Bno;
typedef struct {
struct Bno * raiz;
} Barvore;
5. [3 valores] Na distribuição Debian do Linux, o software está organizado em pacotes. Alguns
pacotes dependem de outros, i.e., não podem ser instalados se outros não estiverem também no
sistema. Por exemplo, o pacote acroread (o Acrobat Reader para Linux) depende dos pacotes
libc6 (biblioteca base do sistema) e xlibs (bibliotecas do sistema de janelas X); este último,
por sua vez, depende de xfree86-common, libc6 (também) e libfreetype6, que dependem de
outros pacotes, e assim sucessivamente. Como é natural, não existem dependências circulares.
Dadas a lista de pacotes a instalar e as dependências entre eles, proponha uma representação
desta informação e um algoritmo que determine uma ordem de instalação tal que nenhum pacote
seja instalado antes de outro de que ele dependa. Indique, justificando, a complexidade do
algoritmo proposto.
Download