Aquece Para a prova de EDA3

  • 1,325 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,325
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
40
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Exercícios1) Descreva numa notação mais precisa os algoritmos de inserção e de remoção em arvores AVL, de pesquisa digital, binária de busca sem entrarem muitos pormenores de programação.2) Podemos utilizar árvores binárias para representar expressões aritméticas (como ((a+b)*c- d)/(e-f) +g, por exemplo). Tente desenhar uma árvore para a expressão acima, e explique como poderíamos implementar o cálculo da expressão.3) Para a busca de um elemento numa árvore podemos escrever a função abaixo. Teste a função e explique o seu funcionamento.// Função para procurar um elemento numa arvore ARV procura (ARV a , int b) { if (EMPTY(a)) return NULL; else if ( a->info == b ) return a; else if ( b > a->info ) return procura (a->dir, b); else return procura (a->esq, b);}4) Um percurso numa árvore mostra os elementos ali armazenados. No caso de uma árvore binária, podemos percorrer usando 3 estratégias: em ordem, pré-ordem e pós-ordem. A função abaixo mostra uma função de percurso em ordem (esquerda-raiz-direita). Teste a função e mostre o resultado para os elementos de uma árvore binária qualquer.//Função para percorrer a árvore respeitando o critério EM ORDEM void inOrder (ARV a) { if (! EMPTY(a) ) { inOrder(a->esq); printf(" %d ", a->info); inOrder(a->dir);5) Faça as funções para os percursos pré-ordem (raiz-esquerda-direita) e pós-ordem (esquerdadireita-raiz).6) Implemente uma função que retorne a quantidade de folhas de uma árvore binária. Essa função deve obedecer ao protótipo: int folhas (Arv* a);Soluçãoint folhas (Arv* a){if (arv_vazia(a->esq) && arv_vazia(a->dir)) return 1;else if (!arv_vazia(a->esq) && arv_vazia(a->dir)) return folhas(a->esq); else if (arv_vazia(a->esq) && !arv_vazia(a->dir)) return folhas(a->dir);return folhas(a->esq) + folhas(a->dir);}
  • 2. 7) Considere a árvore AVL a seguir: 30 25 45 15 41 56 35 43 50 Realize, na árvore acima, as inserções das seguintes chaves 49, 60, 65, e em seguida a remoção das chaves 45 e 41, escolhendo necessariamente imediatamente precedente para a posição da chave removida. Mostre todas as rotações e o formato da árvore após cada operação.8) Mostre passo a passo a árvore binária resultante das seguintes operações: a) Inserção de 7, 8, 3, 4, 2, 1, 6, 5 b) Mostre o percurso em pré-ordem, em-ordem e pós-ordem c) Remoção de 7 e 69) Quais chaves/palavras estão representadas nesta TRIE?Solução: foi, fora, fui vai, ver, veremos, vi, viu, vimos10) Demonstre a árvore TRIE (passo a passo) para as seguintes chaves, bem como seus significados:MACA – MACHO – MATO – BALA – BANANA – BALELA - BALEIASolução
  • 3. 1 2 3 4 5 6 7
  • 4. SoluçãoÍndices gerados a partir da inserção no TRIE.1 -> Utilizada para socorrer pessoas2 -> Gênero encontrado na natureza3 -> Local com árvores e animais4 -> Doce conhecido entre crianças e “professores”5 -> Fruta tropical6 -> No sentido de enrolação7 -> Animal encontra no mar11) Qual seria o resultado utilizando uma árvore TRIE A partir das digitações abaixo: Solução B -> BALA, BALEIA, BALELA, BANANA BA -> BALA, BALEIA, BALELA, BANANA BAL -> BALA, BALEIA, BALELA BALE -> BALEIA, BALELA BALEL -> BALELA12) Dada uma árvore PATRICIA, forneça as seguintes informações: a) Conceito b) Características c) Funcionamento de Inserção/Remoção d) Exemplo13) Descreva o funcionamento das pesquisas seqüencial e binária e proponha algoritmos para as mesmas. Utilize alocação estática ou dinâmica.SoluçãoSequencial.c#include <stdio.h>#include <stdlib.h>#define TAMANHO 10int main () {int vetor[TAMANHO] = {0,3,4,7,5,2,9,6,1,8};int valor = 11;int i;int encontrado;i = 0;encontrado = 0; /*Falso*/while (i < TAMANHO && !encontrado) { if (vetor[i] == valor) { encontrado = 1; /*Verdadeiro*/ } else { i++; }}if (encontrado) { printf ("Valor %d encontrado na posicao %dn", vetor[i], i);} else { printf ("Valor %d nao encontradon", valor);}system("pause");return 0;}
  • 5. Binária.c#include <stdio.h>#include <stdlib.h>#define TAMANHO 10int main () {int vetor[TAMANHO] = {0,1,2,3,4,5,6,7,8,9};int valor = 3;int encontrado;int direita, esquerda, meio;encontrado = 0; /*Falso*/esquerda = 0;direita = TAMANHO - 1;while (esquerda <= direita && !encontrado) { meio = (direita + esquerda) / 2;if (vetor[meio] == valor) encontrado = 1; /*Verdadeiro*/else if (valor < vetor[meio]) direita = meio - 1; else esquerda = meio + 1;}if (encontrado) { printf ("Valor %d encontrado na posicao %dn", vetor[meio],meio);} else { printf ("Valor %d não encontradon", valor);}return 0;}14) Dada uma tabela Hash, forneça as seguintes informações: a) Conceito b) Características c) Funcionamento15) Demonstre a inserção das chaves 5, 28, 19,15,20,33,12,17 e 10 em uma tabela hash com colisões resolvidas por encadeamento. Considere a tabela com 9 posições e a função hash como sendo h(k) = k mod 9