Prof. Alessandro Gonçalves

Slides:



Advertisements
Apresentações semelhantes
Marco Antonio Montebello Júnior
Advertisements

Solved Exercises 1. Finding the Peak. Let A= a1,…,an be a sequence of n numbers with the following property: there is p in {1,…,n} for which (i) the.
Estrutura de Dados e Algoritmos e Programação e Computadores II
1 Complexidade de Algoritmos Complexidade de pior caso Complexidade de melhor caso de uso bem menos freqüente em algumas situações específicas Complexidade.
Árvores.
1 MergeSort Seja uma lista A de n elementos. O algoritmo consiste das seguintes fases Dividir A em 2 sub-listas de tamanho n/2 Conquistar: ordenar cada.

David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
Medida do Tempo de Execução de um Programa
HeapSort Filas de Prioridade – Heap
Pesquisa em Memória Primária – Árvores de Busca
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária – Árvores de Busca
Medida do Tempo de Execução de um Programa
Pesquisa em Memória Primária
SEMINÁRIO DE ALGORITMOS
Aplicações de Pilhas Pilhas são fundamentais em diversas áreas da computação: Sistemas Operacionais Arquitetura de Computadores Compiladores Entre outros.
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
A FAST APRIORI implementation
Classificação e Pesquisa de Dados
Indexação e Hashing Muitas consultas referenciam apenas uma pequena porção dos registros em uma tabela. Portanto necessitamos ser capaz de localizar estes.
Métodos de Classificação por Seleção: HeapSort
Análise Léxica Supondo o trecho de programa abaixo:
Crescimento de Funções
Robson Godoi / Sandra Siebra
Árvore Binária de Busca
Buscas em Grafos Prof. André Renato 1º Semestre/2012
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Informática Teórica Engenharia da Computação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 6 Vetores e Matrizes
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Pesquisa em Memória Primária
Árvores binárias de pesquisa com balanceamento
Algorítmos e estrutura de dados III
Aula 03 – BCC202 Análise de Algoritmos (Parte 1) Túlio Toffolo www
Aula T06 – BCC202 Análise de Algoritmos (Parte 4) Túlio Toffolo
Estruturas de Dados, Algoritmos e Complexidade
Árvores Balanceadas Liliane Rose Benning Salgado.
Campus de Caraguatatuba Licenciatura em Matemática Semestre de 2013
Árvore Binária de Busca
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
– Aula 20 Adaptado por Reinaldo Fortes para o curso de
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Prof. Hilton Cardoso Marins Junior
Como analisar um algoritmo

Complexidade de Computação Katia Guimarães. Avaliando a Qualidade de um Algoritmo É preciso ter bem definido –O que é dado de entrada e –O que é esperado.
Exercícios Análise de algoritmos & Ordenação
Exercícios de Fluxo em Redes
Analise de Algoritmos e Notação Assintótica
AVL Árvores Equilibradas Sumário AVL Splay B Vermelho-Preto AA e BB Multidimensionais quaternárias k-d [Pesquisa Lexicográfica tries multivia tries binárias.
Introdução a Árvores e Árvores Binárias
Estruturas de Dados, Algoritmos e Complexidade Katia Guimarães.
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Aula 3 - Listas
Árvores Balanceadas (AVL)
Métodos de Pesquisa: Sequencial e Binária
Árvores e Árvores Binárias
BANCO DE DADOS II Árvore de Dados. FATEC - GUARATINGUETÁ Professor: Eduardo Barbosa Adiel Lemos Ana Renata Bruno Michael Jéssica Fernanda Layla Monique.
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Técnicas de Análise de Algoritmos Cristiano Arbex Valle Vinicius Fernandes dos Santos
Comportamento Assintótico
Transcrição da apresentação:

Prof. Alessandro Gonçalves UNDB ESTRUTURAS DE DADOS Prof. Alessandro Gonçalves Alessandro.inovacao@gmail.com 1 1 1

Complexidade de Algoritmos Conceituação Complexidade no pior caso, melhor caso e caso médio Exemplos 2 2 2

Complexidade de Algoritmos Avaliação de tempo na história: 1) Algoritmos primitivos 2) A avaliação do tempo na matemática. Ex: tábuas de Log 3) O aparecimento do computador O tempo como fator primordial 3 3 3

Complexidade de Algoritmos Avaliação de espaço na história: 1) No início era fundamental Ex: quanto de memória tenho ? Eniac: 200 bits 2) Hoje já não é tão importante Era da fartura 4 4 4

