Algoritmos de busca e Listas encadeadas.

Propaganda
BC1424
Algoritmos e Estruturas de Dados I
Aula 07:
Algoritmos de busca e
Listas encadeadas
Prof. Jesús P. Mena-Chalco
[email protected]
1Q-2016
1
Busca de um elemento
2
Exemplo: Busca de um elemento
Considere o problema de acessar os registros de um
arquivo (cada registro tem valor único).
O problema:
Dada uma chave qualquer, localize o registro que contenha
esta chave
→ Considere o algoritmo de busca sequencial.
3
Exemplo: Busca de um elemento
4
Exemplo: Busca de um elemento
5
Exemplo: Busca de um elemento
Seja f uma função de complexidade tal que f(n) é o número
de elementos consultados.
Melhor caso:
Quando o elemento procurado é o primeiro consultado
Pior caso:
Quando o elemento procurado é o último consultado
Caso médio:
6
7
Versão
Elegante!
(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.
8
Busca de um elemento (Versão recursiva)
Custo computaciaonl
O(n)
9
Pesquisa (Busca) Binária
10
Algoritmo de Pesquisa Binária
Binary search algorithm
Binary chop
Parte do presuposto de que o vetor está ordenado e realiza
sucessivas divisões do espaço de busca:
O elemento procurado (chave) é comparado com o
elemento do meio do vetor:
Se são iguais, a busca termina com sucesso.
Caso contrário:
Se o elemento do meio vier antes da chave, então a busca continua
na metade posterior do vetor,
Caso contrário, a busca continua na metade anterior do vetor.
11
Algoritmo de Pesquisa Binária
12
Algoritmo de Pesquisa Binária
Onde esta o erro?
13
Algoritmo de Pesquisa Binária
O algoritmo parte do presuposto de termos o vetor ordenado na forma ascendente.
14
Algoritmo de Pesquisa Binária
Melhor caso:
Pior caso:
15
Algoritmo de Pesquisa Binária
Melhor caso: 1
Pior caso: log(n)
16
Algoritmo de Pesquisa Binária (versão 2)
Onde está o erro?
17
Estação Consolação: “Quatro estações” (1991). Mosaico abstrato feito de pastilhas vitrificadas por
Tomie Ohtake
18
Estação Consolação: “Quatro estações” (1991). Mosaico abstrato feito de pastilhas vitrificadas por
Tomie Ohtake
null
19
Listas encadeadas
20
Operações em vetores
Busca →
(dado um elemento)
O(n) ou O(lg n)
21
Operações em vetores
Busca →
(dado um elemento)
Remoção →
(dado um índice)
O(n) ou O(lg n)
O(n)
22
Operações em vetores
Busca →
(dado um elemento)
Remoção →
(dado um índice)
Inserção →
(dado um índice
e um elemento)
O(n) ou O(lg n)
O(n)
O(n)
23
Listas encadeadas
Uma lista encadeada é uma representação de uma
sequência de objetos na memória do computador.
As células que armazenam elementos consecutivos da
sequência não ficam necessariamente em posições
consecutivas da memória.
24
Listas encadeadas
Uma lista encadeada é uma representação de uma
sequência de objetos na memória do computador.
As células que armazenam elementos consecutivos da
sequência não ficam necessariamente em posições
consecutivas da memória.
25
Definição
Uma lista encadeada é uma sequência de registros que
armazenam células.
→ Cada célula contém um objeto de determinado tipo.
→ Cada célula contém o endereço para a célula seguinte.
3
6
7
-2
No caso da última
célula, o endereço
é NULL
26
Definição
Suporemos que os objetos armazenados nas células são do
tipo int.
A estrutura de células pode ser definida como:
3
7
27
Definição
É conveniente tratar as células como um novo tipo de dados,
que chamaremos celula:
28
29
Se p é um endereço para uma célula:
→ como acessar ao conteúdo dessa celula?
→ como obter o endereço da célula seguinte?
p
7
-2
30
Se p é um endereço para uma célula:
→ como acessar ao conteúdo dessa celula?
→ como obter o endereço da célula seguinte?
p
7
-2
31
32
Listas
O endereço de uma lista encadeada é o endereço de sua
primeira célula.
Se p é o endereço de uma lista, podemos dizer, “p é uma
lista”.
p
33
Operações em vetores
Busca →
(dado um elemento)
Remoção →
(dado um índice)
Inserção →
(dado um índice
e um elemento)
O(n) ou O(lg n)
O(n)
O(n)
34
Operações considerando listas encadeadas
Busca →
(dado um elemento)
Remoção →
(dado um ponteiro)
Inserção →
(dado um ponteiro
e um elemento)
O(n)
O(1)
O(1)
35
Listas com cabeça e sem cabeça
Uma lista encadeada pode ser vista de 2 maneiras diferentes,
dependendo do papel que sua primeira célula desempenha.
Lista com cabeça:
A primeira célula serve, apenas, para marcar o início da lista
(seu conteúdo é irrelevante).
Lista sem cabeça:
O conteúdo da primeira célula é tão relevante quanto o das
demais.
36
Para criar uma lista vazia
Lista com cabeça:
Lista sem cabeça:
37
Para criar uma lista vazia
Lista com cabeça:
“Mais fáceis
de manipular”
Lista sem cabeça:
“Mais puras”
38
Inserção de nova célula
p
p->seg
Inserção →
O(1)
(dado um ponteiro
e um elemento)
nova->seg
nova
39
Inserção de nova célula
p
p->seg
Inserção →
O(1)
(dado um ponteiro
e um elemento)
nova->seg
nova
40
Exercício 01
Elabore um programa que permita:
Criar uma lista ligada, com cabeça, contendo os seguintes
elementos
Apresente, na tela, o conteúdo de cada celula.
10
20
30
40
null
41
42
Busca em uma lista encadeada
lst
Busca →
(dado um elemento)
cabeça
x
p
x
O(n)
43
Exercício 02
Elabore uma função que permita fazer a busca de uma celula
que contenha um número inteiro x em uma lista com cabeça.
Se a célula não existir na lista, devolva NULL.
lst
cabeça
x
p
x
44
Exercício 02
Elabore uma função que permita fazer a busca de uma celula
que contenha um número inteiro x em uma lista com cabeça.
Se a célula não existir na lista, devolva NULL.
lst
cabeça
x
p
x
45
Exercício 02
Elabore uma função que permita fazer a busca de uma celula
que contenha um número inteiro x em uma lista com cabeça.
Se a célula não existir na lista, devolva NULL.
lst
cabeça
x
p
x
Veja a versão recursiva
No livro do Prof. Feofiloff
46
47
Remoção em uma lista encadeada
lst
Remoção →
(dado um ponteiro)
cabeça
p
p->seg
O(1)
48
Remoção em uma lista encadeada
lst
Remoção →
(dado um ponteiro)
cabeça
p
p->seg
O(1)
49
Remoção em uma lista encadeada
lst
Remoção →
(dado um ponteiro)
cabeça
p
p->seg
O(1)
Veja a versão BuscaERemove
No livro do Prof. Feofiloff
50
Outros tipos de listas encadeadas:
Lista circular
p
7
-3
4
A última célula
aponta para a primeira
0
8
13
51
Outros tipos de listas encadeadas:
Lista duplamente encadeada
q
p
7
9
-2
Null
75
Null
Cada célula contém o endereço
da célula anterior e o da
seguinte
52
Para o que?
FILA: “primeiro a entrar, primeiro a sair”.
First-In-First-Out (FIFO)
PILHA: “primeiro a entrar, último a sair”
First-In-Last-Out (FILO)
Árvores?
53
54
Desafio 1: +1 na P1
Implementar os 15 exercícios de listas ligadas do
HackerRank
Data: 15/Março até às 23h50.
Envio: Através do Tidia.
Arquivos:
Para cada exercício-problema deverá submeter:
O código fonte: nome do arquivo
O comprovante de aceitação (screenshot)
→ RA_nomeDoProblema.c
→ RA_nomeDoProblema.pdf
Exemplo: 10123456_solveMeFirst.c
10123456_solveMeFirst.pdf
55
Download