SlideShare ist ein Scribd-Unternehmen logo
1 von 71
Downloaden Sie, um offline zu lesen
Hash e Btree
Prof: Sergio Souza Costa
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Introdução
Banco de dados utilizam indices para
recuperação de informação.
Arquivos de índices
Introdução: Indexação
Objetivo:
Permitir um rápido acesso aleatório aos registros num
arquivo.

O que é um índice?
Uma estrutura de dados adicional associada ao arquivo
(tabela).
Introdução: Tipos de Indexação
Hash
Baseiam-se na distribuição uniforme dos valores
determinados por uma função (função de hash).

Ordenados
Baseiam-se na ordenação dos valores.
Mononível x Multinível
Introdução: Hash
Exemplos de hash
bucket 0
bucket 1
bucket 2

bucket de overflow para o bucket 1

bucket 3
Encadeamento (ou lista) de overflow para o bucket 3
Introdução: Mononível
Introdução: Multinível (Btree)
Hash
Como aproveitar as características de acesso constante de
uma estrutura de dados contigua (vetor, arranjo) ?

Pense na matrícula de alunos em uma universidade ?
Posso usá-la diretamente como um índice de um vetor ?
Como seria a complexidade de busca ? Quais problemas ?
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
char nome[81];
char email[41];
};
typedef struct aluno Aluno;
24452

Rafael

Quanto será o consumo de memoria ?
Hash
Por exemplo:
15600

Tancredo

struct aluno {
int mat;
// 4 bytes
= 4 bytes
char nome[81]; // 1 byte * 81 = 81 bytes
char email[41]; // 1 byte * 41 = 41 bytes
};
Total = 126 bytes
typedef struct aluno Aluno;
24452

Rafael

Quanto será o consumo de memoria ?
Hash
E se a matricula fosse composta por mais dígitos,
por exemplo 8.
E se quiséssemos indexar por outra informação,
ao invés da matricula, por exemplo o nome.
Função
Método da divisão
h(k) = k mod m

21398
17328
21513
21613
21264

Para m igual a 100, concluam o
mapeamento e me diz o que
identificaram ?

98
Função sobrejetora
Pode ocorrer que mais de um
"índice" seja mapeado para um único
valor.

Neste caso dizemos que ocorreu
uma "colisão".
Colisão

Colisão
Funçao hash
Função hash é como uma função qualquer, porém
o grande desafio é gerar funções onde ocorra
poucas colisões.
Em rede e sistemas operacionais vocês verão alguns
algoritmos, como o md5 e sha-1.
Como vocês acham que funciona a autenticação em
um sistem unix ?
Tabelas de espalhamento (Hash)
●

●

●

●

●

Hash é uma generalização da noção mais simples de um arranjo comum,
sendo uma estrutura de dados do tipo dicionário.
Dicionários são estruturas especializadas em prover as operações de
inserir, pesquisar e remover.
A idéia central do Hash é utilizar uma função, aplicada sobre parte da
informação (chave), para retornar o índice onde a informação deve ou
deveria estar armazenada.
Esta função que mapeia a chave para um índice de um arranjo é chamada
de Função de Hashing.
A estrutura de dados Hash é comumente chamada de Tabela Hash.
Tabelas de espalhamento (Hash)
123.456.781-00
143.576.342-23
345.365.768-93
879.094.345-45
Tabela
Hash

19
20
...
37
...
50
...
85
...

Função
de
Hashing

19
37
50
85

123.456.781-00; Fausto Silva; Av. Canal. Nº 45.

143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27.
345.365.768-93; Gugu Liberato; Av. Atlântica. S/N.
879.094.345-45 ; Hebe Camargo; Rua B. Nº 100.
Função Hash
●

●

●

●

●

A Função de Hashing é a responsável por gerar um índice a partir
de uma determinada chave.
O ideal é que a função forneça índices únicos para o conjunto das
chaves de entrada possíveis.
A função de Hashing é extremamente importante, pois ela é
responsável por distribuir as informações pela Tabela Hash.
A implementação da função de Hashing tem influência direta na
eficiência das operações sobre o Hash.

Tal função deve ser fácil de se computar
Função Hash
Função Hash
Considerem uma função hash que mapeia todos os
valores para o mesmo indice. Qual será a
complexidade de busca ?
Considerem uma função hash que mapeia apenas
um valor para cada indice. Qual será a
complexidade de busca?
Como representar ?
Como representar ?

Precisamos de uma função Hash
Como representar ?

Precisamos de uma função Hash
Precisamos de um arranjo (vetor)
Como representar ?