Complexidade de Algoritmos Dois métodos para avaliar o tempo: Empírico e Analítico Empírico 1) Medição do tempo de execução do algoritmo 2) Dependentes do hardware (memória, computador...) e software (compilador, linguagem...) 3) Permitem tratamento estatístico 4) Mais simples de ser implementado 5 5 5

Complexidade de Algoritmos Dois métodos para avaliar o tempo: Empírico e Analítico Analítico 1) Expressões matemáticas para determinar o tempo 2) Independentes do hardware (memória, computador...) e software (compilador, linguagem...) 3) Permitem tratamento estatístico 4) Mais complexo de ser implantado 6 6 6

Complexidade de Algoritmos Implantação do método Analítico 1) Considera-se grande quantidade de dados 2) Valores assintóticos 3) Desconsiderar constantes aditivas e multiplicativas Ex: 2*n² + 10x + 5 é equivalente a n² + x. As duas expressões acima são da ordem n² 4) Baseado em uma variável independente, na entrada do algoritmo(caixa preta) 5) Mais complexo de ser implantado 7 7 7

Complexidade de Algoritmos Definindo uma expressão matemática 1) Divide-se o algoritmo em passos 2) Cada passo é composto de número fixo de operações básicas 3) A operação básica de maior frequência é conhecida como “operação dominante”. 4) O número de passos do algoritmo é a frequência da operação dominante. 5) Em algoritmos de ordenação, geralmente a operação dominante é a comparação. 8 8 8

Complexidade de Algoritmos Exemplo em C – inverte.c Resumo: void inverte() { int x, temp; for (x = 0; x<5; x++) { temp = vet[x]; vet[x] = vet[9-x]; vet[9-x] = temp; } Cada passo corresponde a troca entre dois elementos Variável independente: número de elementos (n) Número de passos: número de execuções do bloco 9 9 9

Soma de matrizes (para a turma resolver) Complexidade de Algoritmos Soma de matrizes (para a turma resolver) 2 3 5 0 0 2 2 3 7 0 1 2 3 -1 4 3 0 6 3 0 1 -4 1 0 -1 1 1 Algoritmo: Variável independente ? Número de passos ? Para i = 1 até n faça Para j = 1 até n faça Cij = Aij + Bij Fim Para J Fim Para i Número de linhas da matriz N² 10 10 10

Multiplicação de matrizes (para a turma resolver) Complexidade de Algoritmos Multiplicação de matrizes (para a turma resolver) 5 9 2 7 69 47 6 8 4 3 70 55 5 2 Algoritmo: Variável independente ? Número de passos ? Para i = 1 até n faça Para j = 1 até n faça Dij = 0 Para k = 1 até n faça Dij = Dij + Aik * Bkj ... Número de colunas da matriz A N³ 11 11 11

Complexidade de Algoritmos Definindo uma expressão matemática Nos exemplos anteriores, o número de passos dependia sempre do tamanho da entrada, não do seu valor. Mas isso nem sempre ocorre. Em geral, o número de passos depende do valor da entrada. Considere: Duas matrizes A e B e uma variável X. Se X = 0, faça C = A+B Se X <>0, faça D = A.B Número de passos ? N² ou N³ 12 12 12

Complexidade de Algoritmos Definindo uma expressão matemática para Complexidade de Tempo Ideal seria sempre conhecer o número de passos, conforme a entrada Difícil de ser atingido na prática Alternativa: determinar o número de passos para entradas específicas e representativas 13 13 13

Complexidade de Algoritmos Determinando entradas representativas A = Algoritmo E = {E1, E2..., En} T1 = número de passos de A, quando a entrada for Ei 14 14 14

Complexidade de Algoritmos Complexidade do Pior Caso Número de passos da entrada mais desfavorável A mais utilizada Quase sempre é relevante(Ex: aplicações de segurança) Quando falo que um algoritmo tem uma Complexidade “X”, estamos falando da Complexidade do Pior Caso Complexidade do Melhor Caso Número de passos da entrada mais favorável Pouco utilizada Pouco relevante Aplicações específicas Complexidade do Caso Médio Número de passos da entrada média Relevante Tratamento matemático e geralmente, complexo pois depende da probabilidade 15 15 15

Complexidade de Algoritmos q = 0.5 ou 50% 16 16 16

Complexidade de Algoritmos Exercícios (20 minutos) 1) Calcule a complexidade do algoritmo para calcular n! 2) Sejam duas matrizes: (aij) e (bkj) tais que: 1 < i < n; 1 <= k<= n; 1<= j <= m, escrever os algoritmos para fazer C = A + B D = A * B Determinar as complexidades 17 17 17

