IF672 -
Algoritmos e Estruturas de Dados
novembro 2002
a março 2003
3 - Função Hashing não-trivial
Considere um tabuleiro do
jogo do 8:

Essa questão tem como objetivo principal a indexação direta desses
tabuleiros.
O problema é encontrar um função Hashing para essas seqüências de tal forma
que,
Para todos índices i1, i2: i1 < i2 se T1 < T2 (e não poderá haver
colisões).
T1 < T2 se só se F(T1) < F(T2).
F(T) = T11T12T13T21T22T23T31T32T33
Considere a casa vazia como o valor 0.
OBS: Se se preencher todo o array com os tabuleiros, deveremos ter no máximo
9! posições alocadas... o tamanho do array NÃO deve ultrapassar 9!, isso
significa
que sua função hash deve mapear os 9! tabuleiros em inteiros de 0..(9!-1).
Chamaremos
essa função de HASH(T).
Entrada e Saída de dados
A entrada consiste
em
vários tabuleiros.
O fim da entrada é o fim do arquivo.
A saída deve ser para cada tabuleiro o HASH(T).
Entrada exemplo
0 1 2
3 4 5
6 7 8
0 1 2
3 4 5
6 8 7
0 1 2
3 4 5
7 6 8
8 7 6
5 4 3
2 1 0
Saída correspondente
0
1
2
362879