Precisamos de uma função Hash
Precisamos de um arranjo (vetor)
Precisamos tratar as colisões
Tratando colisões
Endereçamento fechado
Endereçamento aberto
Endereçamento fechado
Endereçamento fechado
No endereçamento fechado, a posição de inserção
não muda. Todos devem ser inseridos na mesma
posição, através de uma lista ligada em cada uma.
20 mod 5 = 0
18 mod 5 = 3

0

20

1
2

25 mod 5 = 0
colisão com 20

3
4

18

25
Endereçamento fechado
A busca é feita do mesmo modo: calcula-se o valor da função
hash para a chave, e a busca é feita na lista correspondente.
Se o tamanho das listas variar muito, a busca pode se tornar
ineficiente, pois a busca nas listas se torna seqüencial

0

20

4

15

11

1
2
3

0

88

32

60
Endereçamento fechado
A função HASH deve distribuir as chaves entre as
posições de maneira uniforme
0

1

0

15

2

3

4

5

6

10

4

13

31

88

20
Endereçamento fechado
Chained-Hash-Search(T,k)
procure um elemento com chave k na lista T[h(k)] e
devolva seu ponteiro
Chained-Hash-Insert(T,x)
insira x na cabeça da lista T[h(key[x])]
Chained-Hash-Delete(T,x)
remova x da lista T[h(key[x])]
Atividade
Endereçamento aberto
No endereçamento aberto, todos os elementos são
armazenados na própria tabela hash.
Para realizar uma inserção, examinamos/testamos
sucessivamente a tabela hash ate que encontrarmos um slot
vazio no qual a chave sera inserida.
Em endereçamento aberto, a tabela hash pode encher, de forma
que não seja mais possível inserir elementos.
Endereçamento aberto - Inserção
0
1

9

Valores: 204, 44, 58, 10, 100, 25, 20
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204

9
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204
44

9
Endereçamento aberto - Inserção
Valores: 204, 44, 58, 10, 100, 25, 20

0
1

204
44

9

Terminem de completar ....
Endereçamento aberto
Algoritmo de inserção
● Usa a função hash para calcular o endereço
● Caso esteja ocupado, procure um local vazio.
● Se der uma volta completa, significa que esta cheia
Algoritmo de busca
● Usa a função hash para calcular o endereço
● Enquanto nao achar o valor procurado e nem um
espaço vazio.
● Se der uma volta completa, significa que o valor não
está lá.
Endereçamento aberto

Quais conclusões
que são possíveis
tirar ?

Algoritmo de inserção
● Usa a função hash para calcular o endereço
● Caso esteja ocupado, procure um local vazio.
● Se der uma volta completa, significa que esta cheia
Algoritmo de busca
● Usa a função hash para calcular o endereço
● Enquanto nao achar o valor procurado e nem um
espaço vazio.
● Se der uma volta completa, significa que o valor não
está lá.
Endereçamento aberto
A tabela tem que ser tratada de modo circular,
quando chega no fim da tabela a varredura
reinicia na posição 0.
Quanto mais "cheia" a tabela estiver, pior será
a eficiência.
Btree
Em grandes bancos de dados os índices tendem a
crescer e são armazenados em memoria secundária.
Acesso a disco não é constante.
Btree
Árvores de Busca Binária
Apropriada para memória principal
Ineficiente em memória secundária

Acesso: cerca de log2n
passos.

Em memoria

Em disco
Btree
As árvores B são árvores multicaminhos (ou multidirecionais)
balanceadas projetadas para trabalhar com dispositivos de
armazenamento secundário como discos magnéticos.
Diferente das árvores binárias, cada nó em uma árvore B pode ter
muitos filhos, isto é, o grau de um nó pode ser muito grande.
Elas visam otimizar as operações de entrada e saída nos dispositivos.
O tempo de acesso às informações em um disco é prejudicado
principalmente pelo tempo de posicionamento do braço de leitura.
Btree
Poucas operações de disco, 1000 chaves.
0 disk ops
1000 keys

1000
…
1001

1000

1000

…

…

…

1001

1001

1001

1000

1000

1000

…

…

1000

1 disk ops
1,001,000 keys