Complexidade de Algoritmos Solução dos exercícios Soma := 0 Para i = n até 1 passo -2 faça Soma := Soma + n*(n-1); Fim Para Complexidade: n 18 18 18

Complexidade de Algoritmos Solução dos exercícios Algoritmo: soma de matrizes Para i := 1 até n faça Para j := 1 até p faça Cij := aij + bij Complexidade = n.p 19 19 19

Complexidade de Algoritmos Solução dos exercícios Algoritmo: multiplicação de matrizes Para i := 1 até n faça (linhas da matriz A) Para j := 1 até p faça (colunas da matriz B) Dij = 0 Para k := 1 até p faça Dij := Dij + aik * bkj Complexidade = n.p.k 20 20 20

Complexidade de Algoritmos Análise de algoritmo Demo (A,n) { Entrada: um array A[] com n elementos inteiros Saída: o maior elemento em A[]; Int c; C = A[0]; For (i = 1; i < n; i ++) { If (c < A[i]) c = A[i]; } Return c; Quantas operações primitivas são necessárias para a execução ? 21 21 21

Complexidade de Algoritmos Análise de algoritmo 1) inicializar a variável array como A[0]. Duas operações primitivas 2) o contador i é inicializado com o valor 1 no início do laço for. Corresponde a uma operação primitiva 3) a condição i < n é verificada antes de entrar no laço for. Uma operação primitiva de comparar dois números; 4) o contador i é inicializado em 0 e incrementado em 1 no fim de cada iteração do laço, a comparação i < n é feita n vezes, assim a condição contribui com n unidades para a contagem 22 22 22

Complexidade de Algoritmos Análise de algoritmo 5) o laço for é executado n-1 vezes. A cada iteração, A[i] é comparado com c (duas operações primitivas indexação e atribuição). O contador i é incrementado. Duas operações primitivas, soma e atribuição. Assim, a cada iteração do laço quatro ou seis operações são realizadas, dependendo se A[i] < c ou A[i] > c. Desta forma, o corpo do laço contribui para a contagem variando de 4(n-1) ou 6(n-1) 6) retorna o valor da variável que corresponde a uma operação primitiva e é executada apenas uma vez. Resumo Melhor caso: 2 + 1 + n + 4(n-1) + 1 = 5n Pior caso: 2 + 1 + n + 6(n-1) + 1 = 7n - 2 23 23 23

Complexidade de Algoritmos Notação O (Omicron) Refere-se ao pior caso Melhor caso: 2 + 1 + n + 4(n-1) + 1 = 5n => n Pior caso: 2 + 1 + n + 6(n-1) + 1 = 7n – 2 => n O(n) = f(x) = 7n -2 Para calcularmos O, consideramos sempre o valor mais relevante, em termos de “n” ou outras variáveis envolvidas 24 24 24

Complexidade de Algoritmos Exercícios 1) n³ -1 2) n² + 2.log n n n 3) 3.n + 5.2 n n - 1 4) (n-1) + n n n² 5) 5.3 + 4.2 6) 6.347.562 7 n 7) 5.n + 3.2 + n! 8) 3n + 7m + 2 9) 5n² + 9m + 4 10) 3n + 5m + n.m 25 25 25

Complexidade de Algoritmos Respostas 1) O(n³) 2) O(n²) n 3) O(n) 4) O(n) n² 5) O(2) 6) O(1) 7) O(n!) 8) O(n + m) 9) O(n² + m) 10) O(n.m) 26 26 26

Complexidade de Algoritmos Escalas N log2n n n.log2n n² n³ 2n n! 1 2 10 3.32 33 100 1000 1024 3x10 6 6.64 664 10.000 1.000.000 1,28 x 1030 3x10157 9.97 9970 109 1,072 x 1031 3x102567 n! 2n n² n.log2n O(n) n log2n n 27 27 27

Complexidade de Algoritmos Propriedades da notação O O(g + h) = O(g) + O(h) O(g . h) = O(g) . O(h) O(k . g) = k . O(g) = O(g) 28 28 28

Programa Torre de Hanoi em C Complexidade de Algoritmos Video Torre de Hanoi Programa Torre de Hanoi em C Para solucionar um Hanói de 64 discos, são necessários 18.446.744.073.709.551.615 movimentos 29 29 29

Complexidade de Algoritmos Propriedades da notação O Cota superior – menor complexidade de um algoritmo conhecido Nos exemplos anteriores, a complexidade de multiplicação de matrizes era O(n³) O algoritmo de Strassen diminuiu a complexidade para O(n2,807) O algoritmo de Coppersmith e Winograd melhoraram para O (n2,376) O(n³) O(n2,807) O(n³) O (n2,376) O(n2,807) O(n³) 30 30 30

