70
60
55
46
30
20
21
a) uma rvore binria de pesquisa? Justifique. No, porque 60 (valor da raz da rvore direita) menor que 80 (valor da raz). Uma rvore binria de pesquisa uma rvore binria e ordenada pelo seguinte critrio: (i) o contedo de qualquer n da subrvore esquerda menor ou igual que o contedo do n pai, (ii) o contedo de qualquer n da subrvore direita maior que o contedo do n pai e (iii) ambas as subrvores so rvores binrias de pesquisa. b) um amontoado (heap)? Justifique. No, porque a rvore no completa. Um amontoado uma rvore binria com as seguintes restries: 1) As informaes contidas nos ns da rvore so comparveis entre si; 2) A informao em cada n pai maior ou igual que as dos seus ns filhos; 3) uma rvore completa, i.e., est cheia at ao penltimo nvel e todos os ns do ltimo nvel esto dispostos da esquerda para a direita. c) Quantas folhas tem a rvore? Indique os seus valores. A rvore tem trs folhas. 30, 20 e 21. d) Qual a profundidade da rvore? Justifique. A profundidade da rvore igual a 4. A profundidade de uma rvore a dimenso do maior caminho, em que caminho a sequncia de ns entre a raiz e uma folha. e) A rvore equilibrada? Justifique. No. A altura da rvore direita da rvore com raz 60 igual a 2 enquanto a rvore esquerda tem altura 0. Ver definio na Documentao das Aulas Tericas sobre rvores. f) O que entende por travessia prefixa duma rvore binria? Escreva a sequncia que se obtm com a travessia prefixa da rvore dada. Ver definio na Documentao das Aulas Tericas sobre rvores. Sequncia: 80 70 55 30 20 60 46 21
2. Construa uma rvore binria de pesquisa inserindo os seguintes valores pela ordem em que se apresentam: 24, 50, 32, 7, 18, 12, 43, 6, 28. Anlogo ao exerccio 1 da folha 7 das TP sobre rvores binrias de pesquisa. Ver resoluo na pgina da disciplina (Documentao das Aulas Prticas).
Grupo 2 [3 valores] A funo factorial actua sobre nmeros inteiros no-negativos e define-se matematicamente como
se n = 0 1, factorial (n) = n factorial (n 1), se n > 0 a) Escreva uma funo recursiva, na linguagem C, que permita calcular a funo factorial.
b) Faa um esquema que ilustre as chamadas recursivas executadas ao invocar factorial(3). c) Escreva a funo factorial de forma iterativa. Ver resoluo no GU-ProgII-OL-2010/2011-2-recurso (Documentao das Aulas Tericas).
Grupo 3 [4,5 valores] Considere a seguinte implementao dinmica de lista ligada de inteiros
typedef struct lista *Lista; typedef struct node *NoPtr; struct node { int elem; NoPtr prox; }; struct lista { NoPtr cabeca; }; /* apontador para no' */ /* dados de um no */
a) Escreva, na linguagem C, a funo ap_menor que dada uma lista de inteiros no ordenada, cujos elementos so todos diferentes, devolve um apontador para o menor elemento da lista.
/* Devolve um apontador para o n com o menor valor da lista */ /* pre: !lista_esta_vazia( l ) */ NoPtr ap_menor( Lista l ) { NoPtr aux = l->cabeca; NoPtr menor = aux; while ( aux->prox != NULL ) { aux = aux->prox; /*para no comparar com o primeiro, que usado para inicializar o menor*/ if ( aux->n < menor->n) menor = aux; } return menor; }
b) Escreva, na linguagem C, a funo remove_menor, que apaga o menor elemento de uma dada lista nas condies acima. Nota: Pode invocar a funo ap_menor mesmo que no tenha resolvido a alnea anterior.
/* Remove o menor elemento da lista */ /* pre: !lista_esta_vazia( l ) */ void remove_menor(Lista l) { NoPtr menor=ap_menor(l); NoPtr aux = l->cabeca; if (aux==menor) { /*remove o o primeiro elemento da lista*/ l->cabeca=l->cabeca->prox; } else{ while (aux->prox!=menor) aux=aux->prox; aux->prox=menor->prox; } free(menor); }
c) Explique a diferena entre as polticas de insero e remoo do TDA fila e do TDA lista. Numa fila, os elementos so inseridos no fim e removidos no incio, enquanto que numa lista a insero e remoo podem ser realizadas em qualquer posio.
a) Explique como funciona este algoritmo. Exemplique com a seguinte sequncia de valores 6, 5, 1, 9, 4, 3. Copiar as funes para ficheiros e testar a impresso dos vrios passos. 651943 i=1 561943 i=2 516943 156943 i=3 156943 i=4 156493 154693 145693 i=5 145639 145369 143569 134569 Em cada passo do ciclo externo, o vector est dividido em duas partes: uma parte ordenada e uma parte no ordenada. Inicialmente a parte ordenada formada pela posio zero. Em cada passo do ciclo externo, o 1 elemento da parte no ordenada colocado na posio correcta da parte ordenada. Para esse efeito comparado com os elementos da parte ordenada, comeando as comparaes com o elemento na ltima posio da parte ordenada. b) Qual a complexidade da funo trocar? Justifique. A funo trocar tem uma declarao e trs atribuies. O(1+1+1+1) = O(4) = O(1) c) No pior caso, qual o nmero de operaes elementares da funo ordena? E qual a sua complexidade? Justifique. O nmero total de comparaes n2+3n-1. A ordem de complexidade O(n2). A resoluo anloga da alnea h) do exerccio 1 da folha 3 sobre complexidade. Ver resoluo na pgina da disciplina (Documentao das Aulas Prticas). d) Explique de que forma o algoritmo de ordenao por insero (insertion sort), apresentado nas aulas, melhora este algoritmo. Ver na Documentao das Aulas Tericas sobre Ordenao o algoritmo insertion sort . O insertion sort faz no mximo, no seu ciclo interno, i deslocamentos e cada um gasta 1 operao. A funo trocar gasta 3 operaes em cada. Relativamente s comparaes, no insertion sort o ciclo interno tambm pra se encontrar um elemento menor.