255
MC-202 — Unidade 19 Tabela de Espalhamento Rafael C. S. Schouery [email protected] Universidade Estadual de Campinas 1º semestre/2018

MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery [email protected] UniversidadeEstadualdeCampinas

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

MC-202 — Unidade 19Tabela de Espalhamento

Rafael C. S. [email protected]

Universidade Estadual de Campinas

1º semestre/2018

Page 2: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Introdução

Queremos contar o número de ocorrências de cada palavra dabiblioteca

• no idioma, há cerca de milhares de palavras (≈ 435.000)• mas no total, há milhões de ocorrências!

2

Page 3: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Introdução

Queremos contar o número de ocorrências de cada palavra dabiblioteca

• no idioma, há cerca de milhares de palavras (≈ 435.000)

• mas no total, há milhões de ocorrências!

2

Page 4: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Introdução

Queremos contar o número de ocorrências de cada palavra dabiblioteca

• no idioma, há cerca de milhares de palavras (≈ 435.000)• mas no total, há milhões de ocorrências!

2

Page 5: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)

• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 6: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)

• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 7: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:

• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)

• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 8: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)

• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)

• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 9: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 10: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)

• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 11: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?

3

Page 12: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplodia: 6 ocorrênciasescola: 13 ocorrênciasgratuito: 1 ocorrênciailha: 8 ocorrênciasjeito: 5 ocorrênciaslata: 2 ocorrências

Queremos acessar uma palavra como se fosse um vetor:ocorrencias["ilha"] = 8

Primeiras opções:• Vetor - acesso/escrita/inserção em O(n)• Vetor ordenado - acesso/escrita em O(lg n)

– inserir uma nova palavra leva O(n)• ABB balanceada - acesso/escrita/inserção em O(lg n)

Conseguimos fazer em O(1)?3

Page 13: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Caso fácilSe tivéssemos apenas uma palavra começando com cadaletra era fácil

• bastaria ter um vetor de 24 posições

a 0

b 1c 2d 3e 4

f 5g 6

h 7

i 8...

......

dia

escola

gratuito

ilha

4

Page 14: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Caso fácilSe tivéssemos apenas uma palavra começando com cadaletra era fácil

• bastaria ter um vetor de 24 posições

a 0

b 1c 2d 3e 4

f 5g 6

h 7

i 8...

......

dia

escola

gratuito

ilha

4

Page 15: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

Ideia:

• uma lista ligada para cada letra• guardamos os ponteiros para as listas em um vetor

5

Page 16: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

Ideia:• uma lista ligada para cada letra

• guardamos os ponteiros para as listas em um vetor

5

Page 17: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

Ideia:• uma lista ligada para cada letra• guardamos os ponteiros para as listas em um vetor

5

Page 18: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

NULL

Inserindo “bala”:• descobrimos a posição pela primeira letra• atualizamos o vetor para apontar para o nó de “bala”

6

Page 19: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

NULL

Inserindo “bala”:

• descobrimos a posição pela primeira letra• atualizamos o vetor para apontar para o nó de “bala”

6

Page 20: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

NULL1

Inserindo “bala”:• descobrimos a posição pela primeira letra

• atualizamos o vetor para apontar para o nó de “bala”

6

Page 21: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

NULL1

Inserindo “bala”:• descobrimos a posição pela primeira letra• atualizamos o vetor para apontar para o nó de “bala”

6

Page 22: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

1 bala

Inserindo “bala”:• descobrimos a posição pela primeira letra• atualizamos o vetor para apontar para o nó de “bala”

6

Page 23: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bala

Inserindo “bela”:• descobrimos a posição pela primeira letra• temos uma colisão com “bala”• inserimos no começo da lista da letra b

7

Page 24: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bala

Inserindo “bela”:

• descobrimos a posição pela primeira letra• temos uma colisão com “bala”• inserimos no começo da lista da letra b

7

Page 25: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bala

Inserindo “bela”:• descobrimos a posição pela primeira letra

• temos uma colisão com “bala”• inserimos no começo da lista da letra b

7

Page 26: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bala

Inserindo “bela”:• descobrimos a posição pela primeira letra• temos uma colisão com “bala”

• inserimos no começo da lista da letra b

7

Page 27: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bela bala

