1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto...

Post on 17-Apr-2015

105 views 0 download

Transcript of 1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto...

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