• Nenhum resultado encontrado

h( Ò ) = (16 + 3) mod 13 = 6 h(ô ÙÐ µ

N/A
N/A
Protected

Academic year: 2021

Share "h( Ò ) = (16 + 3) mod 13 = 6 h(ô ÙÐ µ"

Copied!
43
0
0

Texto

(1)

Transformação de have

Cara terísti as dos métodos arbores entes:  ordem sobre as haves e

 o lugar de um item depende da posição da have em relação às haves dos outros itens.

Cara terísti as dos métodos de transformação de have:

 o lugar de um item é al ulado uni amente a partir de sua have.

 Esse ál ulo é feito por uma função hamada de transformação de have, que transforma diretamente a have em um endereço em uma zona de memória ontígua ou no índi e de um vetor.

Esses métodos têm a parti ularidade de que as operações de pesquisa, inserção e supressão são, em número de omparações, em média onstantes, ou seja, não dependem do n

o

(2)

Prin ípios

Exemplo: Seja

C

o onjunto de palavras a seguir:

C = {sérgio, os ar, lú io, ana, anna, joão, júlia, bos o, paula, mar elo, elisa, soa}

Consideramos aqui, omo antes, que o item é sua própria have.

Um método de transformação de have onsiste em asso iar a ada elemento

e

de

C

um número

h(e)

, entre 0 e 12, omo se segue:

1. Atribuir às letras a, b, ,

. . .

, z os valores 1, 2, 3,

. . .

, 26.

2. Adi ionar os valores das letras de

e

.

3. Adi ionar ao número obtido o número de letras de

e

.

4. Cal ular o módulo 13 desse número, para obter o valor pro urado

h(e)

.

(3)

Utilizando esse pro edimento de ál ulo, obtemos:

h(

sérgio

) = (73 + 6) mod 13 = 1 h(

júlia) = 6

h(

os ar

) = (56 + 5) mod 13 = 9 h(

elisa) = 12

h(

lú io

) = (60 + 5) mod 13 = 0 h(

soa) = 10

h(

anna

) = 30 + 4) mod 13 = 8

h(

bos o) = 7

h(

ana

) = (16 + 3) mod 13 = 6

h(

paula) = 5

h(

mar elo) = 9

h(

joão) = 6

Utilizam-se esses valores para indexar um vetor que ontenha os nomes:

0 lú io 1 sérgio 2 3 4 5 paula 6 ana 7 bos o 8 anna 9 os ar 10 soa 11 12 elisa

Para determinar se um item qualquer

x

perten e a

C

, basta al ular

v = h(x)

.

(4)

Se

h(x) = 2

ou

h(x) = 11

, então

x

não perten e a

C

.

É pre iso re onhe er se um lugar está vazio:  ou ini iando o vetor om um valor espe ial,

que não pode ser um item,

 ou asso iando a ada posição do vetor um ampo indi ando se o lugar está vazio ou não.

Senão, ompara-se

x

om o item

e

de

C

, tal que

h(e) = v

:

 Se

x = e

, então

x ∈ C

.  Se

x 6= e

, então

x 6∈ C

.

Colisão Primária

Colisão primária a onte e quando uma posição do vetor já está o upada por um item

e 6= x

e que se quer inserir

x

em

C

.

Não é possível evitar olisões.

Neste aso, a função de transformação de have não dá a esso a um úni o item, mas a um

pequeno sub onjunto de itens, no qual é pre iso fazer uma pesquisa.

(5)

Dizemos que fez-se um pi adinho (hash, ha hâge) do onjunto

C

em sub onjuntos.

Prin ípio geral

Utilizamos os métodos de pi adinhos nos seguintes asos:

 É pre iso geren iar uma oleção

C

, ujas haves perten em a um universo

U

muito grande.

 O tamanho provável de

C

é onhe ido e relativamente pequeno em relação ao n

o de itens de

U

.

Exemplo:

C

é um onjunto de 1000 palavras de 10 letras e

U

é o onjunto de todas as palavras possíveis de 10 letras.

O n o de elementos de

U

é, então,

26

10

≃ 10

13

.

Como o tamanho de

U

proíbe, na práti a, representar as oleções de elementos de

U

reservando um lugar em memória para ada have possível, utiliza-se uma função de

transformação de have

h

que asso ia a ada have um inteiro entre 1 e

m

(6)

onde

m