Complexidade de Algoritmos Notação Ɵ (Teta) Refere-se ao caso médio Este é o caso que é o mais difícil de ser determinado, pois, necessita de análise estatística e em conseqüência de muitos testes, contudo é muito utilizado, pois é o que representa mais corretamente a complexidade do algoritmo. Exemplo: Procurar uma palavra em um dicionário. Pode-se iniciar a busca de uma palavra na metade do dicionário. Imediatamente se sabe se foi encontrada a palavra ou, no caso contrário, em qual das duas metades deve se repetir o processo (é um processo recursivo) até se chegar ao resultado. Em cada busca (ou sub-busca), o problema (as páginas em que a palavra pode estar) vão se reduzindo à metade, o que corresponde com a função logarítmica. Este procedimento de busca (conhecido como busca binária) em uma estrutura ordenada têm complexidade logarítmica. Ɵ(log2n) 31 31 31

Complexidade de Algoritmos Notação Ω (ômega) Refere-se ao melhor caso Pouco utilizado porque sempre precisamos saber como o algoritmo se comporta em situações difíceis (pior caso). Exemplo: Exemplo 1: Em uma lista telefônica queremos encontrar um número, assume-se que a complexidade do caso melhor é Ω (1), pois está pressupondo-se o número desejado está na primeira posição. Exemplo 2: Extrair qualquer elemento de um vetor. A indexação em um vetor ou array, leva o mesmo tempo seja qual for o índice que se queira buscar. Portanto é uma operação de complexidade constante Ω (1). 32 32 32

Complexidade de Algoritmos Conclusão Nas complexidades algorítmicas temos: Ω( ) <= θ( ) <= O() Algoritmos ótimos podem ser obtidos de duas formas: 1) melhoramento interno do código OU 2) comparação dos algoritmos entre si, escolhendo o de menor complexidade. exemplo 33 33 33

Complexidade de Algoritmos 34 34 34

Árvores Definição São estruturas de dados com uma relação hierárquica entre os dados que a compõem. Muito utilizadas em banco de dados, organização de dados para a pesquisa... 35 35 35

Árvores A Raiz B C D Nós E F G H I J Folhas Nó(nodo) Grau Nível A 3 B B 1 C 2 36 36 36

Árvores A Raiz B C C D Nós E F F G G H I J Folhas SUBÁRVORE 37 37 37

Árvore BINÁRIA Para ser binária: cada nó <= 2 graus (filhos) Raiz B C Nós D E F Folhas Para ser binária: cada nó <= 2 graus (filhos) Se a árvore binária tiver m nós no nível l, terá no máximo 2m nós no nível l+1 altura – tamanho do percurso mais distante da raiz até a folha (nível máximo da folha). Uma árvore com somente um nó, h=1 38 38 38

Árvore BINÁRIA Para ser binária: cada nó <= 2 graus (filhos) Raiz B C Nós D E F Folhas Para ser binária: cada nó <= 2 graus (filhos) 1A; 1.1B; 1.1.1D; 1.1.2E; 1.2 C; 1.2.1 F OU (A(B(D)(E))(C(F))) 39 39 39

Árvore (que NÃO É BINÁRIA) Exercício 1 A Raiz B C D Nós E F G H Folhas Represente a árvore acima na notação 1, 1.1, 1.2... 40 40 40

Árvore BINÁRIA Desenhe a árvore binária representada por: Exercício 2 Desenhe a árvore binária representada por: 1A; 1.1B; 1.1.1E; 1.1.1.1F A Arvore DEGENERADA hmax = nós Árvore de altura máxima B E F 41 41 41

Árvore BINÁRIA - tipos Estritamente binária – todo nó que não é folha tem uma subárvore esquerda e direita não vazias (todo nó tem 0 ou 2 filhos) Binária completa – se N é um nó com subárvores vazias, estas devem estar no último ou penúltimo nível Binária cheia – se um nó tem subárvores vazias, este nó está no último nível 42 42 42

Árvore BINÁRIA - tipos Exercícios – quais os tipos das árvores abaixo ? Estritamente binária + binária completa + binária cheia Estritamente binária + binária completa 43 43 43

Árvore BINÁRIA de busca (ABB) Árvores ordenadas, facilitando a busca de dados. Os elementos menores que o nó estão à esquerda. Os maiores ou iguais, à direita EX: (M, C, A, A, C, V, P , M) M C V A C P A M 44 44 44