Inserindo “bela”:• descobrimos a posição pela primeira letra• temos uma colisão com “bala”• inserimos no começo da lista da letra b

7

Page 28: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”,

“boca”, “broca”• a tabela ficou degenerada em lista

8

Page 29: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bela bala

Após a inserção de várias palavras começando com b:

• inserimos “bolo”,

“boca”, “broca”• a tabela ficou degenerada em lista

8

Page 30: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”,

“boca”, “broca”

• a tabela ficou degenerada em lista

8

Page 31: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”,

“boca”, “broca”

• a tabela ficou degenerada em lista

8

Page 32: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”, “boca”,

“broca”

• a tabela ficou degenerada em lista

8

Page 33: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

boca bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”, “boca”,

“broca”

• a tabela ficou degenerada em lista

8

Page 34: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

boca bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”, “boca”, “broca”

• a tabela ficou degenerada em lista

8

Page 35: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

broca boca bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”, “boca”, “broca”

• a tabela ficou degenerada em lista

8

Page 36: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Palavras que começam com a mesma letra

0

1

23

45

67

8...

......

NULL

NULL

dia

escolaNULL

gratuito

NULL

ilha

broca boca bolo bela bala

Após a inserção de várias palavras começando com b:• inserimos “bolo”, “boca”, “broca”• a tabela ficou degenerada em lista

8

Page 37: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca

boca

bolo

bela

bala

dia

escola

gratuito

ilha

NULL

NULL

NULL

NULL

NULL

NULL

Corrigindo:

• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 38: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca

boca

bolo

bela

bala

dia

escola

gratuito

ilha

NULL

NULL

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor

• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 39: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca

boca

bolo

bela

bala

dia

escola

gratuito

ilha

NULL

NULL

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)

• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 40: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca

bolo

bela

bala

dia

escola

gratuito

ilha

NULL

NULL

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 41: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca

bolo

bela

bala

dia

escola

gratuito

ilha

broca

NULL

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 42: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo

bela

bala

dia

escola

gratuito

ilha

broca

NULL

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 43: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo

bela

bala

dia

escola

gratuito

ilha

broca

boca

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 44: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela

bala

dia

escola

gratuito

ilha

broca

boca

NULL

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 45: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela

bala

dia

escola

gratuito

ilha

broca

boca

bolo

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 46: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala

dia

escola

gratuito

ilha

broca

boca

bolo

NULL

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 47: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala

dia

escola

gratuito

ilha

broca

boca

bolo

bela

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 48: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

boca

bolo

bela

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 49: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

bolo

bela

bala boca

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 50: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

bolo

bela

bala boca

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 51: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

bolo

bala boca

dia bela

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 52: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito

ilha

broca

bolo

bala boca

dia bela

NULL

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 53: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito

ilha

broca

bolo

bala boca

dia bela

escola

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 54: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

bolo

bala boca

dia bela

escola

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 55: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

bolo

dia bela

escola

gratuito bala boca

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 56: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

bolo

dia bela

escola

gratuito bala boca

NULL

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 57: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento com Encadeamento Separado

0

1

23

45

67

8

NULL

NULL

NULL

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

bolo

dia bela

escola

gratuito bala boca

ilha

Corrigindo:• vamos tentar espalhar melhor• usamos um hash da chave (palavra)• vamos associar a chave a um número inteiro (entre 0 e 8)

9

Page 58: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Tabela de Espalhamento

Uma função de hashing associa um elemento de um certoconjunto (strings, números, arquivos, etc.) a um número inteirode tamanho conhecido

Uma tabela de espalhamento é um tipo abstrato de dadospara busca em conjuntos dinâmicos cuja implementação temcertas propriedades:

• os dados são acessado por meio de um vetor de tamanhoconhecido

• a posição do vetor é calculada por uma função de hashing

10

Page 59: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Tabela de Espalhamento

Uma função de hashing associa um elemento de um certoconjunto (strings, números, arquivos, etc.) a um número inteirode tamanho conhecido

Uma tabela de espalhamento é um tipo abstrato de dadospara busca em conjuntos dinâmicos cuja implementação temcertas propriedades:

• os dados são acessado por meio de um vetor de tamanhoconhecido

• a posição do vetor é calculada por uma função de hashing

10

Page 60: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Tabela de Espalhamento

