PROCEDURE Pesquisa ( n : integer); BEGIN IF n > 1 THEN BEGIN Inspecione n*n elementos; Pesquisa (2n/3); END; END;
PROCEDURE Sort ( VAR A: ARRAY[1..n] OF integer; i, j: integer ); { n uma potencia de 2 } BEGIN IF i < j THEN BEGIN m := (i + j - 1)/2; Sort(A,i,m); Sort(A,m+1,j); Merge(A,i,m,j); { Merge intercala A[i..m] e A[m+1..j] em A[i..j] } END; END;
PROCEDURE Proc ( n : integer); BEGIN IF n = 0 THEN RETURN 1 ELSE RETURN T(n-1) + T(n-1) ENDE;
PROCEDURE Pesquisa (ChavePesq: Integer; VAR p: Apontador); BEGIN IF p = nil THEN writeln(' Erro: Registro nao esta' presente na arvore') ELSE IF ChavePesq < p^.Reg.Chave THEN Pesquisa (ChavePesq, p^.Esq) ELSE IF ChavePesq > p^.Reg.Chave THEN Pesquisa (ChavePesq, p^.Dir) ELSE Encontrou o registro; END;
Utilize o procedimento Permut abaixo para obter uma permutacao randômica das chaves.
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/timeb.h> void IniciaRand() { /* Substituir por uma funcao que tome tempo em ms */ time_t ltime; time(<ime); ltime%=10000; srand(ltime); } double rand0a1() { double resultado= (double) rand()/ 0x7FFF; /* Dividir pelo maior inteiro */ if(resultado>1.0) resultado= 1.0; return resultado; } void Permut( int A[], int n) { int i,j,b; IniciaRand(); /* Funcao que Inicia a geracao de numeros randomicos */ for(i = n-1; i>0; i --) { j = (i * rand0a1()) +1 ; b = A[i]; A[i] = A[j]; A[j] = b; } } int main() { unsigned int x; int v[20]; for(x=0;x<20;x++) v[x]=x; Permut(v,20); for(x=0;x<20;x++) printf("%d ",v[x]); printf("\n"); return 0; }
O problema da unificação da lista aparece na codificação de Huffman, um método estatístico para compressão de textos (ou dados em geral). A codificação de Huffman atribui um código de tamanho fixo para cada símbolo (símbolo pode ser um caractere ou uma palavra) diferente do texto. A compressão é obtida através da atribuição de um número menor de bits para símbolos com maior probabilidade de ocorrência no texto. A principal etapa na construção da árvore de Huffman é a unificação da lista ordenada contendo a frequência de ocorrência de cada símbolo no texto.
Dada uma lista ordenada de n elementos de valor inteiro, o problema de unificação da lista consiste em realizar seguidamente a operação de remover os dois elementos de menor valor da lista e inserir um novo elemento com valor igual a soma dos dois primeiros. A cada operação realizada a lista passa a ter um elemento a menos. A unificação termina quando restar somente um elemento na lista.
Exemplo: A unificação da lista {20,40,50,70,80} teria os passos intermediários {50,60,70,80}, {70,80,110}, {110,150} e {260}
Observação: A resposta do item b só terá validade se a justificativa para a resposta apresentar argumentos convincentes.
Nivio Ziviani