SlideShare uma empresa Scribd logo
Estruturas de Dados
EstruturasdeDados
Estruturas Lineares
Pilha
Stack
Fila
Queue
Lista
List
Vetor e Matriz
Array
Estruturas Não-Lineares
Tabela de Espalhamento
Hash Table
Árvore
Tree
as estruturas de dados
Estruturas
› Dados organizados em
arranjos não lineares
› Itens NÃO podem ser percorridos
com uma única repetição
~
› Nome usado em inglês para as Tabelas de Espalhamento
› Inspirado na ideia de um ponto de entrada
poder se espalhar (dispersar) em vários itens
Chamadas também de
Tabelas de Dispersão
class HashTable {
constructor () {
this.table = {}
this.length = 0
}
// methods...
}
JavaScript
Atributos da Estrutura
Baseia-se em categorizar os itens criando chaves de identificação
únicas (hash), que apontam para um ou mais itens armazenados
naprática
naprática
jon snow8
arya stark
bran stark
10
jaime lannister15
cersei lannister
tyrion lannister
16
daenerys targaryen18
jon snow
daenerys targaryen
arya stark
cersei lannister
jaime lannister
bran stark
tyrion lannister
Consegue imaginar o critério
usado para gerar estas chaves?
usandoainicial
{
j: ['jon snow', 'jaime lannister’],
d: ['daenerys targaryen’],
t: ['theon greyjoy', 'tyrion lannister’],
a: ['arya stark’],
s: ['sansa stark’],
b: ['bran stark’],
c: ['cersei lannister']
}
A tabela principal é
um objeto genérico
Cada categoria
gerada vira uma
chave de atributo
O valor de cada
atributo é um vetor de
itens daquela categoria
Lógica para gerar
hash (value) {
return value[0]
}
JavaScript
Exemplo de Funções Hash
hash (value) {
return value.length
}
ou
{
8: ['jon snow’],
10: ['arya stark', 'bran stark’],
11: ['sansa stark’],
13: ['theon greyjoy’],
15: ['jaime lannister’],
16: ['cersei lannister', 'tyrion lannister’],
18: ['daenerys targaryen']
}
Desta vez, o length de cada String inserida foi usado como critério.
Isso seria uma vantagem? Qual será a melhor abordagem para hash?
Lógica para gerar
usandootamanho
{
356180779: ['jon snow’],
374592295: ['bran stark’],
1156590191: ['daenerys targaryen’],
1409403303: ['jaime lannister’],
2600609194: ['tyrion lannister’],
2913731910: ['sansa stark’],
3103384452: ['theon greyjoy’],
4043766576: ['cersei lannister’],
4105310401: ['arya stark']
}
A função hash ideal nunca geraria colisões, ou seja, chaves iguais nunca
seriam obtidas para valores diferentes. Mas conseguir isso é custoso!
Lógica para gerar
semcolisõesnaschaves
JavaScript
Função Hash de Fowler-Noll-Vo
hash (value) {
let hash = 0x811c9dc5
value = Buffer.from(value)
for (let i = 0; i < value.length; i++) {
hash += (hash << 1) + (hash << 4) + (hash << 7) +
(hash << 8) + (hash << 24)
hash = hash ^ value[i]
}
return hash >>> 0
}
Este código demonstra a implementação de uma das funções com melhor equilíbrio
entre desempenho e unicidade das chaves geradas é conhecida por NFV1. Saiba mais:
https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
pra que usar?
› Categorização dos dados › Desempenho em buscas!
Teoricamente, as melhores tabelas são aquelas cujas
funções hash sempre geram uma categoria por item
Na prática, o peso de funções tão precisas pode
estragar o desempenho, portanto, busque o equilíbrio
insert (value) {
let hashed = this.hash(value)
if (this.table[hashed] === undefined) {
this.table[hashed] = []
}
this.length++
this.table[hashed].push(value)
}
JavaScript
Inserir Item
search (value) {
let hashed = this.hash(value)
if (this.table[hashed] !== undefined) {
let index = this.table[hashed].indexOf(value)
return this.table[hashed][index]
}
return null
}
JavaScript
Buscar Item
remove (value) {
let hashed = this.hash(value)
if (this.table[hashed] !== undefined) {
let index = this.table[hashed].indexOf(value)
if (index > -1) {
this.length--
this.table[hashed].splice(index, 1)
}
}
}
JavaScript
Remover Item
import HashTable from './HashTable'
let got = new HashTable()
got.insert('jon snow')
got.insert('daenerys targaryen')
got.insert('cersei lannister')
got.insert('tyrion lannister')
got.remove('jon snow')
got.insert('jon targaryen')
let who = await prompt('Qual o melhor em Game of Thrones? ')
if (got.search(who)) {
console.log('Perfeito, nós também achamos!’)
console.log('Quando se joga o jogo dos tronos, ou vence ou morre.')
} else {
console.log('Péssima escolha!’)
console.log('A noite é escura e cheia de terrores.')
}
JavaScript
Exemplo de Utilização
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)

Mais conteúdo relacionado

Mais procurados

Algoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosAlgoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentos
Mauro Pereira
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
samuelthiago
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
Adriano Teixeira de Souza
 
Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)
Rafael Barbolo
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
Adriano Teixeira de Souza
 

Mais procurados (20)

Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Estrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e FunçõesEstrutura de Dados - Aula 03 - Ponteiros e Funções
Estrutura de Dados - Aula 03 - Ponteiros e Funções
 
Algoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentosAlgoritmos e lp parte 2-fundamentos
Algoritmos e lp parte 2-fundamentos
 
Java AWT and Java FX
Java AWT and Java FXJava AWT and Java FX
Java AWT and Java FX
 
Estruturas de Dados - Árvores Multivias (Multiway Tree)
Estruturas de Dados - Árvores Multivias (Multiway Tree)Estruturas de Dados - Árvores Multivias (Multiway Tree)
Estruturas de Dados - Árvores Multivias (Multiway Tree)
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Queues
QueuesQueues
Queues
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Heaps
HeapsHeaps
Heaps
 
Polynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptxPolynomial reppresentation using Linkedlist-Application of LL.pptx
Polynomial reppresentation using Linkedlist-Application of LL.pptx
 
Estrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memóriaEstrutura de Dados - Alocação dinâmica de memória
Estrutura de Dados - Alocação dinâmica de memória
 
Doubly linked list (animated)
Doubly linked list (animated)Doubly linked list (animated)
Doubly linked list (animated)
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Análise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenaçãoAnálise de desempenho de algoritmos de ordenação
Análise de desempenho de algoritmos de ordenação
 
Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)Herança em Banco de Dados Objeto-Relacional (BDOR)
Herança em Banco de Dados Objeto-Relacional (BDOR)
 
PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
Binary Search Tree
Binary Search TreeBinary Search Tree
Binary Search Tree
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Aula15 - Array PHP
Aula15 - Array PHPAula15 - Array PHP
Aula15 - Array PHP
 
Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 

Semelhante a Estruturas de Dados - Tabelas de Espalhamento (Hash Table)

Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
Maurício Linhares
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORM
Fábio Rehm
 

Semelhante a Estruturas de Dados - Tabelas de Espalhamento (Hash Table) (20)

Hash e Btree
Hash e BtreeHash e Btree
Hash e Btree
 
HashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em JavaHashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em Java
 
Collections Java
Collections JavaCollections Java
Collections Java
 
Tabelas hash
Tabelas hashTabelas hash
Tabelas hash
 
Arrays PHP - Criação de sites II
Arrays PHP - Criação de sites IIArrays PHP - Criação de sites II
Arrays PHP - Criação de sites II
 
Slides do cuso_php
Slides do cuso_phpSlides do cuso_php
Slides do cuso_php
 
Curso java 08 - mais sobre coleções
Curso java   08 - mais sobre coleçõesCurso java   08 - mais sobre coleções
Curso java 08 - mais sobre coleções
 
Aula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites IIAula 5 PHP - Criação de sites II
Aula 5 PHP - Criação de sites II
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 1
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 1Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 1
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 1
 
SQL Saturday 570 - São Paulo - 2016
SQL Saturday 570 - São Paulo - 2016SQL Saturday 570 - São Paulo - 2016
SQL Saturday 570 - São Paulo - 2016
 
Mapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORMMapeamento Objeto Relacional em PHP com Outlet ORM
Mapeamento Objeto Relacional em PHP com Outlet ORM
 
Curso Programação Web com Ruby on Rails - Aula 03
Curso Programação Web com Ruby on Rails - Aula 03Curso Programação Web com Ruby on Rails - Aula 03
Curso Programação Web com Ruby on Rails - Aula 03
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
Ruby (1)
Ruby (1)Ruby (1)
Ruby (1)
 
Android estrutura de dados
Android estrutura de dadosAndroid estrutura de dados
Android estrutura de dados
 
Aula4
Aula4Aula4
Aula4
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertido
 
Seminário - Java Collections
Seminário - Java CollectionsSeminário - Java Collections
Seminário - Java Collections
 

Mais de Erick Petrucelli

Mais de Erick Petrucelli (9)

Vue.js Summit 2018 - Do Server-Side Rendering ao Nuxt
Vue.js Summit 2018 - Do Server-Side Rendering ao NuxtVue.js Summit 2018 - Do Server-Side Rendering ao Nuxt
Vue.js Summit 2018 - Do Server-Side Rendering ao Nuxt
 
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 2
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 2Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 2
Estruturas de Dados - Árvores Binárias (Binary Tree) - Parte 2
 
Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)Estruturas de Dados - Listas Encadeadas (Linked List)
Estruturas de Dados - Listas Encadeadas (Linked List)
 
Estruturas de Dados - Filas (Queue)
Estruturas de Dados - Filas (Queue)Estruturas de Dados - Filas (Queue)
Estruturas de Dados - Filas (Queue)
 
Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)Estruturas de Dados - Pilhas (Stack)
Estruturas de Dados - Pilhas (Stack)
 
Primeiros Passos com a Usabilidade
Primeiros Passos com a UsabilidadePrimeiros Passos com a Usabilidade
Primeiros Passos com a Usabilidade
 
Recepção dos Ingressantes - Fatec Taquaritinga - 1º/2018
Recepção dos Ingressantes - Fatec Taquaritinga - 1º/2018Recepção dos Ingressantes - Fatec Taquaritinga - 1º/2018
Recepção dos Ingressantes - Fatec Taquaritinga - 1º/2018
 
Apresentação da Fatec Taquaritinga para Escolas
Apresentação da Fatec Taquaritinga para EscolasApresentação da Fatec Taquaritinga para Escolas
Apresentação da Fatec Taquaritinga para Escolas
 
Desenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackDesenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full Stack
 

Último

AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdfAS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
ssuserbb4ac2
 
Obra - Curso de Direito Tributário - Doutrina Direito
Obra - Curso de Direito Tributário - Doutrina DireitoObra - Curso de Direito Tributário - Doutrina Direito
Obra - Curso de Direito Tributário - Doutrina Direito
rarakey779
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
rarakey779
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
rarakey779
 
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
ESCRIBA DE CRISTO
 
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdfInstrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
ssuserbb4ac2
 

Último (20)

Curso de Direito do Trabalho - Maurício Godinho Delgado - 2019.pdf
Curso de Direito do Trabalho - Maurício Godinho Delgado - 2019.pdfCurso de Direito do Trabalho - Maurício Godinho Delgado - 2019.pdf
Curso de Direito do Trabalho - Maurício Godinho Delgado - 2019.pdf
 
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptxSlides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
Slides Lição 9, Betel, Ordenança para uma vida de santificação, 2Tr24.pptx
 
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdfAS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
AS COLUNAS B E J E SUAS POSICOES CONFORME O RITO.pdf
 
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdfTesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
Tesis de Maestría de Pedro Sousa de Andrade (Resumen).pdf
 
AULA Saúde e tradição-3º Bimestre tscqv.pptx
AULA Saúde e tradição-3º Bimestre tscqv.pptxAULA Saúde e tradição-3º Bimestre tscqv.pptx
AULA Saúde e tradição-3º Bimestre tscqv.pptx
 
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
Atividade-9-8o-ano-HIS-Os-caminhos-ate-a-independencia-do-Brasil-Brasil-Colon...
 
Apresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimentoApresentação de vocabulário fundamental em contexto de atendimento
Apresentação de vocabulário fundamental em contexto de atendimento
 
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdf
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdfHans Kelsen - Teoria Pura do Direito - Obra completa.pdf
Hans Kelsen - Teoria Pura do Direito - Obra completa.pdf
 
Obra - Curso de Direito Tributário - Doutrina Direito
Obra - Curso de Direito Tributário - Doutrina DireitoObra - Curso de Direito Tributário - Doutrina Direito
Obra - Curso de Direito Tributário - Doutrina Direito
 
Evangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdfEvangelismo e Missões Contemporânea Cristã.pdf
Evangelismo e Missões Contemporânea Cristã.pdf
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
 
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdfGRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
GRAMÁTICA NORMATIVA DA LÍNGUA PORTUGUESA UM GUIA COMPLETO DO IDIOMA.pdf
 
Fotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anosFotossíntese para o Ensino médio primeiros anos
Fotossíntese para o Ensino médio primeiros anos
 
Desastres ambientais e vulnerabilidadess
Desastres ambientais e vulnerabilidadessDesastres ambientais e vulnerabilidadess
Desastres ambientais e vulnerabilidadess
 
DESAFIO FILOSÓFICO - 1ª SÉRIE - SESI 2020.pptx
DESAFIO FILOSÓFICO - 1ª SÉRIE - SESI 2020.pptxDESAFIO FILOSÓFICO - 1ª SÉRIE - SESI 2020.pptx
DESAFIO FILOSÓFICO - 1ª SÉRIE - SESI 2020.pptx
 
Atividade com a música Xote da Alegria - Falamansa
Atividade com a música Xote  da  Alegria    -   FalamansaAtividade com a música Xote  da  Alegria    -   Falamansa
Atividade com a música Xote da Alegria - Falamansa
 
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
INTRODUÇÃO A ARQUEOLOGIA BÍBLICA [BIBLIOLOGIA]]
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persa
 
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdfInstrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
Instrucoes_A_M_Pranchas_01_a_33_Encadern (4).pdf
 
DIFERENÇA DO INGLES BRITANICO E AMERICANO.pptx
DIFERENÇA DO INGLES BRITANICO E AMERICANO.pptxDIFERENÇA DO INGLES BRITANICO E AMERICANO.pptx
DIFERENÇA DO INGLES BRITANICO E AMERICANO.pptx
 

Estruturas de Dados - Tabelas de Espalhamento (Hash Table)

  • 2. EstruturasdeDados Estruturas Lineares Pilha Stack Fila Queue Lista List Vetor e Matriz Array Estruturas Não-Lineares Tabela de Espalhamento Hash Table Árvore Tree as estruturas de dados
  • 3. Estruturas › Dados organizados em arranjos não lineares › Itens NÃO podem ser percorridos com uma única repetição ~
  • 4. › Nome usado em inglês para as Tabelas de Espalhamento › Inspirado na ideia de um ponto de entrada poder se espalhar (dispersar) em vários itens Chamadas também de Tabelas de Dispersão
  • 5. class HashTable { constructor () { this.table = {} this.length = 0 } // methods... } JavaScript Atributos da Estrutura
  • 6. Baseia-se em categorizar os itens criando chaves de identificação únicas (hash), que apontam para um ou mais itens armazenados naprática
  • 7. naprática jon snow8 arya stark bran stark 10 jaime lannister15 cersei lannister tyrion lannister 16 daenerys targaryen18 jon snow daenerys targaryen arya stark cersei lannister jaime lannister bran stark tyrion lannister Consegue imaginar o critério usado para gerar estas chaves?
  • 8. usandoainicial { j: ['jon snow', 'jaime lannister’], d: ['daenerys targaryen’], t: ['theon greyjoy', 'tyrion lannister’], a: ['arya stark’], s: ['sansa stark’], b: ['bran stark’], c: ['cersei lannister'] } A tabela principal é um objeto genérico Cada categoria gerada vira uma chave de atributo O valor de cada atributo é um vetor de itens daquela categoria Lógica para gerar
  • 9. hash (value) { return value[0] } JavaScript Exemplo de Funções Hash hash (value) { return value.length } ou
  • 10. { 8: ['jon snow’], 10: ['arya stark', 'bran stark’], 11: ['sansa stark’], 13: ['theon greyjoy’], 15: ['jaime lannister’], 16: ['cersei lannister', 'tyrion lannister’], 18: ['daenerys targaryen'] } Desta vez, o length de cada String inserida foi usado como critério. Isso seria uma vantagem? Qual será a melhor abordagem para hash? Lógica para gerar usandootamanho
  • 11. { 356180779: ['jon snow’], 374592295: ['bran stark’], 1156590191: ['daenerys targaryen’], 1409403303: ['jaime lannister’], 2600609194: ['tyrion lannister’], 2913731910: ['sansa stark’], 3103384452: ['theon greyjoy’], 4043766576: ['cersei lannister’], 4105310401: ['arya stark'] } A função hash ideal nunca geraria colisões, ou seja, chaves iguais nunca seriam obtidas para valores diferentes. Mas conseguir isso é custoso! Lógica para gerar semcolisõesnaschaves
  • 12. JavaScript Função Hash de Fowler-Noll-Vo hash (value) { let hash = 0x811c9dc5 value = Buffer.from(value) for (let i = 0; i < value.length; i++) { hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24) hash = hash ^ value[i] } return hash >>> 0 } Este código demonstra a implementação de uma das funções com melhor equilíbrio entre desempenho e unicidade das chaves geradas é conhecida por NFV1. Saiba mais: https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
  • 13. pra que usar? › Categorização dos dados › Desempenho em buscas! Teoricamente, as melhores tabelas são aquelas cujas funções hash sempre geram uma categoria por item Na prática, o peso de funções tão precisas pode estragar o desempenho, portanto, busque o equilíbrio
  • 14. insert (value) { let hashed = this.hash(value) if (this.table[hashed] === undefined) { this.table[hashed] = [] } this.length++ this.table[hashed].push(value) } JavaScript Inserir Item
  • 15. search (value) { let hashed = this.hash(value) if (this.table[hashed] !== undefined) { let index = this.table[hashed].indexOf(value) return this.table[hashed][index] } return null } JavaScript Buscar Item
  • 16. remove (value) { let hashed = this.hash(value) if (this.table[hashed] !== undefined) { let index = this.table[hashed].indexOf(value) if (index > -1) { this.length-- this.table[hashed].splice(index, 1) } } } JavaScript Remover Item
  • 17. import HashTable from './HashTable' let got = new HashTable() got.insert('jon snow') got.insert('daenerys targaryen') got.insert('cersei lannister') got.insert('tyrion lannister') got.remove('jon snow') got.insert('jon targaryen') let who = await prompt('Qual o melhor em Game of Thrones? ') if (got.search(who)) { console.log('Perfeito, nós também achamos!’) console.log('Quando se joga o jogo dos tronos, ou vence ou morre.') } else { console.log('Péssima escolha!’) console.log('A noite é escura e cheia de terrores.') } JavaScript Exemplo de Utilização