• Nenhum resultado encontrado

E STRUTURAS DED ADOSE A LGORITMOS S KIP L

N/A
N/A
Protected

Academic year: 2019

Share "E STRUTURAS DED ADOSE A LGORITMOS S KIP L"

Copied!
28
0
0

Texto

(1)

E

STRUTURASDE

D

ADOS E

A

LGORITMOS

S

KIP

L

IST 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))

(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?

(3)

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)

(4)

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 comparada a das árvores binária de pesquisa

 Basicamente uma skip list é uma variação de 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)

(5)

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

(6)

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

(7)

E

XEMPLO

 Um nível possui 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

CARACTERÍSTICAS

 S0 possui todos os elementos além do -∞ e ∞

 Todos os Si possuem -∞ e ∞

 onde cada Si ⊆ S0

(8)

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

(9)

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.

SKIP LIST

 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

(10)

I

MPLEMENTAÇÃO

 Que estruturas compõem uma skip list?

 Como implementá-las?

19

I

MPLEMENTAÇÃO

 Como implementar as classes SkipNode e

(11)

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

)

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();

(12)

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?

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

SkipNode<V>(infinito,maxLevel,infinito);

(13)

E

XERCÍCIO

 Como criar uma skip list vazia?

25

publicclass SkipListImpl<V> { ...

boolean useMaxLevelAsLevel; double probability = 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(); }

}

publicclass SkipListImpl<V> { ...

boolean useMaxLevelAsLevel; double probability = 0.5;

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

this.level = maxLevel; } else{

E

XERCÍCIO

 Como criar uma skip list vazia?

void connectRootAndNIL(){ for i:0 level

(14)

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.

(15)

S

KIP

L

IST

(P

ESQUISA

)

 Como pesquisar em uma skip list?

 Como pesquisar o nó 8?

29

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

(16)

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

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

31

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

(17)

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

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

33

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

(18)

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

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

35

SKIP LIST (PESQUISA)

 Como pesquisar em uma skip list?

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

(19)

SKIP LIST (PESQUISA)

 Como seria o algoritmo da pesquisa?

37

SKIP LIST (PESQUISA)

 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]

(20)

SKIP LIST (INSERCAO)

 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

SKIP LIST (INSERCAO)

 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

(21)

SKIP LIST (INSERCAO)

 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

SKIP LIST (INSERCAO)

 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?

(22)

SKIP LIST (INSERCAO)

 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

(23)

SKIP LIST (INSERCAO)

 Como seria o

algoritmo da insercao?

45

SKIP LIST (INSERCAO)

 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()

Pesquisa o local

Guarda Caminho

Este algoritmo insere ou atualiza

(24)

ILUSTACAO GERAL

x

for i: 1..v

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

updade[1] updade[4]

updade[3]

updade[2]

x

47

SKIP LIST (REMOCAO)

 Como funciona a remocao em uma skip list?

 Como remover o nó 9?

(25)

SKIP LIST (REMOCAO)

 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

SKIP LIST (REMOCAO)

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

Pesquisa o local

(26)

SKIP LIST (REMOCAO)

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

(27)

S

KIP

L

IST

(A

NÁLISES

)

O tempo de pesquisa de 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 inserir e 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

(28)

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

Incluindo os orientados de mestrado e doutorado, o orientador poderá ter, no máximo, 8 (oito) alunos simultaneamente em todos os programas em que atua. 5) Caso ocorra empate

a) política nacional de desenvolvimento do turismo; b) promoção e divulgação do turismo nacional, no país e no exterior; c) estímulo às iniciativas públicas e privadas de

Neste trabalho foram avaliados os parâmetros de qualidade de polpa de acerola congelada, segundo o Regulamento Técnico para Fixação dos Padrões de Identidade e Qualidade

 Cada elemento (nó) da lista contém um dado armazenado e um apontador para o próximo elemento da lista?.  Estrutura recursiva com

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

 Alguns conjuntos dinamicos pressupoem que existe uma relação de ordem entre as chaves.. Isso permite falar do próximo elemento ao invés de um elemento

 Chaves que colidam precisam ter seu hash code “recalculado” para encontrar um slot vazio?.  Todas as chaves estão em

 A alocação dinâmica é muito utilizada em problemas de estrutura de dados como por exemplo, listas encadeadas, pilhas, filas, arvores binárias e grafos ...  O interessante