IF672 -
Algoritmos e Estruturas de Dados
novembro 2002
a março 2003
2 - Função Hashing trivial generalizada
Considere uma seqüência s0s1s2...sn
de dígitos.
Essa questão tem como objetivo principal a indexação direta dessas seqüências.
O problema é encontrar um função Hashing para essas seqüências de tal forma
que,
Se duas string s1 e s2, forem tais que s1 < s2, então f(s1) < f(s2).
Ou seja:
f(0000) = 0, f(0001) = 1, f(0010) = 2, etc... para
dígitos 0 e 1.
f(0000) = 0, f(0001) = 1, f(0002) = 2, etc... para
dígitos 0..2.
...
f(000A) = 10, f(000B) = 11, f(000C) = 12, etc... para
dígitos de 0..F
Entrada e Saída de dados
A entrada consiste em várias linhas.
Para cada linha teremos
dois
inteiros N, K e uma seqüência
Si com N dígitos (na base K).
O fim de do arquivo corresponde ao final da entrada.
A saída consiste
de
um valor F(Si) (< Maior Inteiro) para cada linha da entrada.
Entrada exemplo
7 2 0000101
4 2 1100
4 2 1110
4 2 0010
5 2 11111
6 2 111111
6 2 001101
1 2 0
1 2 1
1 3 1
4 3 0002
4 16 000F
Saída correspondente
5
12
14
2
31
63
13
0
1
1
2
15