é um inteiro es olhido em função do tamanho previsto da oleção

C

.

Para toda have

x, h(x)

é hamado de valor de transformação primária e dá o índi e da

posição de

x

em um vetor

V

de

m

itens.

Esse índi e serve para veri ar se

x

perten e a

V

, a inserí-lo, ou suprimí-lo.

A es olha da função de transformação é

fundamental, pois é pre iso apli ar

U

da maneira mais uniforme possível a

[1, m]

para tender à

repartição ideal:

| h

−1

(i)

|=

| U |

m

Isso, em termos de probabilidade, é

∀ x ∈ U

e

∀ i ∈ [1, m],

Prob

(h(x) = i) =

1

m

Dizemos, então, que

h

é uniforme.

O ál ulo da função de transformação de have deve ser rápida para não prejudi ar o desempenho do método.

Por isso, a onstrução da função de transformação de have (f.t. .) é deli ada.

(7)

Mas mesmo om um boa f.t. . é impossível, em geral, evitar olisões primárias, omo mostra o seguinte argumento.

Dado um onjunto

C

de

n

elementos distintos e uma função

h

om valores em

[1, m]

, na hipótese de que

h

é uniforme, a probabilidade para que

h

seja injetora é

P =

1

m

n

.m.(m − 1) . . . (m − n + 1)

.

O valor de

P

é pequeno quando

m

não é muito grande em relação a

n

.

Exemplo: Se

m = 365

e

n = 23

, então

P

é inferior a 1/2.

Uma interpretação usual para o exemplo a ima é: se reúnem-se mais de 23 pessoas, há mais de uma han e em 2 que 2 dentre elas façam aniversário no mesmo dia!

No nosso aso, isto quer dizer que, para manter, om probabilidade superior a 1/2, um onjunto de 23 elementos sem olisão, é pre iso um vetor de dimensão superior a 365.

Como é pre iso geren iar olisões, apresentaremos dois métodos de transformação de have que

diferem pela maneira omo são resolvidas as olisões:

(8)

1. Os métodos de resolução de olisões por en adeamento: os itens uja have tem o mesmo valor pela função

h

são en adeados entre eles, no interior ou exterior ao vetor. São os métodos de transformação

indireta.

2. Os métodos de resolução de olisões por ál ulo: quando há uma olisão, al ula-se uma nova posição no vetor a partir da have do item onsiderado (para pesquisar, inserir ou suprimir). São os métodos de

transformação direta.

Prin ípio de pesquisa om transformação de have:

 Determinar o 1 o

lugar possível para o item pro urado, pela f.t. .

 Se o lugar estiver vazio, parar a pesquisa.  Senão, omparar o onteúdo do lugar om o

item pro urado.

 Se o item foi en ontrado, parar a pesquisa.  Senão, passar a um outro lugar possível, por

en adeamento ou por ál ulo.  No 2

o

aso, re omeçar o tratamento para o novo lugar.

(9)
(10)

Prin ípio da inserção om transformação de have:

 Determinar o 1 o

lugar possível para o elemento pro urado.

 Se o lugar estiver vazio, olo a-se aí o item e pára.

 Se o item foi en ontrado, pára.

 Senão, passa-se a um outro lugar possível por en adeamento ou por ál ulo.

 No 2 o

aso, re omeça-se o pro edimento.

Com todos esses métodos, a pesquisa ne essita, em média, entre 1 a 5 a essos, independentemente do tamanho do vetor.

O resultado é devido ao fato de que há muito

pou as olisões primárias e que a resolução dessas olisão não leva a muitas outras.

(11)

Funções de pi adinho

Uma função de transformação de have (f.t. .), omo nome indi a, transforma a have de um item a ser guardado em um vetor em um índi e desse vetor.

A função distribue as haves de maneira aleatória, mas ela deve ser determinísti a, evidentemente.

Além disso, espera-se qua a função seja uniforme, para evitar olisões.

Finalmente, a função deve ser fa ilmente

al ulada, para que, que o método onserve o desempenho em tempo.

Supomos que as haves são palavras,

representadas em memória por uma seqüên ia de bits, que podem ser interpretadas omo um

inteiro.

Isto é importante, pois permite de passar aos inteiros sem ál ulos.

O problema seguinte é o de al ular, a partir desses inteiros, um inteiro no intervalo

[1, m]

.

(12)

Para simpli ar os ál ulos, onsideraremos uma representação ordinal dos ara teres odi ada em 5 bits, no que se segue.

