A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos."— Transcrição da apresentação:

1 1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos não repetidos Cujas operações são: Cujas operações são: Inserir, Deletar e Membro (verificar se um elemento pertence, ou é membro do conjunto) Além das operações de fazer consultas e de esvaziar Além das operações de fazer consultas e de esvaziar

2 2 Tabela Hashing 1 – Idéia básica Hashing: técnica importante, eficiente e muito usada para a implementação de dicionários. Hashing: técnica importante, eficiente e muito usada para a implementação de dicionários. Hashing = ato de retalhar, recortar ou picar Divisão dos elementos do dicionário em subconjuntos mais gerenciáveis denominados classes (buckets) Divisão dos elementos do dicionário em subconjuntos mais gerenciáveis denominados classes (buckets) A idéia é direcionar procuras, inserções e deleções para apenas uma dessas classes A idéia é direcionar procuras, inserções e deleções para apenas uma dessas classes

3 3 Um dicionário Dic dividido em C classes: Um dicionário Dic dividido em C classes: Como dizer qual a classe de um elemento? Como dizer qual a classe de um elemento? Função classificadora h: para um elemento x, do mesmo tipo dos elementos do dicionário, h(x) é um inteiro do conjunto {0, 1, 2,..., C-1} Função classificadora h: para um elemento x, do mesmo tipo dos elementos do dicionário, h(x) é um inteiro do conjunto {0, 1, 2,..., C-1} Classe 0Classe 1Classe 2Classe C-1

4 4 Para um elemento x, sua classe é h(x) em [0.. C-1] Para um elemento x, sua classe é h(x) em [0.. C-1] Dado um elemento x, ele seria procurado, inserido ou deletado apenas da classe h(x), ignorando-se o conteúdo das outras classes Dado um elemento x, ele seria procurado, inserido ou deletado apenas da classe h(x), ignorando-se o conteúdo das outras classes Essa função deve ser tal que consiga equilibrar o número de elementos das classes. Essa função deve ser tal que consiga equilibrar o número de elementos das classes. Classe 0Classe 1Classe 2Classe C-1

5 5 Exemplo: seja a montagem de um dicionário de nomes de, no máximo, 10 caracteres. Seja x um nome e x[i] o i ésimo caractere de x Seja x um nome e x[i] o i ésimo caractere de x Seja onde Seja onde n é o nº de caracteres de x e C=11. Seja a seguir uma tabela de nomes a serem introduzidos no dicionário, ao lado da sua somatória e de sua função h Seja a seguir uma tabela de nomes a serem introduzidos no dicionário, ao lado da sua somatória e de sua função h

6 6 Conteúdo das classes do dicionário: Classe 0 sergio rogerio itamar ciro Classe 1 antonio Classe 2Classe 3 orlando juliana Classe 4 jose berenice Classe 5 maria raimundo Classe 6 francisco paulo carlos severino gisele Classe 7 moises joao Classe 8 tania Classe 9 alessandra fernando Classe 10 sonia

7 7 Há duas estruturas muito conhecidas para as classes de uma tabela hashing: Há duas estruturas muito conhecidas para as classes de uma tabela hashing: Hashing aberto: as classes são guardadas em listas lineares encadeadas Hashing aberto: as classes são guardadas em listas lineares encadeadas Hashing fechado: as classes são guardadas em blocos de elementos adjacentes num vetor de elementos Hashing fechado: as classes são guardadas em blocos de elementos adjacentes num vetor de elementos

8 8 2 – Hashing aberto Estrutura básica:

9 9 Exemplo: hashing aberto para a tabela abaixo:

10 10 Declarações e operações: Declarações e operações: const int C = 11; /* escolhida convenientemente */ typedef char cadeia [11]; typedef struct celula celula; struct celula {cadeia elemento; celula *prox;}; typedef celula *dicionario [11]; int h (cadeia x) { int i, soma; for (soma = 0, i = 0; x[i] != \0; i++) soma += x[i]; return soma % C; }

11 11 void Esvaziar (dicionario Dic) { int i; celula *p; for (i = 0; i <= C-1; i++) while (Dic[i] != NULL) { p = Dic[i]; Dic[i] = Dic[i]->prox; free (p); }} logic Membro (cadeia x, dicionario Dic) { celula *pont; pont = Dic[h(x)]; while (pont != NULL) if (pont->elemento == x) return TRUE; else pont = pont->prox; return FALSE; }

12 12 void Inserir (cadeia x; dicionario Dic) { int class; celula *p; if (!Membro (x, Dic)) { 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] prox = p; Dic[class] prox = p;}}

13 13 void Deletar (cadeia x, dicionario Dic) { celula *p, *q; int class; logic achou; class = h(x); if (Dic[class] != NULL) { if (Dic[class]->elemento == x) { if (Dic[class]->elemento == x) { q = Dic [class]; Dic [class] = Dic[class]->prox; free (q); Dic [class] = Dic[class]->prox; free (q);} 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); } else p = p->prox; }}}

14 14 3 – Hashing fechado É uma técnica apropriada para dicionários em que a operação de deletar não é frequente É uma técnica apropriada para dicionários em que a operação de deletar não é frequente Os elementos do dicionário são armazenados em um vetor Os elementos do dicionário são armazenados em um vetor

15 15 Cada posição do vetor guarda um elemento e mais dois flags Cada posição do vetor guarda um elemento e mais dois flags Um para dizer se a posição está vazia Um para dizer se a posição está vazia Outro para dizer se o elemento ali colocado foi deletado Outro para dizer se o elemento ali colocado foi deletado elementovaziodeletado

