• Nenhum resultado encontrado

A LGORITMOS S KIPL

N/A
N/A
Protected

Academic year: 2019

Share "A LGORITMOS S KIPL"

Copied!
10
0
0

Texto

(1)

ESTRUTURAS DEDADOS E

ALGORITMOS

SKIPLIST Adalberto Cajueiro

Departamento de Sistemas e Computação Universidade Federal de Campina Grande 1

S

KIP

L

IST

Surgiram como uma ideia probabilistica para árvores balanceadas

Tempo esperado das operações com alta probabilidade O(log(n))

Fácil de implementar e de entender

2

Communications of the ACM, June 1990, 33(6) 668-676.

3

Q

UESTIONAMENTOS

P

ERTINENTES

Quanto tempo leva no pior caso para pesquisar em uma lista ordenada?

 O(n).

4

Q

UESTIONAMENTOS

P

ERTINENTES

Quanto tempo leva no pior caso para pesquisar em uma lista ordenada?

O(n).

Como podemos melhorar a pesquisa em listas encadeadas?

5

E

XEMPLO

Linhas de ônibus podem implementar uma skip list

 Linha local (para em todos os pontos)

 Linha expressa (poucas paradas)

6

(2)

E

XEMPLO

Como fazer para ir da estação 1 para a 5?

Linha azul na estação 1 e desce na 4

Depois pegar a linha vermelha e descer na 5

7

1 2 3 4 5 6

S

KIP

L

IST

(D

EFINICAO

)

Skip list é uma estrutura de dados probabilística, baseada em listas encadeadas, com eficiência comparadaa das árvores binária de pesquisa

Basicamente uma skip list é uma variaçãode uma lista encadeada ordenada onde a cada nó são acrescentados vários ponteiros para elementos a frente, de modo que a pesquisa possa

rapidamente pular partes da lista (daí o nome)

Uma skip list tem a propriedade de manter seus itens ordenados

8

S

KIP

L

IST

Balancear probabilisticamente um estrutura de dados é mais fácil que manter o balanceamento de forma explicita.

Para algumas aplicações, skip lists são mais naturais que árvore e levam a algoritmos mais simples e fáceis de implementar.

Performance melhorada por um fator constante em relacao a algoritmos de balanceamento

Skip lists são eficientes em uso de espaço.

9

E

XEMPLO

10 Nós sentinelas

S

KIP

L

ISTS

(D

EFINICOES

)

11 niveis

nós

forward links

nó cabeçalho nó vazio

-∞

S

KIP

L

IST

(D

EFINICOES

)

Nível (altura) máximo

 Maior altura que um nó pode ter em uma skip list

Nível (altura)

 A altura da skip list é a altura do maior nó, ou seja, a quantidade de referências do nó com maior número de apontadores forward.

Probabilidade

 Probabilidade é o valor usado no algoritmo para determinar aleatoriamente o nível (altura) de cada nó

(3)

E

XEMPLO

Um nívelpossui determinado numeros de nós que é menor ou igual ao número de nós da camada adjacente inferior

Todos os níveis possuem nós ordenados.

altura

nível

No de nivel 4 No de nivel 3 No de

nivel 2 No de nivel 1

13

C

ARACTERÍSTICAS

S0possui todos os elementos além do -∞ e ∞

Todos os Sipossuem -∞ e ∞

 onde cada Si ⊆ S0

14 S0

Sh

E

XEMPLO

Inicializacao de uma skip list com nivel maximo 7 e probabilidade de 0,5.

O HDR (header) guarda o inicio da lista (menor valor possivel).

O elemento NIL guarda a maior chave possivel da skip list. Ele fica no final da lista.

Todos os níveis terminam com NIL.

-∞ ∞

15

-

E

XEMPLO

Insercao dos nós 9,7,5,3,6,14,8,12 com respectivas alturas (níveis) sendo 2,1,1,2,2,1,1,5

determinados aleatoriamente.

Os nós sao colocados em ordem crescente

16 Usando nível máximo como altura da skip list.

E

XEMPLO

Insercao dos nós 9,7,5,3,6,14,8,12 com respectivas alturas (níveis) sendo 2,1,1,2,2,1,1,5

determinados aleatoriamente.

Os nós sao colocados em ordem crescente

17 Sem usar nível máximo como altura da skip list.

S

KIP

L

IST

Altura de uma skip list

 Não depende da distribuição das chaves

 Espera-se que cada nível tenha 50% do anterior

 Logo a altura esperada é h = log n

A randomizaçãoé quem vai dizer isso

(4)

I

MPLEMENTAÇÃO

Que estruturas compõem uma skip list?

Como implementá-las?

19

I

MPLEMENTAÇÃO

Como implementar as classes SkipNode e

SkipList?

20

I

MPLEMENTAÇÃO

Como implementar as classes SkipNode e

SkipList?

21