Uma palavra é representada pela on atenação das representações de seus ara teres.

Temos as seguintes orrespondên ias:

A = 00001, B = 00010, C = 00011,

. . .

. ASA = 000011001100001.

Construiremos uma função

h

de seqüên ia de bits em um intervalo de

m

inteiros

h : {0, 1}

→ [0, m − 1]

Extração

Extraem-se ertos bits, ou zonas de bits, da representação binária.

Se extraem-se

p

bits, tem-se o intervalo

[0, 2

p

− 1]

on atenando-os e onsiderando-se o inteiro representado.

Exemplo: extração da subpalavra formada pelos bits numerados 1, 2, 7 e 8, ontando da direita e

(13)

ompletando à esquerda om zeros: OU = 0111110101 = 1101 =

(13)

10

AS = 0000101011 = 0011 =

(3)

10

PA = 0100000001 = 0001 =

(1)

10

No aso em que

m = 2

p

, uma subpalavra formada de

p

bits dá diretamente um índi e no vetor.

A função só é bem adaptada para ertos asos parti ulares, em que se onhe e os dados de antemão, ou quando se sabe que ertos bits não são signi ativos.

Em geral, ela não dá bons resultados, pois o valor da transformação não depdende da have toda.

Uma boa função de transformação deve levar em onta todos os bits da representação.

Compressão

Utilizam-se, aqui, todos os bits da have para obter um índi e do vetor, ortando as seqüên ias de bits em pedaços de tamanhos iguais e

(14)

binária, para não ter que lidar om o vai-um da adição.

A vantagem do ou ex lusivo é que a operação não retorna sitemati amente um número menor ( aso do e) ou maior ( aso do ou), evitando, assim, a úmulos no iní io ou no m do vetor.

Exemplo: h(LE) = 01100

00101 = 01001 =

(9)

10

h(OU) = 01111

10101 = 11010 =

(26)

10

h(AS) = 00001

10011 = 10010 =

(18)

10

h(SEM) = 10011

00101

01101 = 11011 = =

(27)

10

O problema desse método é de trasformar do mesmo modo todas as permutações de uma mesma palavra.

Com a função a ima, h(SEM) = h(MES)!

Isto vem do fato de que, no ál ulo de

h

, ortaram-se os strings no limite das

(15)

Uma boa f.t. . deve quebrar as subseqüên ias de bits.

O problema pode ser resolvido om deslo amentos.

Exemplo: Pode-se deslo ar ir ularmente para a direita a 1 a subseqüên ia de 1 bit, a 2 a subseqüên ia de 2 bits, a 3 a subseqüên ia de 3 bits, et : h(SEM) = 11001

01001

10101 = 00101 =

(5)

10

h(MES) = 10110

01001

01110 = 10001 =

(17)

10

Este tipo de té ni a serve para reduzir o tamanho das haves ao tamanho de uma palavra de

memória.

Pode-se, em seguida, apli ar outros métodos de ál ulo omo os seguintes.

Divisão

Cal ula-se simplesmente o resto da divisão por

m

(

m

é o tamanho do vetor de transformação de haves) do valor da have:

(16)

Essa função é fá il e rápida de al ular, mas ela depende do valor de

m

.

Se

m

é par, todas as haves pares vão para os índi es pares da tabela e todas as haves ímpares para os índi es ímpares, o que não dá uma

distribuição uniforme e deve ser evitado.

O mesmo a onte e se

m

tiver outros divisores pequenos.

Logo,

m

deve ser um n o

primo, mas, mesmo assim, pode haver efeito de a umulações.

Exemplo:

m = 37

OU = 0111110101 =

(501)

10

⇒ h(OU) = 501 mod 37 = 20

Multipli ação

Da do um real

θ

tal que

0 < θ < 1

onstrói-se uma f.t. . da seguinte maneira

h(e) = ⌊((e × θ) mod 1) × m⌋

Exemplo:

θ = 0, 6125423371

e

m = 30

(17)

h(OU ) = ⌊((501 × θ) mod 1) × m⌋ =

=

⌊(306, 8837108 mod 1) × 30⌋ =

=

⌊0, 8837108 × 30⌋ = 26

Com este método, o tamanho do vetor não tem importân ia.

Por outro lado, o valor de

θ

deve ser es olhido om uidado:

θ

