Você está na página 1de 95

Estrutura de dados

Recursividade; Listas lineares; Pilhas; Filas; Árvores:


binárias de busca e balanceadas; Algoritmos de ordenação

Prof. Jayme Casimiro


Listas lineares,
Pilhas, Filas

PROF. JAYME CASIMIRO

jaymebh@gmail.com
Bibliografia

SZWARCFITER, Jayme L.; MARKENZON, Lilian. Estruturas de


Dados e seus Algoritmos. 3.ed. LTC, 2010.
Listas Lineares
Listas Lineares
1 – MARINHA – QT – 2017
2 – MARINHA – QT – 2007

Questão de Concurso
3 – MARINHA – QT – 2014
4 – MARINHA – QT – 2011

Questão de Concurso
5 – MARINHA – QT – 2005

Questão de Concurso
Busca Linear – Listas não ordenadas

→ Pior Caso: n

→ Complexidade média:
Seja q a probabilidade de uma chave ser encontrada na lista.

Se q = 1, ou seja, a chave sempre poderá ser encontrada em alguma posição da lista, então o
algoritmo tem complexidade aproximada de n/2.

Se q = 1/2, ou seja, a chave poderá ser encontrada na metade das vezes que o algoritmo for
executado, então o algoritmo tem complexidade aproximada de 3n/4.

Se q = 0, ou seja, todas as buscas são sem sucesso então algoritmo tem complexidade n.
Busca Linear – Listas ordenadas

→ Pior Caso: n

→ Complexidade média:
Seja q a probabilidade de uma chave ser encontrada na lista – Complexidade é n/2 para
qualquer caso.
6 – MARINHA – QT – 2005
Busca Binária – Listas ordenadas

→ Pré-Condições: Vetor , ordenado.


→ Pior Caso: O (log n)
→ Número máximo de iterações: chão (log n) + 1
Pesquisa Binária

Exemplo:

Valor a pesquisar: 34

15
Pesquisa Binária

Compara-se a chave 34 com o elemento que se


encontra na metade do vetor. Como 34 é menor
que 44, conclui-se que 34, se existir, está na
primeira metade do vetor.

16
Pesquisa Binária

O apontador SUP passa a ocupar a posição anterior de


MEIO – 1. Recalcula-se MEIO. Realiza-se, novamente a
comparação da chave 34 com o elemento que se
encontra na posição MEIO. Como 34 é maior que 26, a
chave 34, se existir, encontra-se na porção direita do
vetor.

17
Pesquisa Binária

O apontador INF passa a ocupar a posição anterior


do MEIO +1. O Apontador MEIO é recalculado.
Compara-se a chave 34 com aquela apontada por
MEIO. Como 34 é maior que 30, atualiza-se o
apontador MIN.

18
Pesquisa Binária

O apontador MIN passa a ter o valor anterior de


MED +1. Atualiza o valor de MED. MED agora
aponta para a posição 8 do vetor que apresenta o
valor 34.

19
7 – MARINHA – QT – 2006
8 – MARINHA – QT – 2004
Notação polonesa x polonesa reserva


Notação infixa

Maneira convencional com a qual representamos expressões aritméticas

Operadores ficam entre operandos

Ambiguidades na avaliação das expressões são resolvidas por meio de sinais de
preferência, parênteses, colchetes e chaves.

Exemplo: (a+b)/c


Notação pré-fixa ou notação polonesa

Operadores antecedem operandos

Não há ambiguidades na avaliação das expressões.

Exemplo: / + a b c

Avaliação por meio de pilhas

Leia a expressão da direita para esquerda

Se o caracter lido é um operando, coloque-o no topo da pilha

Se o caracter lido é um operador,

retire o primeiro operando que está no topo da pilha – operando1

retire o segundo operando que está no topo da pilha – operando2

faça operando1 operador operando2

coloque o resultado no topo da pilha.
Notação polonesa x polonesa reserva


Notação pós-fixa ou notação polonesa reversa

Operadores aparecem após operandos

Não há ambiguidades na avaliação das expressões.

Exemplo: a b + c /

Avaliação por meio de pilhas

Leia a expressão da esquerda para direita

Se o caracter lido é um operando, coloque-o no topo da pilha

Se o caracter lido é um operador,

retire o primeiro operando que está no topo da pilha – operando2

retire o segundo operando que está no topo da pilha – operando1

faça operando1 operador operando2

coloque o resultado no topo da pilha.
9 – MARINHA – QT – 2010
10 – MARINHA – QT – 2011
11 – MARINHA – QT – 2016
12 – MARINHA – QT – 2016
Gabarito

1A, 2A, 3C, 4E, 5C, 6E, 7A, 8B, 9E, 10D, 11C, 12B

28 Questão de Concurso
Recursividade

PROF. JAYME CASIMIRO

