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