não deve estar muito próximo nem de 0 nem de 1, para evitar a úmulos nas extremidades do vetor.

Estudos teóri os mostram que os valores de

θ

que repartem as haves mais uniformemente são:

θ =

5

− 1

2

≃ 0, 6180339887

e

θ = 1 −

5

− 1

2

≃ 0, 3819660113

(18)

Resolução de olisões por en adeamento: métodos indiretos

Veremos dois métodos:

1. O en adeamento é feito em uma zona de transbordamento externa à tabela de pi adinho: método de pi adinho om en ademaento separado

2. ou internamente à tabela: método de pi adinho oales ente.

Pi adinho om en adeamento separado

Neste método, a tabela só ontém as abeças das

m

listas en adeadas exteriormente a ela.

As listas representam onjuntos de elementos om o mesmo valor da função de pi adinho.

A inserção é pre edida por um teste para

determinar se o item perten e ou não à lista, para mantê-las o mais urtas possíveis.

Convenção: a inserção é sempre feita no m da lista, pois é aí que se termina o teste para

(19)

Notação:

L

i

é a lista uja abeça é

T [i]

.

Para pro urar, suprimir e inserir o item

x

, trabalha-se om a lista

L

h(x)

.

Exemplo: Sejam os itens abaixo, om seus respe tivos valores de pi adinho, inseridos su essivamente na tabela a seguir:

e

1

e

2

e

3

e

4

e

5

e

6

e

7

e

8

e

9

e

10

e

11

e

12

e

13

3 1 4 1 4 1 5 9 2

6

5

3

5

e2

e4

e6

e9

3

e1

4

e5

5

e7

6

8

e8

7

2

e3

9

1

e12

e11

e13

e10

T

Os itens em olisão poderiam ser representados de outras formas (listas en adeadas ordenadas,

árvores binárias de pesquisa, árvores equilibradas).

(20)

No entanto, essas representações têm pou o interesse, porque se a função de pi adinho for bem es olhida, há muito pou a probabilidade de ter mais de 5 itens em olisão.

Análise de omplexidade do pi adinho om en adeamento separado

O usto de uma pesquisa negativa é o mesmo da inserção d eum novo item.

Como a função

h

é uniforme, há a mesma probabilidade de

1/m

de fazer a pesquisa em ada uma das

m

listas.

Seja

λ

i

o tamanho da lista

L

i

.

O usto médio de uma pesquisa negativa em uma tabela

T

é Pesq

(T ) =

1

m

X

1≤i≤m

λ

i

(21)

Como há

n

itens no total, temos

X

1≤i≤m

λ

i

= n

e Pesq

(T ) =

n

m

= α

Consideremos, agora, o usto médio de uma

pesquisa negativa quando se tem

n

itens em uma tabela

T

qualquer de

m

listas.

As

m

n

tabelas possíveis são eqüiprováveis, pois a função de pi adinho

h

é uniforme.

O usto médio é Med

pesq

(m, n) =

1

m

n

X

T

Pesq

(T )

onde a soma é feita sobre todas tabelas

T

possíveis.

Deduz-se que Med

pesq

(m, n)

≈ 1 +

a

2

2

,

segundo Knuth 1 .

Complexidade média de uma pesquisa positiva

Como a tabela

T

é obtida por inserções no m da lista, a posição de um item em relação à abeça da lista não muda nun a.

1

TheArt ofComputer Programming, SortingandSear hing,vol. 3,pp. 525,2 a

(22)

Por isso, o usto de uma pesquisa positiva é igual, em n

o

de omparações entre itens, ao usto de inserção deste item quando ela a onte eu, mais 1.

De fato, fazem-se omparações om os itens da lista situados antes dos item pro urado, mais uma omparação om o item em si, o que pára a

pesquisa.

Se o item pro urado foi o

(i + 1)

-ésimo, sua inserção teve o mesmo usto que uma pesquisa negativa dentre os

i

itens, ou seja, em média:

Med

pesq

(m, i) =

i

m

Como onsidera-se que os

n

itens têm a mesma probabilidade de serem pro urados, deduz-se

Med

pesq

+

(m, n) =

i

n

X

0≤i≤n−1

Pesq

(m, i) + 1.

Logo, Med

pesq

+

(m, n) =

i

n

n−1

X

i=0

(

i

m

+ 1)

=

n(n − 1)

2nm

+ 1

=

α

2

1

2m

+ 1

(23)