public class SkipNode<V> { SkipNode<V>[] forward; int height;

int key; V satteliteData;

public SkipNode(int key, int height, V satelliteData){ this.key = key;

this.height = height;

this.satteliteData = satelliteData; this.forward = new SkipNode[height]; }

}

I

MPLEMENTAÇÃO

(I

NTERFACE

)

22

public interface SkipList<V> { public void insert(int key, V newValue); public void insert(int key, V newValue, int height); public void remove(int key);

public int height();

public SkipNode<V> search(int key); public int size();

public SkipNode<V>[] toArray(); }

I

MPLEMENTAÇÃO

23

public class SkipListImpl<V> implements SkipList<V> { SkipNode<V> root;

SkipNode<V> NIL; int level; int maxLevel;

boolean useMaxLevelAsLevel; double probability; }

E

XERCÍCIO

Como representar o nó NIL?

24

public class SkipNode<V> { SkipNode<V>[] forward; int height;

int key; V value; }

public class SkipListImpl<V> implements SkipList<V> {

int infinito = Integer.MAX_VALUE; NIL = new

(5)

E

XERCÍCIO

Como criar uma skip list vazia?

25 public classSkipListImpl<V> {

...

booleanuseMaxLevelAsLevel; doubleprobability = 0.5;

public SkipList (int maxLevel, boolean maxLevelAsLevel){ if(maxLevelAsLevel){

this.level = maxLevel; } else{

this.level = 1; }

this.maxLevel = maxLevel;

root = new SkipNode<V>(menosInfinito,maxLevel,menosInfinito); NIL = new SkipNode<V>(infinito,maxLevel,infinito); connectRootAndNIL();

} }

public classSkipListImpl<V> { ...

booleanuseMaxLevelAsLevel;

doubleprobability = 0.5;

public SkipList (int maxLevel, boolean maxLevelAsLevel){ if(maxLevelAsLevel){

this.level = maxLevel; } else{

this.level = 1; }

this.maxLevel = maxLevel;

root = new SkipNode<V>(menosInfinito,maxLevel,menosInfinito); NIL = new SkipNode<V>(infinito,maxLevel,infinito);

connectRootAndNIL();

} }

E

XERCÍCIO

Como criar uma skip list vazia?

26 void connectRootAndNIL(){

for i:0 level root.forward[i] = NIL; }

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

Como pesquisar o nó 8?

27

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?  Como pesquisar o nó 8?

 Comece atravessando os apontadores forward que nao levam a um elemento menor que o procurado.

 Depois siga para o elemento menor e aplique o mesmo raciocinio ate descer ao nivel 1.

 Depois é só seguir o apontador forward do nivel 1 do

ultimo nó visitado. 28

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

Como pesquisar o nó 8?

29

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

 Pesquise as chaves 9,15,13,17.

(6)

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

Pesquise as chaves 9,15,13,17.

31

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

 Pesquise as chaves 9,15,13,17.

32

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

Pesquise as chaves 9,15,13,17.

33

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

 Pesquise as chaves 9,15,13,17.

34

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

Pesquise as chaves 9,15,13,17.

35

S

KIP

L

IST

(P

ESQUISA

)

Como pesquisar em uma skip list?

 Pesquise as chaves 9,15,13,17.

x

(7)

S

KIP

L

IST

(P

ESQUISA

)

Como seria o algoritmo da pesquisa?

37

S

KIP

L

IST

(P

ESQUISA

)

Como seria o algoritmo da pesquisa?

pesquisa(list,key) x := list.root

for i := list.level downto 1 do while x.forward[i].key < key do

x := x.forward[i] x := x.forward[1]

if x.key = key then return x.value

else return “A chave não existe”

Para andar ate o ultimo no com mesma altura

38

S

KIP

L

IST

(I

NSERCAO

)

Como funciona a insercao em uma skip list?

Como inserir o nó 10?

O nivel do nó vai ser gerado aleatoriamente

Precisa de uma funcao randomica

Vamor supor que foi nivel randomico gerado foi 1

39

S

KIP

L

IST

(I

NSERCAO

)

Como funciona a insercao em uma skip list?

 Como inserir o nó 10?

 O nivel do nó vai ser gerado aleatoriamente

Precisa de uma funcao randomica

Vamor supor que foi nivel randomico gerado foi 1

40

S

KIP

L

IST

(I

NSERCAO

)

Como funciona a insercao em uma skip list?

Como inserir o nó 10?

O nivel do nó vai ser gerado aleatoriamente

Precisa de uma funcao randomica

Supor p = 0,5; random <= p (cria); random > p (nao cria)

41

S

KIP

L

IST

(I

NSERCAO

)

Como funciona a insercao em uma skip list?

 Como inserir o nó 4 e 15?

 Supor que random gera 0,0,1,0,0,0,1 nessa ordem

 Qual o nivel do no 4?