Árvore BINÁRIA de busca (ABB) Características 1) Todos os itens da subárvore esquerda são menores do que a raiz 2) Todos os itens da subárvore direita são maiores ou iguais do que a raiz 3) Cada subárvore é também uma árvore binária 45 45 45

Árvore BINÁRIA de busca (ABB) Exercício A partir da sequência, construa a sua ABB: (14,15,4,9,7,18,3,5,16,14,20,17,9,14,5) 14 4 15 3 9 14 18 x 7 9 16 20 5 17 4 5 46 46 46

Árvore BINÁRIA de busca (ABB) Operações básicas 1) Criar árvore 2) Inserção de nó 3) remoção 4) Caminhamento 5) Finalizar (destruir) árvore 47 47 47

Árvore BINÁRIA de busca (ABB) Operações básicas - inserção Antes de implementar deve-se perguntar: itens duplicados são aceitos ? Depois, através de vetores ou lista encadeada, percorre-se a estrutura. Se o nó a ser inserido for menor que o nó atual, procura na sua subárvore esquerda. Se for maior (ou igual), procura na subárvore da direita. Faça isto iterativamente. Ao achar uma subárvore vazia, inclua nesta posição. 48 48 48

Árvore BINÁRIA de busca (ABB) Operações básicas - remoção É uma operação mais complexa porque existem mais considerações a ser observadas. Na raiz, o nó a ser procurado é menor que a raiz ? Procure na subárvore da esquerda. Se não, procure na subárvore da direita. Ao encontrar, irá remover considerando: 1) O nó não possui filhos. Remova-o e o nó que apontava para ele apontará para vazio (null) 2) O nó possui filhos. O nó anterior passa a apontar para o(s) nós que o nó removido apontava. Alternativa: no lugar da remoção física, considerar o nó como inativo, marcando este status nele. Ao buscarmos, desprezamos os nós inativos. Caso seja acrescentado novamente, basta mudar seu status 49 49 49

Árvore BINÁRIA de busca (ABB) Operações básicas – caminhamento em árvore binária de busca É a forma em que se percorre os nós. Podem variar, dependendo do propósito da árvore. Gera uma lista com os nós resultantes. Existem quatro caminhamentos: 1) Prefixado – visita a raiz, percorre a subárvore da esquerda, percorre a subárvore da direita e assim sucessivamente para todas as subárvores da árvore (profundidade) 2) Central ou infixa – percorre a subárvore da esquerda completa, a partir das folhas , visita raiz, percorre a subárvore da direita e continua enquanto houver subárvores para leitura 3) Pós-ordem ou pós-fixa: percorre a subárvore da esquerda, percorre a subárvore da direita e por último as partir das folhas, visita a raiz 4) Por nível: percorre todos os nós de um nível, da esquerda para a direita 50 50 50

Árvore BINÁRIA de busca (ABB) Caminhamentos A Prefixada: A, B, G, C, D, E, F Central: G, B, A, E, F, D, C B Pós-fixada: G, F, E, D, C, B, A Nível: A, B, G, C, D, E F G C D E F 51 51 51

Árvore BINÁRIA de busca (ABB) Aplicação da pós-fixada: Em calculadoras 5 + (10*2) Primeiramnente, todos os operandos Depois, os operadores: 5 10 2 * + + 5 * 10 2 52 52 52

Árvore binária balanceada AVL Proposta na década de 60 pelos russo G.M. Adelson-Velskki e E.M.Landis Uma árvore AVL é uma árvore binária de busca (ABB) construída de tal modo que a altura (h) de sua subárvore direita difere da altura da subárvore esquerda de no máximo 1 B A árvore binária ao lado está balanceada ? G C D E 53 53 53

Árvore binária balanceada AVL Exercício: a) se adicionar o item “9”, a árvore fica balanceada ? b) se adicionar o item”5”, a árvore fica balanceada ? Sim Não 54 54 54

Árvore binária balanceada AVL A operação de inserção em uma árvore AVL se torna mais complicada do que em uma árvore binária não balanceada Dada uma raiz r com subárvores L (left) e R (right), e supondo que a inserção deve ser feita na sub-árvore da esquerda. Ex: item “5” Podemos distriguir 3 casos: Se hL = hR, então L e R ficam com alturas diferentes mas continuam balanceadas. Se hL < hR, então L e R ficam com alturas iguais e balanceamento foi melhorado. Se hL > hR, então L fica ainda maior e balanceamento foi violado. 55 55 55

Prof. Alessandro Gonçalves UNDB ESTRUTURAS DE DADOS Prof. Alessandro Gonçalves Alessandro.inovacao@gmail.com 56 56 56