Pi adinho oales ente

O método de pi adinho om en adeamento separado é fá il de se programar, quando é possível alo ar memória durante a exe ução.

Mas quando isso não é possível, é pre iso reservar, a priori, uma zona ontígua de memória para

geren iar as olisões nesta zona de tamanho xo.

Consideraremos que a tabela de tamanho

m

será dividida em 2 zonas:

1. uma zona de endereços primários de apa idade

p

e

2. uma reserva para geren iamento das olisões, de apa idade

r

, tal que

p + r = m

.

os inteiros

p

e

r

são xos a priori e a função de pi adinho varia no intervalo

[1, p]

.

O n o

de itens presentes,

n

, é inferior ou igual a

m

.

Exemplo: A tabela abaixo tem dimensão

m = 9

, ujas 3 últimas posições forma a reserva:

p = 6

e

(24)

Foram inseridos os seguintes itens, om seus respe tivos valores de pi adinho:

e

1

e

2

e

3

e

4

e

5

e

6

e

7

1 4 1 4 2 1 3

e1

e5

e7

e2

e6

e4

e3

1

3

2

4

6

5

7

8

9

T

Se utiliza-se toda a tabela, sem distinção de zonas de endereços primários e a reserva, pode-se

esperar um melhor preen himento desta.

Esta té ni a tem um in oveniente, no entanto, pois ria olisões se undárias, i. é, olisões que não são devidas à onin idên ia de valores da

função de pi adinho.

Exemplo: A tabela abaixo mostra a situação quando

m = 11

e em que se inseriu os itens

(25)

e

1

e

2

e

3

e

4

e

5

e

6

e

7

e

8

e

9

e

10

1 5 2 5 1 8 11 9 5 10

e1

e3

e2

e9

e8

e6

e7

e5

e4

1

3

2

4

6

5

7

8

9

T

10

11

e10 0

0

0

6

0

7

9

4

11

10

Coalescencia

das listas de valores

primarios 5 e 11

^

Na gura a ima, vemos que as listas dos itens de valores de pi adinho primário 5 e 11 foram

fundidas.

Este fenmeno é que dá o nome ao método: pi adinho om oales ên ia de listas, ou pi adinho oales ente.

As olisões se undárias, devidas à oales ên ia das listas, fazem om que o tempo de pesquisa seja mais longo que no aso de en adeamento externo à tabela.

(26)

Mas o desempenho do método, ainda assim, é bom.

O algoritmo de inserção, no aso de pi adinho oales ente, é dado abaixo.

A tabela é onstituída de

m

registros, om 2 ampos: val ontendo o item e prox, para o en adeamento.

Supõe-se dada a função

h

om valores em

1..m

.

Utiliza-se o seguinte tipo Pas al:

type tab = array [1..m℄ of re ord: val: Item; prox: 0..m; end;

Utiliza-se, também uma função vazia que testa se uma posição está o upada ou não:

fun tion vazia(T: tab; i: 1..m): boolean;

vazio(T) é um pro edimento que implementa a operação do TAD pi adinho oales ente que

(27)

pro edure inserir_PCo(x: Item; var T: tabela; var heio: boolean);

{ Pro ura o item

x

na tabela

T

e, no aso da pesquisa ser negativa, insere

x

em

T

; heio é uma variável lógi a de alarme: toma o valor true se a inserção não pde ser feita se a tabela estiver heia }

var R:

0..m

; i:

1..m

;

{R serve para pesquisar a posição livre que possa resolver uma olisão}

begin

{

h

é uma função de pi adinho de larada alhures} i := h(x); R := m; heio := false;

if vazio(T)

then begin {insere o item}

T[i℄.val := x; T[i℄.prox := 0;

{eventualmente mar ar a posição i omo o upada} end

else begin

while (T[i℄.val

<>

x) and (T[i℄.prox

<>

0) do i:= T[i℄.prox;

if T[i℄.val

<>

x then begin {pro ura onde inserir item}

while (R

>

0) and (not vazia(T,R)) do R := R - 1; if R

>

0 then begin T[i℄.prox := R; T[R℄.val := x; T[R℄.prox := 0 end

else heio := true {a tabela está heia} end

(28)

R é uma variável lo al ini iada om

m

no iní io do pro edimento, mas seria melhor manter a 1

a

posição livre a partir do m do vetor no próprio vetor.

Isso evitaria de ter de per orrer o vetor a partir do m para en ontrar a 1

a

posição livre que possa resolver uma olisão.

Análise da omplexidade do pi adinho oales ente

A avaliação de desempenho do pi adinho oales ente é bem ompli ada.

Mostra-se que o n o

médio de exames de posição, quando a função de pi adinho é uniforme, para um onjunto de

n

elementos distintos, em uma tabela de

m

lugares, vale, assintoti amente, para

m

e

n

grandes, om a razão

n

m

= α

xa e inferior a 1, por onstrução da tabela:

 no aso da pesquisa positiva: Med

pesq

+

(m, n)

1

(e

− 1) +

α

4

+

3

4

(29)

 no aso da pesquisa negativa: Med

pesq

(m, n)

1

4

e

α

2

+

3

4

Deduz-se das fórmulas a ima que uma pesquisa negativa (resp. positiva) em uma tabela heia (

α = 1

) só usta, em média, er a de 2,1 (resp. 1,7) exames de posições.

Resolução de olisões por ál ulo:

Métodos diretos Prin ípio geral

Nos métodos anteriores, há um gasto de memória omos apontadores que poderia ser usado para guardar itens e, assim, evitar olisões.

Para isto, são ne essários métodos de resolução de olisões por ál ulo no interior da tabela.

Por exemplo, no aso do pi adinho oales ente, se

m

ó tamanho da tabela e

n

o n o

de itens, tem-se ne essariamente

n ≤ m

.

(30)

Os métodos diretos são baseados na onstrução de uma função de pi adinho hamada de função de tentativas su essivas:

tentativa

: U

→ {1, 2, . . . , m}

m

que asso ia a ada elemento do universo

U

uma permutação de

{1, 2, . . . , m}

:

tentativa(

x

) = (tentativa

1

(x)

, tentativa

2

(x), . . . ,

tentativa

m

(x)

) om tentativa

i

(x)

∈ {1, . . . , m}

para todo

i

e, se

i 6= j

, então tentativa

i

(x)

6=

tentativa

j

(x)

.

Quando se pro ura

x

na tabela

T [1..m]

,

explora-se su essivamente os lugares tentativa

1

(x)

(valor do pi adinho primário), depois

tentativa

2

(x)

, tentativa

3

(x)

, et .

Ou se a ha o

x

, ou se en ontra um lugar vazio, ou hega-se até o m das

m

tentativas, quando se pode on luir que

x

não está na tabela.

(31)

Para fazer uma inserção, o pro edimento é o mesmo: se

x

é en ontrado, pára; senão,

x

é

inserido no lugar vazio; se as

m

tentativas foram feitas, é porque a tabela está heia e a inserção é impossível.

Os pro edimentos de pesquisa e de inserção são dados para o aso que não se fazem supressões.

Supõe-se dada uma função tentativa que al ula os valores de tentativa

i

(x)

:

fun tion tentativa(i:1..m; x:Item):1..m; {tentativa(i,x) = tentativa

i

(x)

}

De laração da tabela de pi adinho: type tabela = array[1..m℄ of Item;

Como no aso do pi adinho oales ente,

onsidera-se dada uma função que permite testar se um lugar da tabela está vazio:

(32)

fun tion pesquisar_PD1(x:Item; T:tabela): integer;

{esta função retorna o índi e de x em T, se x está presente em T e 0 senão; não é feita supressão em T}

var i,v: integer; sai: boolean; begin

i:=1; sai:=false;

while(i

m) and (not sai) do begin

v := tentativa(i,x);

if (vazia(T,v)) or (T[v℄=x) then sai := true

else i := i+1; end;

if T[v℄ = x

then {x presente} pesquisar_PD1:=v else {x ausente} pesquisar_PD1 := 0; end; {pesquisar_PD1}

(33)

pro edure inserir_PD1(x:Item; var T:tabela; var heio:boolean);

{se x não está presente em T, este pro edimento insere-o em T, no 1

o

lugar livre en ontrado nas tentativas; se x está em T, o pro edimento faz nada; se a tabela está heia, x não pode ser

inserido e heio é true, senão falso; não é feita supressão em T}

var i,v:integer; sai:boolean; begin

i:=1; heio:=false; sai:=false; while (i

m) and (not sai) do begin

v:= tentativa(i,x);

if (vazio(T,v)) or (T[v℄=x) then sai:=true else i:=i+1

end;

if T[v℄

6=

x then {x não está presente} if vazio(T,V)

then {insere x na tabela} T[v℄ := x else heio:=true

(34)

Pode ser usado um ontador asso iado à tabela para veri ar se a tabela está heia antes de hamar o pro edimento, o que o simpli a bem.

A pesquisa também pode ser feita om a ajuda de uma função que indi a, no aso de falha, o índi e do último lugar examinado.

Neste aso, a inserção pode ser feita, no aso da pesquisa ser negativa, inserindo o item no lugar obtido omo resultado.

Os diferentes métodos de pi adinho direto ara terizam-se pela es olha da função de tentativas su essivas.

No aso do pi adinho linear abaixo, a seqüên ia de lugares possíveis para um item depende

uni amente do valor de pi adinho primário deste.

Isto dá apenas

m

seqüên ias diferentes na tabela, em vez de

m!

.

(35)

Pi adinho linear

Neste método, quando há uma olisão em um

lugar de índi e

v

, tenta-se o índi e

v + 1

da tabela.

Se o m da tabela foi atingido, re omeça-se pelo iní io.

Notação: seja

a ⊕ b

a operação que dá esta progessão ir ular:

a ⊕ b

é denida em

[1, m]

× [1, m]

:

se

a + b ≤ m, a ⊕ b = a + b

senão,

a ⊕ b = a + b − m

Dada uma função de pi adinho uniforme

h : U → [1, m]

onstrói-se a seguinte seqüên ia de tentativas : tentativa

1

(x) = h(x);

tentativa

2

(x) = h(x)

⊕ 1;

. . . tentativa

i

(x) = h(x)

⊕ i − 1;

. . . tentativa

m

(x) = h(x)

⊕ m − 1;

(36)

Exemplo: A inserção su essiva dos itens abaixo, om seus respe tivos valores de pi adinho

primário

e

1

e

2

e

3

e

4

e

5

e

6

e

7

e

8

e

9

6 4 7 4 8 2 5 9 8

em uma tabela de 10 itens dá a seguinte repartição:

1 e

9

2 e

6

3

4 e

2

5 e

4

6 e

1

7 e

3

8 e

5

9 e

7

10 e

8

Este exemplo olo a em evidên ia 2 fenmenos ara terísti os do pi adinho linear:

1. Todos os itens om o mesmo endereço de pi adinho primário também têm a mesma seqüên ia de tentativas su essivas: não há dispersão alguma após o 1

o

(37)

2. Além disso, há agrupamento na tabela:

quanto maior forem os agrupamentos de itens onse utivos, maior a tendên ia a

aumentarem ( aso dos itens inseridos aós

e

5

).

Este método tem a vantagem de só pre isar de uma função de pi adinho e as tentativas são muito simples de al ular.

Basta modi ar, no algoritmo anterior, a

instrução v:=tentativa(i,x) por v:=v

1, a ini ialização e a terminação do laço ligeiramente. Análise de omplexidade do pi adinho linear

Para uma função de pi adinho uniforme, o n o médio de exames de lugares, quando

n

e

m

tendem para innito, om a razão

n

m

= α

xa,

vale assintoti amente:

 Para uma pesquisa positiva: Med

pesq

+

(m, n)

1

2

(1 +

1

1

− α

)

 no aso da pesquisa negativa: Med

pesq

(m, n)

1

2

(1 +

1

(1

− α)

2

)

(38)

Por exemplo,

α = 0, 5

dá 1,5 exames de lugares, em média, para uma pesquisa positiva e 2,5 para uma pesquisa negativa.

Para

α = 0, 8

, tem-se 3 exames de lugar para uma pesquisa positiva e 13 para uma pesquisa

negativa, por ausa dos agrupamentos. Pi adinho duplo

Para evitar a formação de agrupamentos de itens ontíguos, é pre iso dispersá-los mais, quando há olisões.

Tome-se omo seqüên ia de tentativas: tentativa

i

(x) = h(x)

⊕ k.(i − 1)

onde

k

é um n

o

xo.

Se

k

e

m

são primos entre si, então a seqüên ia de

m

tentativas al ança todos os lugares da tabela.

No entanto, o mesmo fenmeno de agrupamento a onte e, mesmo se é de

k

em

k

.

Para evitar isso, é pre iso que o in remento

k

dependa do item.

(39)

É pre iso utilizar uma 2 a

função de pi adinho, o que justi a o nome dado ao método.

A seqüên ia de tentativas é, então, a seguinte: tentativa

i

(x) = h(x)

⊕ d(x).(i − 1)

A função

d

deve ser tal que, para todo elemento

x

de

U

, a seqüên ia das

m

tentativas leve em onta todos os lugares da tabela.

Isto é verdade se

d(x)

é primo om

m

para todo

x

.

Esta propriedade é satisfeita se es olhemos:

 seja

m

primo e, neste aso, basta que

d

tome valores em

[1, m

− 1]

;

 seja

m = 2

p

e basta que

d(x)

seja ímpar para todo

x

, o que pode ser onseguido tomando

d(x) = 2d

(x) + 1

, onde

d

é uma função om valores em

[0, 2

p−1

− 1]

.

Análise da omplexidade do pi adinho duplo

O n o

médio de exames de lugares para uma

(40)

ontendo

n

itens, para

m

e

n

grandes e

α = n/m

vale, assintoti amente,

1

1

− α

e para a pesquisa positiva, vale

1

α

ln

1

1

− α

.

(41)

Comparação entre os métodos de pi adinho

1

2

3

4

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Med pesq−(m,n)

Taxa de ocupação da tabela (n/m)

Média da pesquisa negativa em tabelas de picadinho

Linear

Duplo

Coalescente

Separado

1

2

3

4

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Med pesq+(m,n)

Taxa de ocupação da tabela (n/m)

Média da pesquisa positiva em tabelas de picadinho

Linear

Duplo

Coalescente

(42)

Das guras anteriores, tiramos as seguintes on lusões:

1. Para uma taxa de preen himento baixa, todos os métodos são aproximadamente

equivalentes.

2. O método mais e az é o de pi adinho om en adeamento separado. Esse método, tem também duas outras vantagens sobre os outros métodos: a supressão de um item é uma operação simples e a taxa de

preen himento pode ultrapassar 1. Mas

ne essita de alo ação dinâmi a de memória. 3. Quando a memória reservada ao pi adinho

deve ser reservada a priori, o método

oales ente é o mais e az. No entanto, esse método ne essita de endereçamento indireto, que utiliza memória. Se o tamanho dos itens são grandes em relação ao tamanho de um apontador, isto não tem importân ia, mas, no aso ontrário, é melhor utilizar os métodos diretos.

(43)

4. O pi adinho linear é o mais lento, mas tem a vantagem de ser simples de ser implementado e seus desempenhos são bem a eitáveis

quando a taxa de preen himento é baixa.

Todos os métodos de pi adinho são muito bons para gestão de dados estáti os.

Se se onhe e o n o

de itens, es olhe-se o tamanho

m

da tabela de pi adinho de forma que a taxa de preen himento seja da ordem de 70% a 80%.

Ex eto pelo método de en adeamento separado, todos os métodos lidam mal om inserções e, sobretudo, om supressões.

Referências

Documentos relacionados

Com tal análise, Florestan Fernandes trilha um caminho fundamental a se seguir na busca por compreender a particularidade do capitalismo brasileiro. Autores como Caio Prado

Combinada a outras práticas de redes adaptativas, tais como redes híbridas e SD-WAN, a largura de banda flexível permite às empresas decidir quantos recursos seus data

O nome, a marca LaoQiGong, é apenas uma maneira de distinguir essa prática dos estilos que se podem encontrar em vários lugares do mundo, dado que este aqui

15h40 – DISPOSITIVOS MÓVEIS PARA MONITORAMENTO DE VENTILAÇÃO EM MINA SUBTERRÂNEA - Autores: Rita de Cássia Pedrosa Santos (UFMG); Walter Albergaria Junior

Em estudo com 800 PMI (400 primeiros PMI e 400 segundos PMI) Vertucci, em 1978, utilizou-se da técnica de diafanização para determinar o número de canais radiculares,

Para tanto deverão se cadastrar previamente indo pessoalmente até a sede ou pelo site do Leilão Judicial Eletrônico, com no mínimo 24h (vinte e quatro horas) de antecedência da

The present article is the result of reflections developed within the framework of the extension project “Cedoc: preservação do patrimônio histórico e cultural

Valor Máximo Aceitável: R$ 12,0000 Situação: Cancelado por inexistência de proposta Aplicabilidade Decreto 7174: Não Aplicabilidade Margem de Preferência: Não Intervalo mínimo