Uma função de hashing associa um elemento de um certoconjunto (strings, números, arquivos, etc.) a um número inteirode tamanho conhecido

Uma tabela de espalhamento é um tipo abstrato de dadospara busca em conjuntos dinâmicos cuja implementação temcertas propriedades:

• os dados são acessado por meio de um vetor de tamanhoconhecido

• a posição do vetor é calculada por uma função de hashing

10

Page 61: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Tabela de Espalhamento

Uma função de hashing associa um elemento de um certoconjunto (strings, números, arquivos, etc.) a um número inteirode tamanho conhecido

Uma tabela de espalhamento é um tipo abstrato de dadospara busca em conjuntos dinâmicos cuja implementação temcertas propriedades:

• os dados são acessado por meio de um vetor de tamanhoconhecido

• a posição do vetor é calculada por uma função de hashing

10

Page 62: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:

• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)

– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)

– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 63: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)

– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)

– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 64: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)

– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)

– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 65: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)

– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 66: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)– se temos n itens

– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 67: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)– se temos n itens– e uma tabela de tamanho M

– tempo de acesso é o tempo de calcular a função dehashing + O(n/M)

– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 68: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)

– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 69: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 70: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Características das tabelas de Espalhamento

Propriedades:• estimativa do tamanho do conjunto de dados deve serconhecida

• tempo das operações depende da função de hashingescolhida:

– chaves bem espalhadas: tempo “quase” O(1)– se temos n itens– e uma tabela de tamanho M– tempo de acesso é o tempo de calcular a função de

hashing + O(n/M)– chaves agrupadas: pior caso de tempo O(n)

– Vira uma lista ligada com todos os elementos

11

Page 71: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:

• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 72: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 73: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 74: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):

1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 75: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão

2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 76: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 77: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 78: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões

• tais funções podem ser difíceis de encontrar

12

Page 79: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Obtendo funções de hashing

Uma boa função de hashing espalha bem:• A probabilidade de uma chave ter um hash específico é(aproximadamente) 1/M

• Ou seja, esperamos que cada lista tenha n/M elementos

Métodos genéricos (que funcionam bem na prática):1. Método da divisão2. Método da multiplicação

Hashing perfeito: Se conhecermos todos as chaves a priori, épossível encontrar uma função de hashing injetora

• isto é, não temos colisões• tais funções podem ser difíceis de encontrar

12

Page 80: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 81: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?

• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 82: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 83: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 84: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905

• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 85: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente

• Veremos como contornar isso para strings...

13

Page 86: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interpretando chavesPressupomos que as chaves são números inteiros

E se não forem?• Reinterpretamos a chave como uma sequência de bits

b a l a

01100010 01100001 01101100 01100001

Assim, “bala” se torna o número 1.650.551.905• Esse número pode explodir rapidamente• Veremos como contornar isso para strings...

13

Page 87: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 88: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 89: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 90: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :

• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 91: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 92: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 93: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da divisão• obtemos o resto da divisão pelo tamanho M do hashing

h(x) = xmodM

Exemplo:

h(“bala”) = 1.650.551.905mod 1783 = 277

Escolhendo M :• escolher M como uma potência de 2 não é uma boa ideia

– considera apenas os bits menos significativos

• normalmente escolhemos M como um número primolonge de uma potência de 2

14

Page 94: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 95: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2

• posição relativa no vetor não depende de M (pode serM = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 96: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 97: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 98: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 99: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”)

= ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 100: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋

= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 101: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋

= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 102: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋

= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 103: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋

= 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 104: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth

15

Page 105: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Método da multiplicação• multiplicamos por um certo valor real A e obtemos a partefracionária

• escolhemos A conveniente, por exemplo A = (√

5 − 1)/2• posição relativa no vetor não depende de M (pode ser

M = 1024)

h(x) = ⌊M (A · xmod 1)⌋

Exemplo:

h(“bala”) = ⌊1024 · [((√

5 − 1)/2 · 1.650.551.905)mod 1]⌋= ⌊1024 · [1020097177,4858876mod 1]⌋= ⌊1024 · 0,4858876⌋= ⌊497,5489024⌋ = 497

O uso da razão áurea como valor de A é sugestão de Knuth15

Page 106: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interface do TAD1 #define MAX 178323 typedef struct {4 char chave[10];5 int dado;6 No * prox;7 } No;