2 disk ops
1,002,001,000 keys
Btree
Árvores B têm vantagens substanciais em relação a outros tipos
de implementações quanto ao tempo de acesso e pesquisa aos
nós.
O criador das árvores B, Rudolf Bayer, não definiu claramente de
onde veio o B das árvores B.
Ao que parece, o B vem de balanceamento onde todos as folhas
da árvore estão em um mesmo nível.
Também é possível que o B tenha vindo de seu sobrenome
Bayer, ou ainda do nome da empresa onde trabalhava Boeing,
no Boeing Scientific Research Labs.
Btree
Árvore B é uma estrutura de dados que utiliza o recurso de
manter mais de uma chave em cada nó da estrutura.
Ela proporciona uma organização de ponteiros de tal forma
que as operações buscas, inserções e remoções são
executadas rapidamente.
As árvores B são largamente utilizadas como forma de
armazenamento em memória secundária. Diversos
sistemas comerciais de Banco de dados e sistemas de
arquivo, por exemplo, as empregam.
Btree: Estrutura
Os elementos dentro de um nó estão ordenados.
O ponteiro situado entre dois elementos a e b aponta para a
sub-árvore que contém todos os elementos entre a e b.
a

<a

b

[a,b]

c

[b,c]

>c
Btree: Definições (1)
1. Seja T uma árvore-B com raiz (root[T]). Ela possuirá então
as seguintes propriedades: 1. Todo o no X tem os seguintes
campos:
a. n[x], o numero de chaves atualmente guardadas no nodo x,
b. As n[x] chaves, guardadas em ordem crescente, tal que
key1[x] <= key2[x] <= … <= keyn[x]
c. leaf [x], Um valor booleano, TRUE se x e uma folha e FALSE
se x e um nodo interno
MO637 – Complexidade de Algoritmos I Arvores
B

Baseado no livro do Cormem
Btree: Definições (2)
2. Cada no interno x tambem contem n[x] + 1 apontadores c1[x],
c2[x],...,cn[x]+1[x] para os filhos. As folhas tem seu apontador
nulo

3. As chaves keyi[x] separam os intervalos de chaves guardadas
em cada sub-arvore: se ki e uma chave guardada numa subarvore com raiz ci[x], entao:
k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤...≤ keyn[x] ≤ kn+1
4.Todas as folhas da árvore estão no mesmo nível.
Baseado no livro do Cormem
Btree: Definições (3)
5. Existe um número máximo e mínimo de filhos em um nó.
Este número pode ser descrito em termos de um inteiro fixo t
maior ou igual a 2 chamado grau mínimo.
● Todo o nó diferente da raiz deve possuir pelo menos t-1 chaves. Todo
o nó interno diferente da raiz deve possuir pelo menos t filhos. Se a
árvore não é vazia, então a raiz possui pelo menos uma chave.
● Todo o nó pode conter no máximo 2t - 1 chaves. Logo um nó interno
pode ter no máximo 2t filhos. Dizemos que um nó é cheio se ele
contém 2t - 1 chaves.
Btree
De acordo com a definição a árvore B mais simples ocorre
quando t=2. Neste caso todo o nó diferente da raiz possui
2, 3 ou 4 filhos. Esta árvore é também conhecida
por árvore 2-3-4.
Grau mínimo e Ordem
Cormen não fala em Ordem, apenas em grau
mínimo t.
Diferentes definições para ordem:
● Bayer & McCreight 1972, número mínimo de chaves
● Knuth 1997, número maximo de filhos
Btree: Codificação
Considerando que os elementos dentro de um nó x da
B-tree esteja organizado de forma linear, e que:
n[x] = quantidade de chaves no nó x
keyi[x] = valor da chave do nó x na posição i
leaf[x] = retorna verdadeiro caso o nó seja folha

Operações de acesso
Disk-Read = operação de leitura do nó em disco
Disk-Write = operação de leitura do nó em disco
Btree: construtor
Btree: Busca
A busca em uma árvore B é uma função parecida com a de busca
em uma árvore de busca binária, exceto o fato de que se deve
decidir entre vários caminhos.
Como as chaves estão ordenadas, pode-se realizar uma busca
binária nos elementos de cada nó.
● Se a chave não for encontrada no nó em questão, continuase a busca nos filhos deste nó, realizando-se novamente a
busca binária.
● Caso o nó não esteja contido na árvore a busca terminará ao
encontrar um ponteiro igual a NULL.
Busca
Busca
Procedimento para pesquisa do número 13

30

40
50

10 20

348
9

11 13 17

25 28

33 36

42 45
48

52 55
Busca
Procedimento para pesquisa do número 55

30

10 20

3489

11 13 17

40 50

25 28

33 36

42 45 48