jaymebh@gmail.com
Recursividade
Função que apresenta em que seu escopo, uma ou mais chamadas a si
mesma.
– Para que o problema não caia em loop infinito, deve-se existir uma
condição de parada.
Para toda função recursiva existe um procedimento não recursivo que
executa, exatamente, a mesma computação.
– Funções recursivas são frequentemente mais concisas;
– A solução de alguns problemas são mais intuitivas quando os mesmos
são definidos recursivamente.
– Algoritmos não recursivos geralmente são mais eficazes.
A estrutura de dados pilha é utilizada para avaliação de funções
recursivas.

30 Questão de Concurso
Recursividade

Exemplo clássico: cálculo do fatorial


– fat (0) = 1
– fat (1) = 1
– fat (2) = 2 x 1
– fat (3) = 3 x 2 x 1
– fat (n) = n x (n-1) x (n-2) x … x 1

função fat (int n) {


if (n <= 1 ) return 1;
return n * fat (n – 1);
}

31 Questão de Concurso
1 – MARINHA – QT – 2017
2 – MARINHA – QT – 2008

33 Questão de Concurso
3 – MARINHA – QT – 2009

34 Questão de Concurso
3 – MARINHA – QT – 2009

35 Questão de Concurso
4 – MARINHA – QT – 2013

36 Questão de Concurso
5 – MARINHA – QT – 2016

37 Questão de Concurso
Gabarito

1B, 2D, 3B, 4B, 5C

38 Questão de Concurso
Árvores

PROF. JAYME CASIMIRO

jaymebh@gmail.com
Árvores
1 – MARINHA – QT – 2004
Árvores notáveis
Árvores notáveis
2 – MARINHA – QT – 2016
3 – MARINHA – QT – 2006
4 – MARINHA – QT – 2005
5 – MARINHA – QT – 2007
Árvores Binárias de Busca
6 – MARINHA – QT – 2008
7 – MARINHA – QT – 2015
9 – MARINHA – QT – 2006
Árvores balanceadas
Árvores balanceadas
8 – MARINHA – QT – 2013
10 – MARINHA – QT – 2004
11 – MARINHA – QT – 2011
Percursos em Árvores
Pré-Ordem

Visite a raiz da árvore

Visite a subárvore esquerda em Pré-Ordem

Visite a subárvore direita em Pré-Ordem

Em ordem (Ordem Simétrica)



Visite a subárvore esquerda Em-Ordem

Visite a raiz da árvore

Visite a subárvore direita Em-Ordem

Pós-Ordem

Visite a subárvore esquerda em Pós-Ordem

Visite a subárvore direita em Pós-Ordem

Visite a raiz da árvore

Em Nível

A partir da raiz, visite os nós, a cada nível da árvore, da esquerda para direita.
12 – MARINHA – QT – 2005
13 – MARINHA – QT – 2011
14 – MARINHA – QT – 2013
15 – MARINHA – QT – 2016
16 – MARINHA – QT – 2010
Gabarito

1E, 2C, 3A, 4E, 5D, 6C, 7E, 8A, 9A, 10B, 11D, 12A,
13B, 14E, 15D, 16C

63 Questão de Concurso
Ordenação

PROF. JAYME CASIMIRO

jaymebh@gmail.com
Classificação - Estabilidade
Métodos estáveis
– A ordem relativa dos itens com chaves iguais é
preservada durante o processo de ordenação
Métodos instáveis
– A ordem relativa dos itens com chaves iguais não
é preservada durante o processo de ordenação

Questão de Concurso
Classificação - Estabilidade

Questão de Concurso
Classificação por troca ou
método da bolha - Bublesort
Descrição: O vetor é percorrido sequencialmente várias vezes. Cada passagem consiste
em comparar cada elemento com seu sucessor (x[i]com x[i+1]) e trocar os dois elementos,
se eles não estiverem na ordem correta. A cada iteração um elemento é colocado em sua
posição correta e final.
Executa n-1 iterações até que todo o vetor esteja ordenado.
Estabilidade: Sim

Melhor Caso Pior Caso Caso Médio

C T C T C T
O(n2) O(1) O(n2) O(n2) O(n2) O(n2)

67
Classificação por troca ou
método da bolha - Bublesort

68
Classificação por troca ou
método da bolha - Bublesort

69
Classificação por troca ou
método da bolha - Bublesort

70
Classificação por troca ou
método da bolha - Bublesort

71
Ordenação por seleção
Descrição

Na primeira iteração troca o elemento que está na primeira posição do
vetor com o elemento de menor chave do mesmo.

Na segunda iteração troca o elemento que está na segunda posição do
vetor com o segundo elemento de menor chave do mesmo.

Repita esse processo até que reste apenas um elemento no vetor.

O algoritmo não realiza trocas intermediárias no transcorrer de uma
iteração. A cada iteração apenas uma troca é realizada.