16 16 As classes são guardadas em blocos de posições adjacentes no vetor (Na figura abaixo, são reservadas 3 posições por classe) As classes são guardadas em blocos de posições adjacentes no vetor (Na figura abaixo, são reservadas 3 posições por classe) Para cada elemento inserido, o flag vazio torna-se falso; o flag del inicialmente é falso em todas as posições Para cada elemento inserido, o flag vazio torna-se falso; o flag del inicialmente é falso em todas as posições elementovazdel Cl 0 0N 1N 2N Cl 1 3N 4N 5N Cl 2 6N 7N 8N Cl 3 9N 10N 11N elementovazdel Cl 4 12N 13N 14N Cl 5 15N 16N 17N Cl 6 18N 19N 20N Cl 7 21N 22N 23N elementovazdel Cl 8 24N 25N 26N Cl 9 27N 28N 29N Cl 10 30N 31N 32N

17 17 Os elementos vão sendo inseridos até que não caiba elemento em alguma classe; exemplo: tabela vista Os elementos vão sendo inseridos até que não caiba elemento em alguma classe; exemplo: tabela vista elementovazdel Cl 0 0sergioNN 1N 2N Cl 1 3N 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21N 22N 23N elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27N 28N 29N Cl 10 30soniaNN 31N 32N

18 18 O próximo elemento da classe 6 é inserido na próxima posição vazia O próximo elemento da classe 6 é inserido na próxima posição vazia elementovazdel Cl 0 0sergioNN 1N 2N Cl 1 3N 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22N 23N elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27N 28N 29N Cl 10 30soniaNN 31N 32N

19 19 Continua a inserção até chegar um elemento da classe 7 Continua a inserção até chegar um elemento da classe 7 elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3N 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22N 23N elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27alessandraNN 28N 29N Cl 10 30soniaNN 31N 32N

20 20 Insere-se o elemento na primeira posição vazia a partir da classe 7 Insere-se o elemento na primeira posição vazia a partir da classe 7 elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3N 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23N elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27alessandraNN 28N 29N Cl 10 30soniaNN 31N 32N

21 21 Classe 0 cheia, insere na próxima posição vazia Classe 0 cheia, insere na próxima posição vazia elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23N elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27alessandraNN 28N 29N Cl 10 30soniaNN 31N 32N

22 22 Continua até o próximo problema Continua até o próximo problema elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23joaoNN elementovazdel Cl 8 24taniaNN 25N 26N Cl 9 27alessandraNN 28N 29N Cl 10 30soniaNN 31N 32N

23 23 Só há posição vazia para elemento da classe 6 na classe 8 Só há posição vazia para elemento da classe 6 na classe 8 elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4N 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13N 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28N 29N Cl 10 30soniaNN 31N 32N

24 24 E assim até o final E assim até o final elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4antonioNN 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13bereniceNN 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28fernandoNN 29N Cl 10 30soniaNN 31N 32N

25 25 Procuras, inserções e deleções realizam percurso que começa no início da classe correspondente Procuras, inserções e deleções realizam percurso que começa no início da classe correspondente Proibindo-se deleções, procuras e inserções encerram percurso ao encontrar o elemento ou uma posição vazia (desnecessário o campo del) Proibindo-se deleções, procuras e inserções encerram percurso ao encontrar o elemento ou uma posição vazia (desnecessário o campo del) elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4antonioNN 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13bereniceNN 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloNN 20carlosNN Cl 7 21severinoNN 22moisesNN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28fernandoNN 29N Cl 10 30soniaNN 31N 32N

26 26 Permitindo-se deleções, marca-se o campo del do elemento deletado Permitindo-se deleções, marca-se o campo del do elemento deletado Exemplo: deletando-se paulo e moises, inserção na classe 6 ou 7, só na classe 8 e adiante Exemplo: deletando-se paulo e moises, inserção na classe 6 ou 7, só na classe 8 e adiante elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4antonioNN 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13bereniceNN 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloN 20carlosNN Cl 7 21severinoNN 22moisesN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28fernandoNN 29N Cl 10 30soniaNN 31N 32N

27 27 Uma procura por um elemento da classe 6 que não esteja presente, só termina na posição 26 (vazia) Uma procura por um elemento da classe 6 que não esteja presente, só termina na posição 26 (vazia) Encerrar uma procura para inserção, quando encontrado um elemento deletado, não garante que o elemento a ser inserido não esteja presente Encerrar uma procura para inserção, quando encontrado um elemento deletado, não garante que o elemento a ser inserido não esteja presente elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4antonioNN 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13bereniceNN 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloN 20carlosNN Cl 7 21severinoNN 22moisesN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28fernandoNN 29N Cl 10 30soniaNN 31N 32N

28 28 A recuperação de posições deletadas é um trabalho complicado de remanejamento dos elementos dentro do vetor A recuperação de posições deletadas é um trabalho complicado de remanejamento dos elementos dentro do vetor Isso deve ser feito quando se esgotarem as posições de inserção Isso deve ser feito quando se esgotarem as posições de inserção elementovazdel Cl 0 0sergioNN 1rogerioNN 2itamarNN Cl 1 3ciroNN 4antonioNN 5N Cl 2 6N 7N 8N Cl 3 9orlandoNN 10julianaNN 11N elementovazdel Cl 4 12joseNN 13bereniceNN 14N Cl 5 15mariaNN 16raimundoNN 17N Cl 6 18franciscoNN 19pauloN 20carlosNN Cl 7 21severinoNN 22moisesN 23joaoNN elementovazdel Cl 8 24taniaNN 25giseleNN 26N Cl 9 27alessandraNN 28fernandoNN 29N Cl 10 30soniaNN 31N 32N


Carregar ppt "1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos."

Apresentações semelhantes


Anúncios Google