Upload
internet
View
105
Download
0
Embed Size (px)
Citation preview
1
Definição de DicionárioDefinição de Dicionário
DicionárioDicionário é um sistema de informações: é um sistema de informações:
Equivalente a um conjunto de elementos Equivalente a um conjunto de elementos não repetidos não repetidos
Cujas operações são: Cujas operações são:
InserirInserir, , DeletarDeletar e e MembroMembro (verificar (verificar se um se um elemento pertence, ou é membro elemento pertence, ou é membro do conjunto) do conjunto)
Além das operações de fazer Além das operações de fazer consultasconsultas e e de de esvaziaresvaziar
2
Tabela HashingTabela Hashing
1 – Idéia básica1 – Idéia básica
Hashing:Hashing: técnica importante, eficiente e técnica importante, eficiente e muito usada para a implementação de muito usada para a implementação de dicionários.dicionários.
HashingHashing = ato de retalhar, recortar ou picar = ato de retalhar, recortar ou picar
Divisão dos elementos do dicionário em Divisão dos elementos do dicionário em subconjuntos mais gerenciáveis denominados subconjuntos mais gerenciáveis denominados classes classes ((bucketsbuckets))
A idéia é direcionar procuras, inserções e A idéia é direcionar procuras, inserções e deleções para apenas uma dessas classesdeleções para apenas uma dessas classes
3
Um dicionário Um dicionário DicDic dividido em dividido em CC classes: classes:
Como dizer qual a classe de um elemento?Como dizer qual a classe de um elemento?
Função classificadoraFunção classificadora h:h: para um para um elemento elemento xx, do mesmo tipo dos elementos , do mesmo tipo dos elementos do dicionário, do dicionário, h(x)h(x) é um inteiro do é um inteiro do conjunto conjunto {0, 1, 2, . . . , C-1{0, 1, 2, . . . , C-1}}
Classe 0
Classe 1
Classe 2
Classe C-1
4
Para um elemento Para um elemento xx, sua classe é , sua classe é h(x) h(x) em em [0 .. C-1][0 .. C-1]
Dado um elemento Dado um elemento xx, ele seria procurado, , ele seria procurado, inserido ou deletado apenas da classe inserido ou deletado apenas da classe h(x)h(x), , ignorando-se o conteúdo das outras classesignorando-se o conteúdo das outras classes
Essa função deve ser tal que consiga Essa função deve ser tal que consiga equilibrarequilibrar o número de elementos das o número de elementos das classes.classes.
Classe 0
Classe 1
Classe 2
Classe C-1
5
Exemplo:Exemplo: seja a montagem de um dicionário seja a montagem de um dicionário de nomes de, no máximo, 10 caracteres.de nomes de, no máximo, 10 caracteres.
SejaSeja x x um nome e um nome e x[i]x[i] o i o iésimoésimo caractere de caractere de xx
Seja ondeSeja onde
nn é o nº de caracteres de é o nº de caracteres de x x e e C=11C=11..
Seja a seguir uma tabela de nomes a serem Seja a seguir uma tabela de nomes a serem introduzidos no dicionário, ao lado da sua introduzidos no dicionário, ao lado da sua somatória e de sua função somatória e de sua função hh
6
Conteúdo das classes do dicionário:Conteúdo das classes do dicionário:
Classe 0
sergiorogerioitamarciro
Classe 1
antonio
Classe 2 Classe 3
orlandojuliana
Classe 4
joseberenice
Classe 5
mariaraimundo
Classe 6
franciscopaulocarlosseverinogisele Classe 7
moisesjoao
Classe 8
tania
Classe 9
alessandrafernando
Classe 10
sonia
7
Há duas estruturas muito conhecidas Há duas estruturas muito conhecidas para as classes de uma tabela hashing:para as classes de uma tabela hashing:
Hashing aberto:Hashing aberto: as classes são as classes são guardadas em listas lineares guardadas em listas lineares encadeadasencadeadas
Hashing fechado:Hashing fechado: as classes são as classes são guardadas em blocos de elementos guardadas em blocos de elementos adjacentes num vetor de elementosadjacentes num vetor de elementos
8
2 – Hashing aberto2 – Hashing aberto
Estrutura básica:Estrutura básica:
9
Exemplo:Exemplo: hashing aberto para a tabela hashing aberto para a tabela abaixo:abaixo:
10
Declarações e operações:Declarações e operações:
const int C = 11; /* escolhida convenientemente */const int C = 11; /* escolhida convenientemente */
typedef char cadeia [11]; typedef char cadeia [11];
typedef struct celula celula;typedef struct celula celula;
struct celula {cadeia elemento; celula *prox;};struct celula {cadeia elemento; celula *prox;};
typedef celula *dicionario [11];typedef celula *dicionario [11];
int h (cadeia x) {int h (cadeia x) {
int i, soma;int i, soma;
for (soma = 0, i = 0; x[i] != ‘\0’; i++)for (soma = 0, i = 0; x[i] != ‘\0’; i++)
soma += x[i]; soma += x[i];
return soma % C;return soma % C;
}}
11
void Esvaziar (dicionario Dic) {void Esvaziar (dicionario Dic) {
int i; celula *p;int i; celula *p;
for (i = 0; i <= C-1; i++)for (i = 0; i <= C-1; i++)
while (Dic[i] != NULL) {while (Dic[i] != NULL) {
p = Dic[i]; Dic[i] = Dic[i]->prox;p = Dic[i]; Dic[i] = Dic[i]->prox;
free (p);free (p);
}}
}}
logic Membro (cadeia x, dicionario Dic) {logic Membro (cadeia x, dicionario Dic) {
celula *pont;celula *pont;
pont = Dic[h(x)];pont = Dic[h(x)];
while (pont != NULL) while (pont != NULL)
if (pont->elemento == x) if (pont->elemento == x)
return TRUE;return TRUE;
else pont = pont->prox;else pont = pont->prox;
return FALSE;return FALSE;
}}
12
void Inserir (cadeia x; dicionario Dic) {void Inserir (cadeia x; dicionario Dic) {
int class; celula *p; int class; celula *p;
if (!Membro (x, Dic)) {if (!Membro (x, Dic)) {
class = h(x);class = h(x);
p = Dic[class];p = Dic[class];
Dic[class] = malloc (sizeof (celula));Dic[class] = malloc (sizeof (celula));
Dic[class]->elemento = x;Dic[class]->elemento = x;
Dic[class]Dic[class]prox = p;prox = p;
}}
}}
13
void Deletar (cadeia x, dicionario Dic) {void Deletar (cadeia x, dicionario Dic) {
celula *p, *q; int class; logic achou;celula *p, *q; int class; logic achou;
class = h(x);class = h(x);
if (Dic[class] != NULL) {if (Dic[class] != NULL) {
if (Dic[class]->elemento == x) {if (Dic[class]->elemento == x) {
q = Dic [class];q = Dic [class];
Dic [class] = Dic[class]->prox; free (q);Dic [class] = Dic[class]->prox; free (q);
}}
else {else {
p = Dic[class]; achou = FALSE;p = Dic[class]; achou = FALSE;
while (p->prox != NULL && !achou) while (p->prox != NULL && !achou)
if (p->prox->elemento == x) {if (p->prox->elemento == x) {
Achou = Verdade; q = p->prox;Achou = Verdade; q = p->prox;
p->prox = p->prox->prox; p->prox = p->prox->prox;
free (q);free (q);
}}
else p = p->prox;else p = p->prox;
}}
}}
}}
14
3 – Hashing fechado3 – Hashing fechado
É uma técnica apropriada para É uma técnica apropriada para dicionários em que a operação de dicionários em que a operação de deletar não é frequentedeletar não é frequente
Os elementos do dicionário são Os elementos do dicionário são armazenados em um vetorarmazenados em um vetor
15
Cada Cada posiçãoposição do vetor guarda um do vetor guarda um elementoelemento e mais dois e mais dois flagsflags
Um para dizer se a posição está vaziaUm para dizer se a posição está vazia
Outro para dizer se o elemento ali Outro para dizer se o elemento ali colocado foi deletadocolocado foi deletado
elemento vazio deletado
16
As classes são guardadas em As classes são guardadas em blocosblocos de de posições adjacentes no vetor (Na figura abaixo, posições adjacentes no vetor (Na figura abaixo, são reservadas 3 posições por classe)são reservadas 3 posições por classe)
Para cada elemento inserido, o flag Para cada elemento inserido, o flag vaziovazio torna-se falso; o flag torna-se falso; o flag deldel inicialmente é falso inicialmente é falso em todas as posiçõesem todas as posições
elemento
vaz del
Cl
0
0 N
1 N
2 N
Cl
1
3 N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 N
10
N
11
N
elemento
vaz del
Cl
4
12
N
13
N
14
N
Cl
5
15
N
16
N
17
N
Cl
6
18
N
19
N
20
N
Cl
7
21
N
22
N
23
N
elemento
vaz del
Cl
8
24
N
25
N
26
N
Cl
9
27
N
28
N
29
N
Cl
10
30
N
31
N
32
N
17
Os elementos vão Os elementos vão sendo inseridos até sendo inseridos até que não caiba que não caiba elemento em alguma elemento em alguma classe; exemplo: classe; exemplo: tabela vistatabela vista
elemento
vaz del
Cl
0
0 sergio N N
1 N
2 N
Cl
1
3 N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
N
22
N
23
N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
18
O próximo elemento O próximo elemento da classe 6 é inserido da classe 6 é inserido na próxima posição na próxima posição vaziavazia
elemento
vaz del
Cl
0
0 sergio N N
1 N
2 N
Cl
1
3 N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
N
23
N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
19
Continua a inserção Continua a inserção até chegar um até chegar um elemento da classe 7elemento da classe 7
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
N
23
N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
alessandra
N N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
20
Insere-se o elemento Insere-se o elemento na primeira posição na primeira posição vazia a partir da vazia a partir da classe 7classe 7
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
alessandra
N N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
21
Classe 0 cheia, insere Classe 0 cheia, insere na próxima posição na próxima posição vaziavazia
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
alessandra
N N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
22
Continua até o Continua até o próximo problemapróximo problema
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
N
26
N
Cl
9
27
alessandra
N N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
23
Só há posição vazia Só há posição vazia para elemento da para elemento da classe 6 na classe 8classe 6 na classe 8
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
N
29
N
Cl
10
30
sonia N N
31
N
32
N
24
E assim até o finalE assim até o final
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 antonio N N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
berenice
N N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
fernando
N N
29
N
Cl
10
30
sonia N N
31
N
32
N
25
Procuras, inserções e deleções realizam percurso que Procuras, inserções e deleções realizam percurso que começa no início da classe correspondentecomeça no início da classe correspondente
Proibindo-se deleções, procuras e inserções encerram Proibindo-se deleções, procuras e inserções encerram percurso ao encontrar o elemento ou uma posição percurso ao encontrar o elemento ou uma posição vazia (desnecessário o campo del)vazia (desnecessário o campo del)
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 antonio N N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
berenice
N N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N N
20
carlos N N
Cl
7
21
severino
N N
22
moises N N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
fernando
N N
29
N
Cl
10
30
sonia N N
31
N
32
N
26
Permitindo-se deleções, marca-se o campo Permitindo-se deleções, marca-se o campo deldel do do elemento deletadoelemento deletado
Exemplo: deletando-se Exemplo: deletando-se paulopaulo e e moisesmoises, inserção na , inserção na classe 6 ou 7, só na classe 8 e adianteclasse 6 ou 7, só na classe 8 e adiante
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 antonio N N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
berenice
N N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N
20
carlos N N
Cl
7
21
severino
N N
22
moises N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
fernando
N N
29
N
Cl
10
30
sonia N N
31
N
32
N
27
Uma procura por um elemento da classe 6 que não Uma procura por um elemento da classe 6 que não esteja presente, só termina na posição 26 (vazia)esteja presente, só termina na posição 26 (vazia)
Encerrar uma procura para inserção, quando Encerrar uma procura para inserção, quando encontrado um elemento deletado, não garante que o encontrado um elemento deletado, não garante que o elemento a ser inserido não esteja presenteelemento a ser inserido não esteja presente
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 antonio N N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
berenice
N N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N
20
carlos N N
Cl
7
21
severino
N N
22
moises N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
fernando
N N
29
N
Cl
10
30
sonia N N
31
N
32
N
28
A recuperação de posições deletadas é um trabalho A recuperação de posições deletadas é um trabalho complicado de remanejamento dos elementos dentro complicado de remanejamento dos elementos dentro do vetordo vetor
Isso deve ser feito quando se esgotarem as posições de Isso deve ser feito quando se esgotarem as posições de inserçãoinserção
elemento
vaz del
Cl
0
0 sergio N N
1 rogerio N N
2 itamar N N
Cl
1
3 ciro N N
4 antonio N N
5 N
Cl
2
6 N
7 N
8 N
Cl
3
9 orlando N N
10
juliana N N
11
N
elemento
vaz del
Cl
4
12
jose N N
13
berenice
N N
14
N
Cl
5
15
maria N N
16
raimundo
N N
17
N
Cl
6
18
francisco
N N
19
paulo N
20
carlos N N
Cl
7
21
severino
N N
22
moises N
23
joao N N
elemento
vaz del
Cl
8
24
tania N N
25
gisele N N
26
N
Cl
9
27
alessandra
N N
28
fernando
N N
29
N
Cl
10
30
sonia N N
31
N
32
N