A cada iteração um elemento é colocado em sua posição final e
definitiva dentro do vetor.
Estabilidade: Não

Melhor Caso Pior Caso Caso Médio

C T C T C T
O(n2) O(n) O(n2) O(n) O(n2) O(n)

72
Ordenação por Seleção

73 Questão de Concurso
Ordenação por seleção

74
Ordenação por Inserção

Descrição

Realiza uma "segmentação" do vetor em duas porções:

Primeira porção: elementos já ordenados

Segunda porção: elementos ainda não ordenados

A cada iteração um elemento é retirado da porção não ordenada e colocada na porção
ordenada.

Inicialmente a primeira porção contém apenas um elemento e na segunda porção, os
demais.

A primeira porção vai crescendo a medida em que os elementos vão sendo retirados da
porção 2 e colocados na porção 1 em sua posição correta.

Ao final de cada iteração tem-se os elementos da porção 1 sempre ordenados, mas não
necessariamente em posição final e definitiva.
Estabilidade: Sim
Melhor Caso Pior Caso Caso Médio

C T C T C T
O(n) O(n) O(n2) O(n2) O(n2) O(n2)

75
Ordenação por Inserção

76 Questão de Concurso
Ordenação por Inserção

Questão de Concurso
Ordenação por Inserção

78 Questão de Concurso
Ordenação por Inserção

79 Questão de Concurso
Ordenação por Inserção

Questão de Concurso
Ordenação por Inserção

81 Questão de Concurso
Ordenação por Inserção

82
Shellsort
Descrição

O algoritmo de ordenação por inserção apresenta o seu pior quando o vetor se
encontra em ordem inversa.

O algoritmo de ordenação Shellsort é uma otimização do algoritmo de Inserção.
Nele são efetuadas trocas entre itens distantes em h posições:

Isso “joga” itens de menor chave para as posições iniciais do vetor

“adiantando” a inserção de itens de menor chave na posição correta

diminuindo o número de trocas e movimentações.

O algoritmo escolhe uma sequencia para h.

Diferentes autores utilizam diferentes algoritmos para gerar a sequencia h.

Todos eles utilizam como passo base h = 1, que é o algoritmo de ordenação por
Inserção..
Estabilidade: Não

Complexidade empírica
O(n log n )

83
Heapsort

Otimização do algoritmo de ordenação por seleção.

Estrutura os dados por meio de uma fila de prioridades.

Fila de prioridades por sua vez podem ser implementada por meio de um heap: c[i] >= c[2i] e c[i] >=
c[2i+1]
Sua estrutura básica é:

Constrói um heap com as chaves

Troca o elemento que se encontra na posição 1 com o que está na posição n

Refaz o heap

Repete os passos anteriores com os n-1 itens restantes, depois com n-2 itens e assim
sucessivamente até se ter o vetor completamente ordenado.

Complexidade em qualquer caso


O(n log n )
Estabilidade: Não

84
Mergesort

Utiliza o paradigma dividir para conquistar

Dado um vetor com n posições

Divida-o em dois subvetores de tamanho n/2

Repita o passo anterior até que cada subvetor tenha apenas 1 elemento

A partir dos subvetores obtidos una-os, ordenadamente, até que se obtenha
o vetor com tamanho original
Estabilidade: Sim

Complexidade em qualquer caso


O(n log n )

85
MergeSort

Exemplo

86 Questão de Concurso
QuickSort

O quicksort é um algoritmo que funciona usando o paradigma de dividir e
conquistar, usando uma rotina de particionamento que divide o vetor de
estruturas em dois pedaços em torno de um pivô.

O pedaço da esquerda só contém elementos com chaves
menores ou iguais que o elemento pivô e o pedaço da direita, só
elementos com chaves maiores que o pivô. O algoritmo procede,
então, para o subproblema de ordenar cada um dos pedaços. A
cada iteração o pivô está em sua posição definitiva e final.

Pior caso: O(n2) → o pivô é escolhido como o valor máximo ou
mínimo em cada iteração do algoritmo. Dessa forma o pivô separa
o vetor ou subvetor em uma porção com zero elementos e outra
com o restante dos elementos do vetor ou subvetor.

Melhor Caso: O (n log n) → O pivô divide o vetor em dois
subvetores de igual tamanho.
Estabilidade: Não
Melhor Pior Caso
Caso Caso Médio
O(n log n) O(n2) O(n log n)
87
Quicksort

88
1 – MARINHA – QT – 2007
2 – MARINHA – QT – 2008
3 – MARINHA – QT – 2009
4 – MARINHA – QT – 2012
5 – MARINHA – QT – 2012
6 – MARINHA – QT – 2014
Gabarito

1B, 2B, 3A, 4C, 5D, 6B

95 Questão de Concurso

Você também pode gostar