52 55
Inserção
Localizar o nó folha X onde o novo elemento deve ser inserido.
●Se o no X não estiver cheio, basta inserir.
●Se o nó X estiver cheio, realizar uma subdivisão de nós
●passar o elemento mediano de X para seu pai
●subdividir X em dois novos nós com t - 1 elementos
●inserir a nova chave
Se o pai de X também estiver cheio, repete-se recursivamente a
subdivisão acima para o pai de X
No pior caso terá que aumentar a altura da árvore B para poder
inserir o novo elemento
Divisão do nodo - Split
Divisão do nodo - Split
Divisão do nodo - Split

T=2
Inserção

È o caso onde a
árvore cresce

Insere na nova
raiz
Inserção
Exemplo (1)
Exemplo (2)
Atividade
Segundo o algoritmo do Cormen, insira os seguintes
elementos:
●Para t=2 e t = 3, insira 4,5,1,12,28,15
●Para t=2 e t = 3, insira 12, 45, 67, 8,9, 15, 17 19
Atividade
A partir de uma árvore B vazia (t=2):
●Insira os seguintes valores (20,30,50,80, 12, 15)
●Agora remova o 50, 80
A partir de uma árvore B vazia (t=3)
●Insira os valores [40,60,80,90,100,20,105,12]
●Remova os valores [90,12,40,100]
Prática
Baixem o seguinte código, e concluem a
codificação. Usando com referencia
Cormen.
Referencia

Weitere ähnliche Inhalte

Was ist angesagt?

Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Elementos de Matemática Básica - Conjuntos Numéricos
Elementos de Matemática Básica - Conjuntos NuméricosElementos de Matemática Básica - Conjuntos Numéricos
Elementos de Matemática Básica - Conjuntos NuméricosMilton Henrique do Couto Neto
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfEdkallenn Lima
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em JavaDenis L Presciliano
 
Práticas-Experimentais-de-Matemática_EM_Vol2.pdf
Práticas-Experimentais-de-Matemática_EM_Vol2.pdfPráticas-Experimentais-de-Matemática_EM_Vol2.pdf
Práticas-Experimentais-de-Matemática_EM_Vol2.pdfPedroHenriqueMilagre1
 
Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]Tuane Paixão
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
4ª Lista de Exercícios – Logaritmos
4ª Lista de Exercícios – Logaritmos4ª Lista de Exercícios – Logaritmos
4ª Lista de Exercícios – Logaritmosceliomelosouza
 
Introdução a função.ppt
Introdução a função.pptIntrodução a função.ppt
Introdução a função.pptERANDIDELIMACRUZ
 
Matemática - Exercício de Semelhança de Triângulo
Matemática -  Exercício de Semelhança de Triângulo Matemática -  Exercício de Semelhança de Triângulo
Matemática - Exercício de Semelhança de Triângulo Aulas De Matemática Apoio
 
Função Composta - Teoría e Exercícios resolvidos
Função Composta - Teoría e Exercícios resolvidosFunção Composta - Teoría e Exercícios resolvidos
Função Composta - Teoría e Exercícios resolvidosnumerosnamente
 
Intervalos numéricos
Intervalos numéricosIntervalos numéricos
Intervalos numéricosbethbal
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosMauro Pereira
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 

Was ist angesagt? (20)

Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Elementos de Matemática Básica - Conjuntos Numéricos
Elementos de Matemática Básica - Conjuntos NuméricosElementos de Matemática Básica - Conjuntos Numéricos
Elementos de Matemática Básica - Conjuntos Numéricos
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Práticas-Experimentais-de-Matemática_EM_Vol2.pdf
Práticas-Experimentais-de-Matemática_EM_Vol2.pdfPráticas-Experimentais-de-Matemática_EM_Vol2.pdf
Práticas-Experimentais-de-Matemática_EM_Vol2.pdf
 
Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]Aula de distribuição de probabilidade[1]
Aula de distribuição de probabilidade[1]
 
Resumo conjuntos pdf
Resumo conjuntos pdfResumo conjuntos pdf
Resumo conjuntos pdf
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
4ª Lista de Exercícios – Logaritmos
4ª Lista de Exercícios – Logaritmos4ª Lista de Exercícios – Logaritmos
4ª Lista de Exercícios – Logaritmos
 
Função afim resumo teórico e exercícios - celso brasil
Função afim   resumo teórico e exercícios - celso brasilFunção afim   resumo teórico e exercícios - celso brasil
Função afim resumo teórico e exercícios - celso brasil
 
Introdução a função.ppt
Introdução a função.pptIntrodução a função.ppt
Introdução a função.ppt
 
Matemática - Exercício de Semelhança de Triângulo
Matemática -  Exercício de Semelhança de Triângulo Matemática -  Exercício de Semelhança de Triângulo
Matemática - Exercício de Semelhança de Triângulo
 