 Qual o nivel do no 15?

(8)

S

KIP

L

IST

(I

NSERCAO

)

Como funciona a insercao em uma skip list?

Como inserir o nó 4 e 15?

Supor que random gera 0,0,1,0,0,0,1 nessa ordem

Qual o nivel do no 4? (3)

Qual o nivel do no 15? (4)

43

I

LUSTACAO GERAL

44

S

KIP

L

IST

(I

NSERCAO

)

Como seria o

algoritmo da insercao?

45

S

KIP

L

IST

(I

NSERCAO

)

Como seria o

algoritmo da insercao?

Inserir(SkipList list, key, newValue)

SkipNode [] update = new SkipNode [1..list.maxLevel]; x := list.root

for i := list.level downto 1 do while x.forward[i].key < key do

x := x.forward[i] update[i] := x x := x.forward[1] if x.key = key

x.value := newValue else

int v := randomLevel() if v > list.level then

for i := list.level + 1 to v do update[i] := list.root list.level := v

x := makeNode(key, v, newValue) for i := 1 to v do

x.forward[i] := update[i].forward[i] update[i].forward[i] := x

Altera Ponteiros Pesquisa o local

Guarda Caminho

Caso o nível aumente e list nao seja o 1o header. Este algoritmo

insere ou atualiza os dados

46

I

LUSTACAO GERAL

for i: 1..v updade[1]

updade[4] updade[3]

updade[2]

x

47

S

KIP

L

IST

(R

EMOCAO

)

Como funciona a remocao em uma skip list?

 Como remover o nó 9?

 É só procurar pelo nó e guardar os nós a terem os apontadores forward a serem atualizados para os apontadores forward do nó removido.

(9)

S

KIP

L

IST

(R

EMOCAO

)

Como funciona a remocao em uma skip list?

Como remover o nó 9?

É só procurar pelo nó e guardar os nós a terem os apontadores forward a serem atualizados para os apontadores forward do nó removido.

49

S

KIP

L

IST

(R

EMOCAO

)

Como seria o

algoritmo da remoção?

Delete(SkipList list, key)

Node [] update = new Node[1..list.maxLevel]; x := list.root

for i := list.level downto 1 do while x.forward[i].key < key do

x := x.forward[i] update[i] := x x := x.forward[1] if x.key = key then

for i := 1 to list.level do

if update[i].forward[i] ≠ x then break update[i].forward[i] := x.forward[i]

while list.level > 1 and

list.root.forward[list.level] = NIL do list.level := list.level –1

Ajeita Altura Ajeita Ponteiros Pesquisa o local

Guarda Caminho

50

S

KIP

L

IST

(R

EMOCAO

)

updade[2] updade[4]

updade[3] updade[1]

x

for i := 1 to list.level do

if update[i].forward[i] ≠ x then break update[i].forward[i] := x.forward[i]

while list.level > 1 and list.root.forward[list.level] = NIL do list.level := list.level –1

51

S

KIP

L

IST

Applet

 http://people.ksp.sk/%7Ekuko/bak/index.html  http://www.sccnet.com.br/jackson/SkipList/SkipListA

pplet/Applet.html

52

S

KIP

L

IST

(A

NÁLISES

)

O tempo de pesquisade uma skip list é proporcional a:

Pesquisa na Diagonal

O número de passos para baixo nos niveis (vezes) O número de pesquisas para frente

Por fatores probabilísticos tem grande chance

de serem O(log n)

A análise do método inserire removeré similar Em média, skip lists são mais rápidas do que

árvores AVL e outras árvores balanceadas de

pesquisa 53

S

KIP

L

IST

(A

NÁLISES

)

Complexidade de espaço

Usando-se fatores probabilísticos, calcula-se que o espaço provavelmente usado por uma skip list com n itens é deO(n)

(10)

R

EFERÊNCIAS

Seção 7.5

1a edição

http://www.sable.mcgill.ca/~dbelan2/cs251/skip_li sts.html

Referências

Documentos relacionados

No Teste de Relevância devem ser definidos critérios de inclusão tais como: data de realização da pesquisa, tipo de estudo, apresentação de resultados originais, exposição

Você pode utilizar seu dispositivo Garmin com um monitor de frequência cardíaca no pulso ou com um monitor de frequência cardíaca torácico compatível para exibir o tempo

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

As alterações às definições do interruptor DIP só são reconhecidas quando a alimentação de energia da impressora é ligada ou quando a impressora é reiniciada por meio

Em vez de usar um gradiente linear para mostrar a propriedade indicada de um elemento na tabela periódica, o Kalzium também pode usar um gradiente logarítmico.. Na página

A Iniciativa Cinturão e Rota preocupa os Estados Unidos, pois além da China ter um crescimento econômico grandioso nas últimas décadas, tornou-se o principal

Uma das estruturas que mais sofrem o impacto desta expansão sem planejamento são os sistemas de distribuição de água, especialmente se este crescimento é vertical, pois o aumento da