Prof. Alessandro Gonçalves UNDB ESTRUTURAS DE DADOS Prof. Alessandro Gonçalves Alessandro.inovacao@gmail.com 1 1 1
Lista encadeada circular Uma lista normal mas o último elemento aponta para o primeiro 5 1 3 Aplicação: loop infinito com elementos sendo adicionados a todo momento Ex: lista de processamento de cartões de crédito (e-commerce), transmissão de dados via rede... 2 2 2
Lista duplamente encadeada circular Uma lista normal mas o último elemento aponta para o primeiro Une a maleabilidade da lista duplamente encadeada com outra facilidade: é circular também. A de mais difícil implementação 5 1 3 3 3 3
Recursividade Cálculo de fatorial Progressão geométrica Quando uma função A chama a si própria (recursão direta) OU Quando uma função A chama B e esta chama A (recursão indireta) Exemplos ? Cálculo de fatorial Progressão geométrica Série de Fibonacci 4 4 4
Recursividade Características: Algoritmos mais elegantes Pode exigir muito poder computacional Muito utilizada por programadores profissionais 5 5 5
Recursividade Implantação de recursividade com Fatorial Como seria o algoritmo ? 6 6 6
Recursividade Implemente um algoritmo recursivo para mostrar todos os números pares de 0 até n. 7
Recursividade Implemente um programa recursivo para calcular o mdc de dois números. CÁLCULO DO M.D.C. PELO PROCESSO DAS DIVISÕES SUCESSIVAS Nesse processo efetuamos várias divisões até chegar a uma divisão exata. O divisor desta divisão é o m.d.c. Acompanhe o cálculo do m.d.c.(48,30). Regra prática: 1º) dividimos o número maior pelo número menor; 48 / 30 = 1 (com resto 18) 2º) dividimos o divisor 30, que é divisor da divisão anterior, por 18, que é o resto da divisão anterior, e assim sucessivamente; 30 / 18 = 1 (com resto 12) 18 / 12 = 1 (com resto 6) 12 / 6 = 2 (com resto zero - divisão exata) 3º) O divisor da divisão exata é 6. Então m.d.c.(48,30) = 6. 8
Recursividade Escreva uma função recursiva que recebe como parâmetros um número real X e um inteiro N e retorna o valor de XN. 9
Recursividade Série de Fibonacci 0,1,1,2,3,5,8,13,21... 10
Série de Fibonacci – curiosidades Recursividade Série de Fibonacci – curiosidades Yupana (instrumento de contagem Inca) Nautilus – concha segue a série Outros exemplos: disposição de folhas em plantas, dentição humana... 11
Ordenação dos dados Por que classificar os dados ? Como classificar os dados ? 12
Bubble Sort – Ordenação bolha Lembra a fervura de água, com bolhas maiores para cima Compara o 1º elemento com o 2º, 3º... último e troca se for o caso Compara o 2º elemento com o 3º, 4º... último e troca se for o caso Exemplo em C 13
Bubble Sort – Ordenação bolha Desempenho ? Executa aproximadamente n2 iterações, sempre Não é muito eficiente 14
Ordenação por seleção Descobre o menor elemento da lista e troca com o 1º. A partir do 2º elemento, descobre o menor elemento e troca com este. Exemplo em C 15
Ordenação por seleção Desempenho ? Executa aproximadamente n2 iterações, sempre Não é muito eficiente 16
Ordenação por inserção A principal característica deste método consiste em ordenar um conjunto de elementos, utilizando um subconjunto ordenado localizado em seu inicio, e em cada iteração, acrescentamos a este subconjunto mais um elemento, até que atingimos o último elemento do conjunto assim com que ele se torne ordenado. Exemplo em C 17
Ordenação por inserção Exemplo em C 18
Ordenação por inserção Desempenho ? Executa aproximadamente entre n a n2 iterações É mais eficiente que os anteriores 19
Ordenação por Shell Sort Criado por Donald Shell, em 1959 Ele separa o arrays em subarrays, ordena estes a partir do método de inserção direta. Existe a figura do salto ou distância (h), não comparando itens de dados adjacentes, mas sim com distância “h” Obtido com uma fórmula, chamada número de Knuth. 20
Ordenação por Shell Sort 1 2 3 4 5 Passo Compara 3 com 1 (h=2) Troca 1 com 3 Compara 3 com 5 (h=2) Compara 1 com 5 O segmento com h=2 está ordenado. Divide-se h por 3. Com h=1, é ordenação por inserção. Compara 1 com 2. Depois (1-2). Depois (1-2-3) com 4 ... 24 32 11 60 3 1 2 3 4 5 11 32 24 60 3 1 2 3 4 5 3 32 11 60 24 1 2 3 4 5 3 11 32 60 24
Video “ordenação por shell sort”
Ordenação por shell sort Desempenho ? É mais eficiente que os anteriores Entre n*(log n)2) e n1.5 23
Ordenação por Quick Sort Criado por C.A.R., em 1960. Modelo de “dividir para conquistar” Divisão: divide-se os dados de entrada em conjuntos disjuntos (separados); Recursão: soluciona-se os problemas associados aos subconjuntos recursivamente; Conquista: obtém-se as soluções dos subproblemas e junta-se as mesmas em uma única solução. 24
Ordenação por Quick Sort 1 – escolhe-se um pivôt, dividindo-se à esquerda o grupo de elementos MENORES e à direita o grupo de elementos MAIORES. 2 – Faça o passo 1 recursivamente em cada sugrupo, até que haja apenas 1 elemento em cada. 3 – junte os grupos, de forma ordenada 25
Ordenação por Quick Sort (b) Fase de Conquista (a) Fase de Divisão 26
Ordenação por Quick Sort Desempenho ? Como o próprio nome diz, é mais eficiente que os anteriores nas mais diversas situações (lista já ordenada, lista invertida, lista misturada...) devendo ser utilizado para ganhos de performance 27
Ordenação por Merge Sort Também usa a estratégia dividir para conquistar 1. Divida a lista por 2, gerando 2 novos vetores a cada passo 2. Recursivamente, faça o passo 1, até chegar a um elemento por vetor 3. Reconstrua cada vetor, de forma ordenada agrupando com o vetor acima 28
Ordenação por Merge Sort Divisão 2 7 4 1 9 6 2 7 4 1 9 6 1 9 6 2 7 4 2 7 4 1 9 6 29
Ordenação por Merge Sort Conquista 1 2 4 6 7 9 2 4 7 1 6 9 1 9 6 2 7 4 2 7 4 1 9 6 30
Hash A partir de uma grande quantidade de informações, gera uma pequena informação A ideia é gerar um número único. A função é de uma via só, sem volta. Aplicações: ordenação, bancos de dados (índices), criptografia. 31
Hash Considere a função definida abaixo Considere o vetor 1, se valor <20 F(valor) = 2, se 20 >= valor < 40 3, se valor >= 40 Considere o vetor (24, 32, 11, 60, 3) Aplicando o “hash” acima, gero uma lista ordenada 1 2 3 3 11 * 24 32 * 60 * 32
Hash Alguns algoritmos de criptografia famosos, baseados em hash: MD5 – Multi Digest 5 – Desenvolvido pela RSA Security. Usado em P2P e criptografia em Bancos de dados SHA1 – Security Hash Algorithm, desenvolvido pela NSA Whirlpool1 – Desenvolvida por Paulo Barreto e Vincent Rijmen. Adotada pelo ISO 10118-3 33
Hash MD5 (“UNDB”) b32a9969a791e4547296cc8391ca6587 MD5 (“UNDB.”) 531b56f5e2d7e1bc98d3f7790e6691ab sha1 (“UNDB”) 378e4d5f0c0a2b019ba407ef0d4aaac3c0447e48 sha1 (“UNDB.”) aef0529209015c45c90606f710ad8c1ae258135b 34
Prof. Alessandro Gonçalves UNDB ESTRUTURAS DE DADOS Prof. Alessandro Gonçalves Alessandro.inovacao@gmail.com 35 35 35