89 typedef No * p_no;

1011 typedef struct {12 p_no vetor[MAX];13 } Hash;1415 typedef Hash * p_hash;1617 p_hash criar_hash();1819 void destruir_hash(p_hash t);2021 void inserir(p_hash t, char *chave, int dado);2223 void remover(p_hash t, char *chave);2425 p_no buscar(p_hash t, char *chave);

16

Page 107: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interface do TAD1 #define MAX 178323 typedef struct {4 char chave[10];5 int dado;6 No * prox;7 } No;89 typedef No * p_no;

1011 typedef struct {12 p_no vetor[MAX];13 } Hash;

1415 typedef Hash * p_hash;1617 p_hash criar_hash();1819 void destruir_hash(p_hash t);2021 void inserir(p_hash t, char *chave, int dado);2223 void remover(p_hash t, char *chave);2425 p_no buscar(p_hash t, char *chave);

16

Page 108: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Interface do TAD1 #define MAX 178323 typedef struct {4 char chave[10];5 int dado;6 No * prox;7 } No;89 typedef No * p_no;

1011 typedef struct {12 p_no vetor[MAX];13 } Hash;1415 typedef Hash * p_hash;1617 p_hash criar_hash();1819 void destruir_hash(p_hash t);2021 void inserir(p_hash t, char *chave, int dado);2223 void remover(p_hash t, char *chave);2425 p_no buscar(p_hash t, char *chave);

16

Page 109: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {

2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 110: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;

3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 111: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;

5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 112: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }

78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 113: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {

9 int n = hash(chave);10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 114: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }

1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 115: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {

14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 116: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Exemplo de implementação

1 int hash(char *chave) {2 int i, n = 0;3 for (i = 0; i < strlen(chave); i++)4 n = (256 * n + chave[i]) % MAX;5 return n;6 }78 void inserir(p_hash t, char *chave, int dado) {9 int n = hash(chave);

10 t->vetor[n] = inserir_lista(t->vetor[n], chave, dado);11 }1213 void remover(p_hash t, char *chave) {14 int n = hash(chave);15 t->vetor[n] = remover_lista(t->vetor[n], chave);16 }

17

Page 117: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 118: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 119: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?

• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 120: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 121: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:

• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 122: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 123: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso

• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 124: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 125: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem

– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 126: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem– a probabilidade de colisão é no máximo 1/M

– é um hashing universal

18

Page 127: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Quebrando um programa que usa hashingSabendo a função de hashing, podemos prejudicar oprograma:

• insira muitos elementos com o mesmo hash

Como nos proteger de um adversário malicioso?• Podemos escolher a função de hashing aleatoriamente

Uma boa função de hashing aleatória:• fixe p um primo maior do que M

• escolha a ∈ {1, . . . , p} e b ∈ {0, . . . , p} uniform. ao acaso• defina ha,b(k) = ((ak + b)mod p)modM

• sabemos que essa função espalha bem– a probabilidade de colisão é no máximo 1/M– é um hashing universal

18

Page 128: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 129: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:

• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 130: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor

• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 131: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 132: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:

• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 133: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 134: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior

– e mudar a função de hashing

• remoção é mais complicada

19

Page 135: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior– e mudar a função de hashing

• remoção é mais complicada

19

Page 136: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto

Existe uma alternativa para a implementação de tabela deespalhamento

Endereçamento aberto:• os dados são guardados no próprio vetor• colisões são colocadas em posições livres da tabela

Características:• evita percorrer usando ponteiros e alocação e deslocaçãode memória (malloc e free)

• se a tabela encher, deve recriar uma tabela maior– e mudar a função de hashing

• remoção é mais complicada

19

Page 137: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca

boca

bolo

bela

bala

dia

escola

gratuito

ilha

Inserindo:

• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 138: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca

bolo

bela

bala

dia

escola

gratuito

ilha

Inserindo:• procuramos posição

• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 139: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca

bolo

bela

bala

dia

escola

gratuito

ilha

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 140: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca

bolo

bela

bala

dia

escola

gratuito

ilha

broca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 141: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo

bela

bala

dia

escola

gratuito

ilha

broca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 142: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo

bela

bala

dia

escola

gratuito

ilha

broca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 143: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo

bela

bala

dia

escola

gratuito

ilha

broca

boca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 144: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela

bala

dia

escola

gratuito

ilha

broca

boca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 145: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela

bala

dia

escola

gratuito

ilha

broca

boca

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 146: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela

bala

dia

escola

gratuito

ilha

broca

boca

bolo

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 147: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala

dia

escola

gratuito

ilha

broca

boca

bolo

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 148: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala

dia

escola

gratuito

ilha

broca

boca

bolo

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 149: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala

dia

escola

gratuito

ilha

broca

boca

bolo

bela

Inserindo:• procuramos posição• se houver espaço, guardamos

• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 150: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

boca

bolo

bela

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 151: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

boca

bolo

bela

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 152: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 153: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 154: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 155: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 156: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 157: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 158: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 159: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola

gratuito

ilha

broca

boca

bolo

belabala

dia

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 160: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito

ilha

broca

boca

bolo

belabala

dia

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 161: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito

ilha

broca

boca

bolo

belabala

dia

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 162: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 163: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 164: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 165: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 166: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 167: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 168: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 169: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 170: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 171: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha

broca

boca

bolo

belabala

dia

escola

gratuito

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 172: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

boca

bolo

belabala

dia

escola

gratuito

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 173: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

boca

bolo

belabala

dia

escola

gratuito

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 174: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

boca

bolo

belabala

dia

escola

gratuito

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 175: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

boca

bolo

belabala

dia

escola

gratuito

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 176: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Endereçamento aberto com sondagem linear0

1

23

45

67

8

broca h("broca") = 3

boca h("boca") = 0

bolo h("bolo") = 5

bela h("bela") = 2

bala h("bala") = 0

dia h("dia") = 2

escola h("escola") = 7

gratuito h("gratuito") = 0

ilha h("ilha") = 6

broca

boca

bolo

belabala

dia

escola

gratuito

ilha

Inserindo:• procuramos posição• se houver espaço, guardamos• se não houver espaço, procuramos a próxima posiçãolivre (módulo M )

20

Page 177: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?

• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 178: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 179: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing

– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 180: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave

– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 181: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente

– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 182: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 183: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?

• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 184: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL

• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 185: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 186: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado

– Ou ter um campo indicando que é dummy

21

Page 187: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Busca em endereçamento aberto

Como fazer uma busca com endereçamento aberto?• Basta simular a inserção:

– Calcule a função de hashing– Percorra a tabela em sequência procurando pela chave– Se encontrar a chave, devolva o item correspondente– Se encontrar um espaço vazio, devolva NULL

O que é um espaço vazio em um vetor?• Se for um vetor de ponteiros, pode ser NULL• Se não for um vetor de ponteiros, precisa ser umelemento dummy

– Ou um valor que nunca será usado– Ou ter um campo indicando que é dummy

21

Page 188: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?

• Não podemos apenas remover os elementos da tabela

– Por que?

– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado

• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 189: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?

– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado

• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 190: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?

– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado

• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 191: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado

• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 192: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 193: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 194: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado

• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 195: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 196: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 197: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Remoção em endereçamento aberto

Como fazer a remoção com endereçamento aberto?• Não podemos apenas remover os elementos da tabela

– Por que?– Quebraria a busca...

• Opção 1: fazemos o rehash de todos os elementos queestão a seguir no mesmo bloco

– reinserimos os mesmos no hash para ir para a posiçãocorreta

– é custoso e tem que ser implementado com cuidado• Opção 2: trocamos por um item dummy indicando que oitem foi removido

– mas não pode ser o mesmo que indica espaço vazio

• Opção 3: marcamos o item como removido usando umcampo adicional

22

Page 198: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 199: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:

• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 200: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 201: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 202: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:

• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 203: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 204: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência

– Veja se ao encontrar o item, ele não foi removido• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 205: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 206: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia

– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 207: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 208: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Inserção e Busca RevisitadasSe fizermos a remoção marcando o item como removido,precisamos mudar a inserção e a busca

Inserção:• Calculamos a função hashing e temos um resultado h

• Inserimos na primeira posição vazia ou com itemremovido a partir de h

Busca:• Calculamos a função hashing e temos um resultado h

• Procuramos o item em sequência– Veja se ao encontrar o item, ele não foi removido

• Pare ao encontrar uma posição vazia– Passe por cima de itens removidos

• Cuidado para não ciclar...

23

Page 209: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 210: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1

• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 211: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 212: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 213: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:

• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 214: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero

• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 215: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 216: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 217: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:

• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 218: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 219: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Hashing duploÉ como a sondagem linear:

• Quando detectamos conflito, ao invés de dar um pulo de 1• damos um pulo h(k, i) calculado a partir de uma segundafunção de hashing

Isto é,h(k, i) = (hash1(k) + i · hash2(k)) mod M

Cuidados:• hash2(k) nunca pode ser zero• hash2(k) precisa ser co-primo com M

– garante que as sequências são longas

Exemplos:• Escolha M como uma potência de 2 e faça que hash2(k)seja sempre ímpar

• Escolha M como um número primo e faça quehash2(k) < M

24

Page 220: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Sondagem linear e Hashing duplo1Sondagem linear - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.5 2.0 3.0 5.5sem sucesso 2.5 5.0 8.5 55.5

Hashing duplo - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.4 1.6 1.8 2.6sem sucesso 1.5 2.0 3.0 5.5

De qualquer forma, é muito importante não deixar a tabelaencher muito:

• Você pode aumentar o tamanho da tabela dinamicamente• Porém, precisa fazer um rehash de cada elemento para anova tabela

1Baseado em Sedgewick, R. Algorithms in C, third edition, Addison-Wesley. 1998.25

Page 221: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Sondagem linear e Hashing duplo1Sondagem linear - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.5 2.0 3.0 5.5sem sucesso 2.5 5.0 8.5 55.5

Hashing duplo - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.4 1.6 1.8 2.6sem sucesso 1.5 2.0 3.0 5.5

De qualquer forma, é muito importante não deixar a tabelaencher muito:

• Você pode aumentar o tamanho da tabela dinamicamente• Porém, precisa fazer um rehash de cada elemento para anova tabela

1Baseado em Sedgewick, R. Algorithms in C, third edition, Addison-Wesley. 1998.25

Page 222: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Sondagem linear e Hashing duplo1Sondagem linear - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.5 2.0 3.0 5.5sem sucesso 2.5 5.0 8.5 55.5

Hashing duplo - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.4 1.6 1.8 2.6sem sucesso 1.5 2.0 3.0 5.5

De qualquer forma, é muito importante não deixar a tabelaencher muito:

• Você pode aumentar o tamanho da tabela dinamicamente• Porém, precisa fazer um rehash de cada elemento para anova tabela

1Baseado em Sedgewick, R. Algorithms in C, third edition, Addison-Wesley. 1998.25

Page 223: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Sondagem linear e Hashing duplo1Sondagem linear - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.5 2.0 3.0 5.5sem sucesso 2.5 5.0 8.5 55.5

Hashing duplo - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.4 1.6 1.8 2.6sem sucesso 1.5 2.0 3.0 5.5

De qualquer forma, é muito importante não deixar a tabelaencher muito:

• Você pode aumentar o tamanho da tabela dinamicamente

• Porém, precisa fazer um rehash de cada elemento para anova tabela

1Baseado em Sedgewick, R. Algorithms in C, third edition, Addison-Wesley. 1998.25

Page 224: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Sondagem linear e Hashing duplo1Sondagem linear - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.5 2.0 3.0 5.5sem sucesso 2.5 5.0 8.5 55.5

Hashing duplo - tempo de busca médio

n/M 1/2 2/3 3/4 9/10com sucesso 1.4 1.6 1.8 2.6sem sucesso 1.5 2.0 3.0 5.5

De qualquer forma, é muito importante não deixar a tabelaencher muito:

• Você pode aumentar o tamanho da tabela dinamicamente• Porém, precisa fazer um rehash de cada elemento para anova tabela

1Baseado em Sedgewick, R. Algorithms in C, third edition, Addison-Wesley. 1998.25

Page 225: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório

– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 226: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:

• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório

– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 227: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório

– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 228: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório

– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 229: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório– cada entrada do diretório aponta para uma página

– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 230: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits

– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 231: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas• se preciso, aumentamos d na hora de inserir

26

Page 232: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas

• se preciso, aumentamos d na hora de inserir

26

Page 233: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Técnicas de espalhamento para arquivosHashing também pode ser usado para o acesso ou escrita dearquivos em disco

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

Espalhamento Extensível:• calcule função de hashing para transformar chave emuma sequências de bits de tamanho fixo

• indexamos pelos primeiros d bits em um diretório– cada entrada do diretório aponta para uma página– página tem chaves que coincidem nos primeiros k ≤ d bits– várias entradas podem apontar para a mesma página

– assim não precisamos ter 2d páginas• se preciso, aumentamos d na hora de inserir

26

Page 234: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento Extensível

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

000

001

010

011

100

101

110

111

0000001000101101

0101100101100010

10000001011111

1100101011010111

1110010111110010

Inserindo 11110010• Precisa expandir o diretório pois não há espaço na página

Para n registros, o Espalhamento Extensível usa 1.44n/M

páginas e o diretório tem 3.92nM+1

M /M entradas em média

27

Page 235: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento Extensível

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

000

001

010

011

100

101

110

111

0000001000101101

0101100101100010

10000001011111

1100101011010111

1110010111110010

Inserindo 11110010

• Precisa expandir o diretório pois não há espaço na página

Para n registros, o Espalhamento Extensível usa 1.44n/M

páginas e o diretório tem 3.92nM+1

M /M entradas em média

27

Page 236: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento Extensível

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

000

001

010

011

100

101

110

111

0000001000101101

0101100101100010

10000001011111

1100101011010111

1110010111110010

Inserindo 11110010• Precisa expandir o diretório pois não há espaço na página

Para n registros, o Espalhamento Extensível usa 1.44n/M

páginas e o diretório tem 3.92nM+1

M /M entradas em média

27

Page 237: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento Extensível

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

000

001

010

011

100

101

110

111

0000001000101101

0101100101100010

10000001011111

1100101011010111

1110010111110010

Inserindo 11110010• Precisa expandir o diretório pois não há espaço na página

Para n registros, o Espalhamento Extensível usa 1.44n/M

páginas e o diretório tem 3.92nM+1

M /M entradas em média

27

Page 238: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Espalhamento Extensível

00

01

10

11

0000001000101101

0101100101100010

10000001011111

110010101101011111100101

000

001

010

011

100

101

110

111

0000001000101101

0101100101100010

10000001011111

1100101011010111

1110010111110010

Inserindo 11110010• Precisa expandir o diretório pois não há espaço na página

Para n registros, o Espalhamento Extensível usa 1.44n/M

páginas e o diretório tem 3.92nM+1

M /M entradas em média27

Page 239: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 240: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 241: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 242: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 243: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:

• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 244: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa

• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 245: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 246: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 247: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar

– Usa memória a mais para os ponteiros

28

Page 248: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

ConclusãoHashing é uma boa estrutura de dados para

• inserir, remover e buscar dados pela sua chaverapidamente

• com uma boa função de hashing, essas operações levamtempo O(1)

• mas não é boa se quisermos fazer operação relacionadasa ordem das chaves

Escolhendo a implementação:• Sondagem linear é o mais rápido se a tabela for esparsa• Hashing duplo usa melhor a memória

– mas gasta mais tempo para computar a segunda funçãode hash

• Encadeamento separado é mais fácil de implementar– Usa memória a mais para os ponteiros

28

Page 249: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 250: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 251: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores

– sequências de verificação para arquivos (MD5 e SHA)• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 252: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 253: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 254: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque

– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29

Page 255: MC-202 — Unidade 19 Tabela de Espalhamentorafael/cursos/1s2018/mc... · MC-202—Unidade19 TabeladeEspalhamento RafaelC.S.Schouery rafael@ic.unicamp.br UniversidadeEstadualdeCampinas

Conclusão

Além disso, funções de hashing têm várias outras aplicações,ex:

• Para evitar erros de transmissão, podemos, além deinformar uma chave, transmitir o resultado da função dehashing. Exemplos:

– dígitos verificadores– sequências de verificação para arquivos (MD5 e SHA)

• Guardamos o hash de uma senha no banco de dados aoinvés da senha em si

– evitamos vazamento de informação em caso de ataque– mas temos que garantir que a probabilidade de duassenhas terem o mesmo hash seja ínfima...

29