Função Composta - Teoría e Exercícios resolvidos
Função Composta - Teoría e Exercícios resolvidosFunção Composta - Teoría e Exercícios resolvidos
Função Composta - Teoría e Exercícios resolvidos
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Intervalos numéricos
Intervalos numéricosIntervalos numéricos
Intervalos numéricos
 
Algoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registrosAlgoritmos e lp parte 4-vetores matrizes e registros
Algoritmos e lp parte 4-vetores matrizes e registros
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 

Ähnlich wie Hash e Btree

Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Erick Petrucelli
 
HashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em JavaHashSet, TreeSet, LinkedHashSet em Java
HashSet, TreeSet, LinkedHashSet em JavaemanoelVenancioJusti
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracleEduardo Lopes
 
16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hashRicardo Bolanho
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20Norton Trevisan Roman
 
Coletanea BD e BI (ESAF) - Jaime Correia
Coletanea BD e  BI (ESAF) - Jaime CorreiaColetanea BD e  BI (ESAF) - Jaime Correia
Coletanea BD e BI (ESAF) - Jaime CorreiaWalter Cunha
 
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 ORMFábio Rehm
 
Introdução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de DadosIntrodução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de Dadosinfo_cimol
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Eduardo S. Pereira
 
Algoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortAlgoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortBruno Bitencourt Luiz
 
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdfBrunoBraga94
 

Ähnlich wie Hash e Btree (20)

Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
 
Tabelas hash
Tabelas hashTabelas hash
Tabelas hash
 
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
 
Introdução ao Hive
Introdução ao HiveIntrodução ao Hive
Introdução ao Hive
 
Banco de dados oracle
Banco de dados oracleBanco de dados oracle
Banco de dados oracle
 
16 algoritmos de busca em tabelas - hash
16   algoritmos de busca em tabelas - hash16   algoritmos de busca em tabelas - hash
16 algoritmos de busca em tabelas - hash
 
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20(ACH2002) Introdução à Análise de Algoritmos - Aula 20
(ACH2002) Introdução à Análise de Algoritmos - Aula 20
 
Coletanea BD e BI (ESAF) - Jaime Correia
Coletanea BD e  BI (ESAF) - Jaime CorreiaColetanea BD e  BI (ESAF) - Jaime Correia
Coletanea BD e BI (ESAF) - Jaime Correia
 
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
 
Prova perito pf area 3 1997
Prova perito pf area 3 1997Prova perito pf area 3 1997
Prova perito pf area 3 1997
 
Introdução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de DadosIntrodução a modelagem de dados parte II - Banco de Dados
Introdução a modelagem de dados parte II - Banco de Dados
 
Slides do cuso_php
Slides do cuso_phpSlides do cuso_php
Slides do cuso_php
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
 
Algoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsortAlgoritmos de ordenação - heapsort
Algoritmos de ordenação - heapsort
 
BrunoSQLSat 469
BrunoSQLSat 469BrunoSQLSat 469
BrunoSQLSat 469
 
ÍNdice
ÍNdiceÍNdice
ÍNdice
 
árvore b+
árvore b+árvore b+
árvore b+
 
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf.200.2023-01.Categorias em Bancos de Dados.PT.pdf
.200.2023-01.Categorias em Bancos de Dados.PT.pdf
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 

Mehr von Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 

Mehr von Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 

