a05 estruturas de dados

Upload: adenilton-barroso

Post on 13-Feb-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 A05 Estruturas de Dados

    1/86

  • 7/23/2019 A05 Estruturas de Dados

    2/86

    Estruturas de dados: Pilhas,Filas, Listas, Dicionrios, Filas de

    prioridade.

  • 7/23/2019 A05 Estruturas de Dados

    3/86

    Agenda

    Dicas;

    Pilhas;

    Filas;

    Listas;

    Dicionrios;

    Filas de prioridade.

  • 7/23/2019 A05 Estruturas de Dados

    4/86

    Dicas

    Leia o problema atentamente

    No assuma nada: leia a especificao

    Eficincia nem sempre algo to importantea no ser que voc esteja lidando comalgoritmos exponenciais para problemaspolinomiais

    4

  • 7/23/2019 A05 Estruturas de Dados

    5/86

    Dicas

    Qual a melhor forma de representar umamo de cartas? Voc vai embaralhar as cartas?

    Comparar os seus valores?

    Procurar por padres na sua mo?

    5

  • 7/23/2019 A05 Estruturas de Dados

    6/86

    Dicas

    Qual a melhor forma de representar cadacarta? Operaes com cartas?

    O naipe importa?

    6

  • 7/23/2019 A05 Estruturas de Dados

    7/86

    Dicas

    Debugar pode ser muito frustante com o robde avaliao (robot judge) Muito importante testar antes da submisso.

    Teste a entrada

    Teste entradas incorretas

    Teste situaes limites (entrada vazia, umnico item, dois items e valores igual a zero)

    7

  • 7/23/2019 A05 Estruturas de Dados

    8/86

    Dicas

    Teste instncias em que voc sabe aresposta correta

    Teste instncias grandes (muito grandes)

    Conhea bem seu debugador

    Exiba sua estruturas de dados Faa testes invariantes

    Verifique seu cdigo

    Faa seus prints significarem alguma coisa8

  • 7/23/2019 A05 Estruturas de Dados

    9/86

    Dicas

    Crie seus arranjos um pouco maiores do queo necessrio

    Tenha certeza de que seus bugs so bugsde verdade

    9

  • 7/23/2019 A05 Estruturas de Dados

    10/86

    Pilhas

    10

  • 7/23/2019 A05 Estruturas de Dados

    11/86

    Pilhas

    Tipo Abstrato de dados com a seguintecaracterstica:

    O ltimo elemento a ser inserido o primeiroa ser retirado/ removido

    (LIFOLastin FirstOut)

    Analogia: pilha de pratos, livros, etc.

    Usos: Chamada de subprogramas, avaliaode expresses aritmticas, etc.

    11

  • 7/23/2019 A05 Estruturas de Dados

    12/86

    Pilhas

    Operaes primrias:

    PilhaPush(s, x)Insere item xno topoda pilha s.PilhaPop(s)Retorna (e remove) o topoda pilha s.

    PilhaInicializa(s)Cria uma pilha vazia em s.PilhaCheia(s), PilhaVazia(s)Testa se a pilha sest cheia ou vazia, respectivamente.

    Existem opes de estruturas de dados que podem serusadas para representar pilhas.

    As duas representaes mais utilizadas so asimplementaes por meio de arranjos e de ponteiros

    12

  • 7/23/2019 A05 Estruturas de Dados

    13/86

    Fila (Queue)

    13

  • 7/23/2019 A05 Estruturas de Dados

    14/86

    Fila

    Tipo Abstrato de dados com a seguintecaracterstica:

    O primeiro elemento a ser inserido oprimeiro a ser retirado/ removido

    (FIFOFirstin FirstOut)

    Analogia: fila em de pessoas, fila de espera,etc.

    Usos: Sistemas operacionais, filas deimpresso, processamento, etc.

    14

  • 7/23/2019 A05 Estruturas de Dados

    15/86

    Fila

    Operaes primrias:

    FilaPush(q, x)Insere o item x no final da fila q.

    FilaPop(q)Retorna (e remove) o item na frente da

    fila q.FilaInicializa(q)Cria uma fila vazia em q.

    FilaCheia(q), FilaVazia(q)Testa se a fila q estcheia ou vazia, respectivamente.

    Existem opes de estruturas de dados que podem serusadas para representar listas.

    As duas representaes mais utilizadas so asimplementaes por meio de arranjos e de ponteiros

    15

  • 7/23/2019 A05 Estruturas de Dados

    16/86

    Dicas

    Problemas de utilizar arranjos: Possibilidade de overflow.

    Em caso de fila: dificuldade de manuteno.

    Assim, se utilizar array: Use dois ndices para implementar filas:

    inicio(head) e fim (tail), de forma a evitar

    movimentaes em toda a fila. Use um contador para implementar as funes

    FilaCheia e FilaVazia.

    16

  • 7/23/2019 A05 Estruturas de Dados

    17/86

    Dicas

    Problemas de utilizar arranjos: Possibilidade de overflow.

    Em caso de fila: dificuldade de manuteno.

    Assim, se utilizar array: Use dois ndices para implementar filas:

    inicio(head) e fim (tail), de forma a evitar

    movimentaes em toda a fila. Use um contador para implementar as funes

    FilaCheia e FilaVazia.

    17

  • 7/23/2019 A05 Estruturas de Dados

    18/86

    Dicionrios

    18

  • 7/23/2019 A05 Estruturas de Dados

    19/86

    Dicionrios

    Permite retornar um item a partir de sua chave, ao invs deutilizar a posio do elemento

    Operaes primrias: DicInsere(d, x)Insere item x no dicionrio d.

    DicRemove(d, x)Remove item x(ou o item para o qual x aponta) dodicionrio d.

    DicBusca(d, k)Retorna o item com chave k do dictionrio d (se o itemexistir).

    DicInicializa(d)Inicializa o dicionrio d.

    DicCheio(d), DicVazio(d)Testa se o dicionrio dest cheio ou vazio,respectivamente.

    19

  • 7/23/2019 A05 Estruturas de Dados

    20/86

    Dicionrios

    Arrays ordenados e no-ordenados

    Listas ordenadas e no-ordenadas

    rvores AVL Tabelas Hash

    Qual deles utilizar? O que analisar?Performance?

    Dados sero modificados?20

  • 7/23/2019 A05 Estruturas de Dados

    21/86

    Dicionrios

    Dicionrios estticos Dados no mudam

    Utilizar arrays(ordenados ou no-ordenados)

    Fazer busca binria apenas se n >> 1000

    Dicionrios semi-estticos Apenas inseres e buscas (pouqussimas remoes)

    Tabelas Hash(com endereamento aberto)

    Dicionrios totalmente dinmicos

    Dados so modificados o tempo todo Tabelas Hash(caprichar na funo de Hash)

    21

  • 7/23/2019 A05 Estruturas de Dados

    22/86

    Filas de Prioridade

    22

  • 7/23/2019 A05 Estruturas de Dados

    23/86

    Filas de Prioridade

    Estruturas de dados que suportam as operaes:

    FPInsere(q, x)Insere item x na fila de prioridade q.

    FPRemove(q)Remove e retorna o maior item da fila deprioridade q.

    Maximo(q)Retorna o maior item da fila de prioridade q (seo item existir).

    FPInicializa(q)Inicializa a fila de prioridade d.

    FPCheio(q), FPVazio(q)Testa se a fila de prioridade q est

    cheia ou vazia, respectivamente.

    23

  • 7/23/2019 A05 Estruturas de Dados

    24/86

    Filas de Prioridade

    Como implementar?

    Quando usar?

    Um heap binrio uma forma eficiente.

    Se houver poucas inseres, que tal umarray ordenado?

    Utilizar para manter cronogramas ecalendrios, determinando prximas tarefas.

    24

  • 7/23/2019 A05 Estruturas de Dados

    25/86

    Conjuntos

    25

  • 7/23/2019 A05 Estruturas de Dados

    26/86

    Conjuntos

    Coleo de elementos.

    Deve implementar as seguintes operaes bsicas:

    Membro(S, x)Retorna true se o item x for membro do

    conjunto S.Uniao(A, B)Retorna um novo conjunto AB.

    Intersecao(A, B)Retorna um novo conjunto AB.

    SetInsere(S, x), SetRemove(S, x)Insere e remove,

    respectivamente, o item x do conjunto S.SetInicializa(S)Inicializa um conjunto S vazio.

    26

  • 7/23/2019 A05 Estruturas de Dados

    27/86

    Conjuntos

    Dicionrio uma boa opo para conjuntosmaiores.

    Dicionrios ordenados facilitam a operao de

    interseo. Para conjuntos menores, que tal um array de bits,

    com uma posio para cada um dos possveiselementos?

    Uso de array para representar um conjunto U Eficiente at para valores maiores de |U|

    Exemplo: array de 1.000 inteiros suficiente pararepresentar um conjunto de at 32.000 elementos!!!

    27

  • 7/23/2019 A05 Estruturas de Dados

    28/86

    Que tal implementar um heap binrio ou umatabela hash durante uma competio?

    Desvantagem de utilizar a linguagem C

    No existe uma biblioteca de estruturasde dados de uso geral

    Impossvel criar uma pilha genrica.

    Seriam necessrias mltiplas definies: push_char()

    push_int()

    push_estudante()

    push_outro_tipo_dados()28

  • 7/23/2019 A05 Estruturas de Dados

    29/86

    29

  • 7/23/2019 A05 Estruturas de Dados

    30/86

    Programao Genrica

    30

  • 7/23/2019 A05 Estruturas de Dados

    31/86

    Programao Genrica

    Por exemplo, podemos criar uma funo genrica que ordeneum vetor

    A linguagem se encarrega de criar especializaes que trataro vetoresdo tipo int, float, string e etc.

    Podemos tambm criar uma classe genrica para a estrutura dedados Pilha

    A linguagem se encarrega de criar as especializaes pilha de int, float,string, etc.

    O genrico um estncil (define o formato), a Especializao contedo.

    31

  • 7/23/2019 A05 Estruturas de Dados

    32/86

    Funes Genricas ou Templates

    32

  • 7/23/2019 A05 Estruturas de Dados

    33/86

    Funes Genricas ou Templates

    33

  • 7/23/2019 A05 Estruturas de Dados

    34/86

    Funes Genricas ou Templates

    34

  • 7/23/2019 A05 Estruturas de Dados

    35/86

    Funes Genricas ou Templates

    35

  • 7/23/2019 A05 Estruturas de Dados

    36/86

    Funes Genricas ou Templates

    36

  • 7/23/2019 A05 Estruturas de Dados

    37/86

    Funes Genricas ou Templates

    37

  • 7/23/2019 A05 Estruturas de Dados

    38/86

    Funes Genricas ou Templates

    38

  • 7/23/2019 A05 Estruturas de Dados

    39/86

    Conhecer a STL

    (Standard Templates Library)

    39

  • 7/23/2019 A05 Estruturas de Dados

    40/86

    STL

    A Standard Template Library (STL) foiadicionada biblioteca padro C++;

    A STL define componentes genricosreutilizveis que implementam vriasestruturas de dados e algoritmos queprocessam estas estruturas;

    Basicamente, a STL composta decontineres, iteradorese algoritmos.

    40

  • 7/23/2019 A05 Estruturas de Dados

    41/86

    STL

    Contineresso templates de estruturas de dados Possuem mtodos associados a eles.

    Iteradoresso ponteiros, utilizados para percorrer e

    manipular os elementos de um continer; Algoritmosso as funes que realizam operaes

    tais como buscar, ordenar e comparar elementos oucontineres inteiros Existem aproximadamente 70 algoritmos implementados

    na STL;

    A maioria utiliza iteradores para acessar os elementos decontineres.

    41

  • 7/23/2019 A05 Estruturas de Dados

    42/86

    Contineres

    42

  • 7/23/2019 A05 Estruturas de Dados

    43/86

    Contineres

    43

  • 7/23/2019 A05 Estruturas de Dados

    44/86

    Contineres

    44

  • 7/23/2019 A05 Estruturas de Dados

    45/86

    Contineres

    45

  • 7/23/2019 A05 Estruturas de Dados

    46/86

    Contineres

    46

  • 7/23/2019 A05 Estruturas de Dados

    47/86

    Contineres, Funes Comuns

    47

  • 7/23/2019 A05 Estruturas de Dados

    48/86

    Contineres, Funes Comuns

    48

  • 7/23/2019 A05 Estruturas de Dados

    49/86

    Contineres, Funes Comuns

    49

  • 7/23/2019 A05 Estruturas de Dados

    50/86

    Funes de Contineres

    50

  • 7/23/2019 A05 Estruturas de Dados

    51/86

    Bibliotecas de Contineres

    51

  • 7/23/2019 A05 Estruturas de Dados

    52/86

    Contineres

    necessrio garantir que os elementosarmazenados em um continer suportam umconjunto mnimo de operaes

    Quando um elemento inserido em um continer,ele copiado: o operador de atribuio deve sersobrecarregado se necessrio;

    Dica: pode ser necessrio que os operadores ==e< devem ser sobrecarregados.

    52

  • 7/23/2019 A05 Estruturas de Dados

    53/86

    Iteradores

    53

  • 7/23/2019 A05 Estruturas de Dados

    54/86

    Iteradores

    54

  • 7/23/2019 A05 Estruturas de Dados

    55/86

    Categorias de Iteradores

    55

  • 7/23/2019 A05 Estruturas de Dados

    56/86

    Categorias de Iteradores

    56

  • 7/23/2019 A05 Estruturas de Dados

    57/86

    Tipos Predefinidos de Iteradores

    57

  • 7/23/2019 A05 Estruturas de Dados

    58/86

    Operaes em Iteradores

    58

  • 7/23/2019 A05 Estruturas de Dados

    59/86

    Operaes em Iteradores

    Bidirecionais

    59

  • 7/23/2019 A05 Estruturas de Dados

    60/86

    Operaes em Iteradores

    60

  • 7/23/2019 A05 Estruturas de Dados

    61/86

    Algoritmos

    61

  • 7/23/2019 A05 Estruturas de Dados

    62/86

    Algoritmos, Ordenao

    62

  • 7/23/2019 A05 Estruturas de Dados

    63/86

    Algoritmos, Busca Binria

    63

  • 7/23/2019 A05 Estruturas de Dados

    64/86

    Algoritmos, Intercalao

    64

  • 7/23/2019 A05 Estruturas de Dados

    65/86

    Algoritmos, Heap

    65

  • 7/23/2019 A05 Estruturas de Dados

    66/86

    Algoritmos, Min e Max

    66

  • 7/23/2019 A05 Estruturas de Dados

    67/86

    Exemplos

    67

  • 7/23/2019 A05 Estruturas de Dados

    68/86

    Exemplos, Vector

    68

  • 7/23/2019 A05 Estruturas de Dados

    69/86

    Exemplos, Vector

    69

  • 7/23/2019 A05 Estruturas de Dados

    70/86

    Exemplos, Vector

    A classe vector genrica, logo, deve serdefinido o tipo na declarao de um objeto;

    Este continer dinmico A cada insero o continer se redimensiona

    automaticamente.

    O mtodo push_back adiciona um elemento

    ao final do vector.

    70

  • 7/23/2019 A05 Estruturas de Dados

    71/86

    Exemplos, Vector

    Outros possveis mtodos incluem: front: determina o primeiro elemento;

    back: determina o ltimo elemento;

    at: determina o elemento em uma determinadaposio, mas antes verifica se uma posiovlida.

    insert: insere um elemento em uma posioespecificada por um iterador.

    71

  • 7/23/2019 A05 Estruturas de Dados

    72/86

    Exemplos, Deque

    72

  • 7/23/2019 A05 Estruturas de Dados

    73/86

    Exemplos, Deque

    73

  • 7/23/2019 A05 Estruturas de Dados

    74/86

    Exemplos, Deque

    O mtodo push_front est disponvel apenaspara liste deque;

    O operador [] permite acesso direto aos

    elementos do deque Tambm pode ser utilizado em um vector.

    Em geral, um deque possui um desempenho

    levemente inferior em relao a um vector No entanto, mais eficiente para fazer inseres

    e remoes no incio.74

  • 7/23/2019 A05 Estruturas de Dados

    75/86

    Exemplos, Set

    75

  • 7/23/2019 A05 Estruturas de Dados

    76/86

    Exemplos, Map

    76

  • 7/23/2019 A05 Estruturas de Dados

    77/86

    Exemplos, Map

    77

  • 7/23/2019 A05 Estruturas de Dados

    78/86

    Exemplos, Map

    O continer map possui os mesmos mtodosfind(), count(), swap() e clear().

    78

  • 7/23/2019 A05 Estruturas de Dados

    79/86

    Exemplos, Multimap

    79

  • 7/23/2019 A05 Estruturas de Dados

    80/86

    Exemplos, Multimap

    O continer multimap possui os mesmosmtodos find(), count(), swap() e clear().

    80

  • 7/23/2019 A05 Estruturas de Dados

    81/86

    Exemplos, Contineres Adaptativos

    Os contineres adaptativos (pilha, fila e filade prioridades) contm praticamente osmesmos mtodos: empty: testa se o continer est vazio; size: retonar a quantidade de elementos do continer;

    top (exceto fila): acessa o elemento do topo;

    push: insere um elemento;

    pop: remove um elemento;

    front (somente fila): acessa o prximo elemento;

    back (somente fila): acessa o ltimo elemento.81

  • 7/23/2019 A05 Estruturas de Dados

    82/86

    Exemplos, Stack

    82

  • 7/23/2019 A05 Estruturas de Dados

    83/86

    Exemplos, Stack

    83

  • 7/23/2019 A05 Estruturas de Dados

    84/86

    Exemplos, Queue

    84

  • 7/23/2019 A05 Estruturas de Dados

    85/86

    Exemplos, Priority_Queue

    85

  • 7/23/2019 A05 Estruturas de Dados

    86/86

    Estruturas de dados: Pilhas,Filas, Listas, Dicionrios, Filas de

    prioridade.