Hash e Btree

  • 1. Hash e Btree Prof: Sergio Souza Costa
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3. Introdução Banco de dados utilizam indices para recuperação de informação. Arquivos de índices
  • 4. Introdução: Indexação Objetivo: Permitir um rápido acesso aleatório aos registros num arquivo. O que é um índice? Uma estrutura de dados adicional associada ao arquivo (tabela).
  • 5. Introdução: Tipos de Indexação Hash Baseiam-se na distribuição uniforme dos valores determinados por uma função (função de hash). Ordenados Baseiam-se na ordenação dos valores. Mononível x Multinível
  • 6. Introdução: Hash Exemplos de hash bucket 0 bucket 1 bucket 2 bucket de overflow para o bucket 1 bucket 3 Encadeamento (ou lista) de overflow para o bucket 3
  • 9. Hash Como aproveitar as características de acesso constante de uma estrutura de dados contigua (vetor, arranjo) ? Pense na matrícula de alunos em uma universidade ? Posso usá-la diretamente como um índice de um vetor ? Como seria a complexidade de busca ? Quais problemas ?
  • 10. Hash Por exemplo: 15600 Tancredo struct aluno { int mat; char nome[81]; char email[41]; }; typedef struct aluno Aluno; 24452 Rafael Quanto será o consumo de memoria ?
  • 11. Hash Por exemplo: 15600 Tancredo struct aluno { int mat; // 4 bytes = 4 bytes char nome[81]; // 1 byte * 81 = 81 bytes char email[41]; // 1 byte * 41 = 41 bytes }; Total = 126 bytes typedef struct aluno Aluno; 24452 Rafael Quanto será o consumo de memoria ?
  • 12. Hash E se a matricula fosse composta por mais dígitos, por exemplo 8. E se quiséssemos indexar por outra informação, ao invés da matricula, por exemplo o nome.
  • 14. Método da divisão h(k) = k mod m 21398 17328 21513 21613 21264 Para m igual a 100, concluam o mapeamento e me diz o que identificaram ? 98
  • 15. Função sobrejetora Pode ocorrer que mais de um "índice" seja mapeado para um único valor. Neste caso dizemos que ocorreu uma "colisão".
  • 17. Funçao hash Função hash é como uma função qualquer, porém o grande desafio é gerar funções onde ocorra poucas colisões. Em rede e sistemas operacionais vocês verão alguns algoritmos, como o md5 e sha-1. Como vocês acham que funciona a autenticação em um sistem unix ?
  • 18. Tabelas de espalhamento (Hash) ● ● ● ● ● Hash é uma generalização da noção mais simples de um arranjo comum, sendo uma estrutura de dados do tipo dicionário. Dicionários são estruturas especializadas em prover as operações de inserir, pesquisar e remover. A idéia central do Hash é utilizar uma função, aplicada sobre parte da informação (chave), para retornar o índice onde a informação deve ou deveria estar armazenada. Esta função que mapeia a chave para um índice de um arranjo é chamada de Função de Hashing. A estrutura de dados Hash é comumente chamada de Tabela Hash.
  • 19. Tabelas de espalhamento (Hash) 123.456.781-00 143.576.342-23 345.365.768-93 879.094.345-45 Tabela Hash 19 20 ... 37 ... 50 ... 85 ... Função de Hashing 19 37 50 85 123.456.781-00; Fausto Silva; Av. Canal. Nº 45. 143.576.342-23; Carla Perez; Rua Celso Oliva. Nº 27. 345.365.768-93; Gugu Liberato; Av. Atlântica. S/N. 879.094.345-45 ; Hebe Camargo; Rua B. Nº 100.
  • 20. Função Hash ● ● ● ● ● A Função de Hashing é a responsável por gerar um índice a partir de uma determinada chave. O ideal é que a função forneça índices únicos para o conjunto das chaves de entrada possíveis. A função de Hashing é extremamente importante, pois ela é responsável por distribuir as informações pela Tabela Hash. A implementação da função de Hashing tem influência direta na eficiência das operações sobre o Hash. Tal função deve ser fácil de se computar
  • 22. Função Hash Considerem uma função hash que mapeia todos os valores para o mesmo indice. Qual será a complexidade de busca ? Considerem uma função hash que mapeia apenas um valor para cada indice. Qual será a complexidade de busca?
  • 24. Como representar ? Precisamos de uma função Hash
  • 25. Como representar ? Precisamos de uma função Hash Precisamos de um arranjo (vetor)
  • 26. Como representar ? Precisamos de uma função Hash Precisamos de um arranjo (vetor) Precisamos tratar as colisões
  • 29. Endereçamento fechado No endereçamento fechado, a posição de inserção não muda. Todos devem ser inseridos na mesma posição, através de uma lista ligada em cada uma. 20 mod 5 = 0 18 mod 5 = 3 0 20 1 2 25 mod 5 = 0 colisão com 20 3 4 18 25
  • 30. Endereçamento fechado A busca é feita do mesmo modo: calcula-se o valor da função hash para a chave, e a busca é feita na lista correspondente. Se o tamanho das listas variar muito, a busca pode se tornar ineficiente, pois a busca nas listas se torna seqüencial 0 20 4 15 11 1 2 3 0 88 32 60
  • 31. Endereçamento fechado A função HASH deve distribuir as chaves entre as posições de maneira uniforme 0 1 0 15 2 3 4 5 6 10 4 13 31 88 20
  • 32. Endereçamento fechado Chained-Hash-Search(T,k) procure um elemento com chave k na lista T[h(k)] e devolva seu ponteiro Chained-Hash-Insert(T,x) insira x na cabeça da lista T[h(key[x])] Chained-Hash-Delete(T,x) remova x da lista T[h(key[x])]
  • 34. Endereçamento aberto No endereçamento aberto, todos os elementos são armazenados na própria tabela hash. Para realizar uma inserção, examinamos/testamos sucessivamente a tabela hash ate que encontrarmos um slot vazio no qual a chave sera inserida. Em endereçamento aberto, a tabela hash pode encher, de forma que não seja mais possível inserir elementos.
  • 35. Endereçamento aberto - Inserção 0 1 9 Valores: 204, 44, 58, 10, 100, 25, 20
  • 36. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 9
  • 37. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9
  • 38. Endereçamento aberto - Inserção Valores: 204, 44, 58, 10, 100, 25, 20 0 1 204 44 9 Terminem de completar ....
  • 39. Endereçamento aberto Algoritmo de inserção ● Usa a função hash para calcular o endereço ● Caso esteja ocupado, procure um local vazio. ● Se der uma volta completa, significa que esta cheia Algoritmo de busca ● Usa a função hash para calcular o endereço ● Enquanto nao achar o valor procurado e nem um espaço vazio. ● Se der uma volta completa, significa que o valor não está lá.
  • 40. Endereçamento aberto Quais conclusões que são possíveis tirar ? Algoritmo de inserção ● Usa a função hash para calcular o endereço ● Caso esteja ocupado, procure um local vazio. ● Se der uma volta completa, significa que esta cheia Algoritmo de busca ● Usa a função hash para calcular o endereço ● Enquanto nao achar o valor procurado e nem um espaço vazio. ● Se der uma volta completa, significa que o valor não está lá.
  • 41. Endereçamento aberto A tabela tem que ser tratada de modo circular, quando chega no fim da tabela a varredura reinicia na posição 0. Quanto mais "cheia" a tabela estiver, pior será a eficiência.
  • 42. Btree Em grandes bancos de dados os índices tendem a crescer e são armazenados em memoria secundária. Acesso a disco não é constante.
  • 43. Btree Árvores de Busca Binária Apropriada para memória principal Ineficiente em memória secundária Acesso: cerca de log2n passos. Em memoria Em disco
  • 44. Btree As árvores B são árvores multicaminhos (ou multidirecionais) balanceadas projetadas para trabalhar com dispositivos de armazenamento secundário como discos magnéticos. Diferente das árvores binárias, cada nó em uma árvore B pode ter muitos filhos, isto é, o grau de um nó pode ser muito grande. Elas visam otimizar as operações de entrada e saída nos dispositivos. O tempo de acesso às informações em um disco é prejudicado principalmente pelo tempo de posicionamento do braço de leitura.
  • 45. Btree Poucas operações de disco, 1000 chaves. 0 disk ops 1000 keys 1000 … 1001 1000 1000 … … … 1001 1001 1001 1000 1000 1000 … … 1000 1 disk ops 1,001,000 keys 2 disk ops 1,002,001,000 keys
  • 46. Btree Árvores B têm vantagens substanciais em relação a outros tipos de implementações quanto ao tempo de acesso e pesquisa aos nós. O criador das árvores B, Rudolf Bayer, não definiu claramente de onde veio o B das árvores B. Ao que parece, o B vem de balanceamento onde todos as folhas da árvore estão em um mesmo nível. Também é possível que o B tenha vindo de seu sobrenome Bayer, ou ainda do nome da empresa onde trabalhava Boeing, no Boeing Scientific Research Labs.
  • 47. Btree Árvore B é uma estrutura de dados que utiliza o recurso de manter mais de uma chave em cada nó da estrutura. Ela proporciona uma organização de ponteiros de tal forma que as operações buscas, inserções e remoções são executadas rapidamente. As árvores B são largamente utilizadas como forma de armazenamento em memória secundária. Diversos sistemas comerciais de Banco de dados e sistemas de arquivo, por exemplo, as empregam.
  • 48. Btree: Estrutura Os elementos dentro de um nó estão ordenados. O ponteiro situado entre dois elementos a e b aponta para a sub-árvore que contém todos os elementos entre a e b. a <a b [a,b] c [b,c] >c
  • 49. Btree: Definições (1) 1. Seja T uma árvore-B com raiz (root[T]). Ela possuirá então as seguintes propriedades: 1. Todo o no X tem os seguintes campos: a. n[x], o numero de chaves atualmente guardadas no nodo x, b. As n[x] chaves, guardadas em ordem crescente, tal que key1[x] <= key2[x] <= … <= keyn[x] c. leaf [x], Um valor booleano, TRUE se x e uma folha e FALSE se x e um nodo interno MO637 – Complexidade de Algoritmos I Arvores B Baseado no livro do Cormem
  • 50. Btree: Definições (2) 2. Cada no interno x tambem contem n[x] + 1 apontadores c1[x], c2[x],...,cn[x]+1[x] para os filhos. As folhas tem seu apontador nulo 3. As chaves keyi[x] separam os intervalos de chaves guardadas em cada sub-arvore: se ki e uma chave guardada numa subarvore com raiz ci[x], entao: k1 ≤ key1[x] ≤ k2 ≤ key2[x] ≤...≤ keyn[x] ≤ kn+1 4.Todas as folhas da árvore estão no mesmo nível. Baseado no livro do Cormem
  • 51. Btree: Definições (3) 5. Existe um número máximo e mínimo de filhos em um nó. Este número pode ser descrito em termos de um inteiro fixo t maior ou igual a 2 chamado grau mínimo. ● Todo o nó diferente da raiz deve possuir pelo menos t-1 chaves. Todo o nó interno diferente da raiz deve possuir pelo menos t filhos. Se a árvore não é vazia, então a raiz possui pelo menos uma chave. ● Todo o nó pode conter no máximo 2t - 1 chaves. Logo um nó interno pode ter no máximo 2t filhos. Dizemos que um nó é cheio se ele contém 2t - 1 chaves.
  • 52. Btree De acordo com a definição a árvore B mais simples ocorre quando t=2. Neste caso todo o nó diferente da raiz possui 2, 3 ou 4 filhos. Esta árvore é também conhecida por árvore 2-3-4.
  • 53. Grau mínimo e Ordem Cormen não fala em Ordem, apenas em grau mínimo t. Diferentes definições para ordem: ● Bayer & McCreight 1972, número mínimo de chaves ● Knuth 1997, número maximo de filhos
  • 54. Btree: Codificação Considerando que os elementos dentro de um nó x da B-tree esteja organizado de forma linear, e que: n[x] = quantidade de chaves no nó x keyi[x] = valor da chave do nó x na posição i leaf[x] = retorna verdadeiro caso o nó seja folha Operações de acesso Disk-Read = operação de leitura do nó em disco Disk-Write = operação de leitura do nó em disco
  • 56. Btree: Busca A busca em uma árvore B é uma função parecida com a de busca em uma árvore de busca binária, exceto o fato de que se deve decidir entre vários caminhos. Como as chaves estão ordenadas, pode-se realizar uma busca binária nos elementos de cada nó. ● Se a chave não for encontrada no nó em questão, continuase a busca nos filhos deste nó, realizando-se novamente a busca binária. ● Caso o nó não esteja contido na árvore a busca terminará ao encontrar um ponteiro igual a NULL.
  • 57. Busca
  • 58. Busca Procedimento para pesquisa do número 13 30 40 50 10 20 348 9 11 13 17 25 28 33 36 42 45 48 52 55
  • 59. Busca Procedimento para pesquisa do número 55 30 10 20 3489 11 13 17 40 50 25 28 33 36 42 45 48 52 55
  • 60. Inserção Localizar o nó folha X onde o novo elemento deve ser inserido. ●Se o no X não estiver cheio, basta inserir. ●Se o nó X estiver cheio, realizar uma subdivisão de nós ●passar o elemento mediano de X para seu pai ●subdividir X em dois novos nós com t - 1 elementos ●inserir a nova chave Se o pai de X também estiver cheio, repete-se recursivamente a subdivisão acima para o pai de X No pior caso terá que aumentar a altura da árvore B para poder inserir o novo elemento
  • 61. Divisão do nodo - Split
  • 62. Divisão do nodo - Split
  • 63. Divisão do nodo - Split T=2
  • 64. Inserção È o caso onde a árvore cresce Insere na nova raiz
  • 68. Atividade Segundo o algoritmo do Cormen, insira os seguintes elementos: ●Para t=2 e t = 3, insira 4,5,1,12,28,15 ●Para t=2 e t = 3, insira 12, 45, 67, 8,9, 15, 17 19
  • 69. Atividade A partir de uma árvore B vazia (t=2): ●Insira os seguintes valores (20,30,50,80, 12, 15) ●Agora remova o 50, 80 A partir de uma árvore B vazia (t=3) ●Insira os valores [40,60,80,90,100,20,105,12] ●Remova os valores [90,12,40,100]
  • 70. Prática Baixem o seguinte código, e concluem a codificação. Usando com referencia Cormen.