A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.

Apresentações semelhantes


Apresentação em tema: "Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1."— Transcrição da apresentação:

1 Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1

2 Sumário Bizus para a Prova A1 Revisão Para a A1; Corrigir Trabalho.
Prof.: Sergio Pacheco 2 2

3 Prova em Consulta ?? E cada um o SEU !!!!!
Aquele Professor ...., Disse que ia ser fácil!!!! E cada um o SEU !!!!! Prof.: Sergio Pacheco 3 3

4 Prova em Dupla ?? Prof.: Sergio Pacheco 4 4

5 Listas Generalizadas - Definições
São estruturas muitos flexíveis, do tipo recursiva, que garantem a construção de estruturas simples as mais complexas. Uma lista generalizada L [e1,e2,e3...,en],n>0; Cada elemento pode ser um átomo ou então uma sublista caracterizando uma outra lista generalizada. O tamanho da lista é definida pelo valor de n. Se n = 0 é dita lista vazia; A lista é definida pela cabeça e1(head) e o resto outros elementos (tail). Prof.: Sergio Pacheco 5 5

6 Listas Generalizadas - Definições
b c e f Representação Lista L= [a, [b,c],d,[e, [ ],f ] ]; Prof.: Sergio Pacheco 6 6

7 Listas Generalizadas - Exercícios
Desenhe a lista generalizada correspondente : L1 = [[[1], 2], [3, [4, 5]]]; L2 = [[1, [2, 3]], [[4]], 5]; L3 = [[[1, 2], 3], [4, [5]]]; Prof.: Sergio Pacheco 7 7

8 Listas Generalizadas - Gabaritos
Desenhe a lista generalizada correspondente : L1 = [[[1], 2], [3, [4, 5]]]; Prof.: Sergio Pacheco 8 8

9 Listas Generalizadas - Gabaritos
Desenhe a lista generalizada correspondente : L2 = [[1, [2, 3]], [[4]], 5]; Prof.: Sergio Pacheco 9 9

10 Listas Generalizadas - Gabaritos
Desenhe a lista generalizada correspondente : L3 = [[[1], 2], 3], [4, [5]]]; Prof.: Sergio Pacheco 10 10

11 Ainda não !! -- Notação Polonesa ou prefixa
Notação Polonesa (no Brasil, em Portugal é Notação Polaca) ou Notação de Prefixo: É uma forma de notação para lógica, aritmética e álgebra. Não precisa de parênteses ou outros delimitadores para indicar os cálculos que devem ser realizados primeiramente; Os operadores devem preceder os dois valores numéricos associados. O matemático polonês Jan Łukasiewicz criou essa notação em torno de 1920 para simplificar a lógica nas sentenças matemáticas; Não é muito usado na matemática convencional, mas muito usado nas ciências da computação. Prof.: Sergio Pacheco 11 11

12 Notação Polonesa ou prefixa - Exemplo
Tradicional: A * B - C / D Polonesa: * A B / C D Prof.: Sergio Pacheco 12 12

13 Avaliar Expressões Existe 3 tipos de notação, que são:
Infixa = A + B - C; Prefixa = - + ABC; Posfixa = AB + C -. Refere-se a posição relativa do operador em relação aos demais operando; Na notação prefixa o operador fica antes dos operandos; Na notação posfixa o operador fica depois dos operandos. Prof.: Sergio Pacheco 13 13

14 Lê-se da esquerda para a direita
Avaliar Expressões Avalie está função abaixo: A + B * C; Como ficaria na forma prefixa e posfixa ? As operações com a precedência mais alta são convertidas em primeiro lugar; Depois que uma parte da expressão for convertida, deve ser tratada como um único operando; Operadores de mesma precedência, são avaliados da esquerda para a direita. Lê-se da esquerda para a direita Prof.: Sergio Pacheco 14 14

15 Avaliar Expressões Posfixa: A + B * C; Passo 1 A + ( B * C) Passo 2
Prof.: Sergio Pacheco 15 15

16 Avaliar Expressões Prefixa: A + B * C; Passo 1 A + ( B * C) Passo 2
Prof.: Sergio Pacheco 16 16

17 Exercícios Dadas as formas de expressões Infixa convertê-las para Posfixa: A + B * C; A + B – C; (A + B) * ( C + D); ((A + B) * C – (D - E) / (F + G)); A – B / (C * D / E). Prof.: Sergio Pacheco 17 17

18 Árvore Existe um nodo denominado Raiz;
Os demais nodos forma sub-árvores, desde que possuam nós filhos, onde cada um desses subconjuntos é uma árvore, ou seja, tirando o nó raiz os nós restantes podem ser divididos em n subconjuntos disjuntos, que são as sub-árvores, e as quais, por sua vez, também são árvores ; Um nó folha não possui filhos, e seus ponteiros são nulos. árvore == 0 então a árvore é dita vazia. Prof.: Sergio Pacheco 18 18

19 Cada nó deve ser atingido partindo pelo nó raiz.
Árvore – árvore genealógica Marcelo André Rodrigo Gustavo Márcia Viviane Daniel Ângela Marcos Pedro Cada nó deve ser atingido partindo pelo nó raiz. Prof.: Sergio Pacheco 19 19

20 Árvore - Exercícios Quais são os graus dos nodos 18 e 20?
Qual é a profundidade da árvore? Quais são os graus dos nodos 18 e 20? Qual é o nível dos nós 9, 13, 1 7 e 18 ? Prof.: Sergio Pacheco 20 20

21 Árvore - Exercícios Qual é a profundidade da árvore?
Quais são os graus dos nodos 18 e 20? R: nó 18 grau 2; nó 20 grau 0. Qual é o nível dos nós 9, 13, 1 7 e 18 ? R: nível do no 9 = 4; nível do no 13 = 3; nível do no 17 = 2; nível do no 18 = 1. Prof.: Sergio Pacheco 21 21

22 Árvore – Revisão – Altura (h)
Prof.: Sergio Pacheco 22 22

23 Árvore Binária Árvore binária se caracteriza por seus nodos terem no máximo dois filho, ou seja, é uma árvore de grau 2 (no máximo); Deve-se atentar para os conceitos de sub-arvore direita e esquerda. Nó pai e nó filhos (esquerda direita); Prof.: Sergio Pacheco 23 23

24 Árvore Binária Se A é a raiz de uma árvore binária e B é a raiz de sua subárvore direita ou esquerda, então diz-se que A é o pai de B e que B é o filho direito ou esquerdo de A. A B C D E G F H I Prof.: Sergio Pacheco 24 24

25 Árvore Binária Se A é a raiz de uma árvore binária e B é a raiz de sua subárvore direita [ou esquerda], então diz-se que A é o pai de B e que B é o filho direito [ou esquerdo] de A. A B C D E G F H I Subárvore Esquerda Subárvore direita ? Prof.: Sergio Pacheco 25 25

26 Árvore Binária Se A é a raiz de uma árvore binária e B é a raiz de sua subárvore direita ou esquerda, então diz-se que A é o pai de B e que B é o filho direito ou esquerdo de A. A B C D E G F H I Subárvore Esquerda Subárvore direita Nos Irmãos ? Prof.: Sergio Pacheco 26 26

27 Árvore Binária O nó n1 é um ancestral do nó n2 (e n2 é um descendente de n1), se n1 for o pai de n2 ou o pai de algum ancestral de n2. Prof.: Sergio Pacheco 27 27

28 Árvore Binária Mas E não é nem ancestral nem descendente de C.
Prof.: Sergio Pacheco 28 28

29 Árvore Binária B, D, E e G são descendentes esquerdos de A.
Prof.: Sergio Pacheco 29 29

30 Árvore Binária C, F, H e I são descendentes direitos de A.
Prof.: Sergio Pacheco 30 30

31 Árvore Binária Se todo nó que não é folha numa árvore binária tiver Subárvore esquerda e direita não-vazias, a árvore será considerada uma árvore estritamente binária. A B C D E F H Prof.: Sergio Pacheco 31 31

32 Árvore Binária Uma árvore binária completa de profundidade d é a árvore estritamente binária em que todas as folhas estejam no nível d, ou seja, no mesmo nível. A B C D E F H G I J L M N O P Prof.: Sergio Pacheco 32 32

33 Árvore Binária Como todas as folhas nesta árvore estão no nível d, a árvore contém 2d folhas e 2d-1 nós não folhas. A B C D E F H G I J L M N O P Prof.: Sergio Pacheco 33 33

34 Árvore Binária Uma árvore binária de profundidade (altura) d será uma árvore binária quase completa se: Cada folha na árvore estiver no nível d ou no nível d - 1. E, para cada nó com descendente direito no último nível, existe a obrigatoriedade de ter, também, descendentes esquerdos, ou seja, uma árvore binária quase completa é uma árvore em que cada nó no último nível que tem um filho a direita tem também um filho a esquerda. Por outro lado no último nível, ter um filho a esquerda não requer um nó com filho a direita. Prof.: Sergio Pacheco 34 34

35 Árvore Binária Uma árvore binária de profundidade d será uma árvore binária quase completa se: Cada folha na árvore estiver no nível d ou no nível d No último nível tendo um filho a direita, deve-se ter um filho a esquerda. Prof.: Sergio Pacheco 35 35

36 Árvore Binária – Números de nós
Uma árvore estritamente binária quase completa com n folhas tem 2n - 1 nós, assim como qualquer outra árvore estritamente binária com n folhas, onde n é o numero de folhas; Uma árvore binária quase completa com n folhas, que não seja estritamente binária, tem 2n nós, onde n é o numero de folhas. Prof.: Sergio Pacheco 36 36

37 Árvore Binária – Números de nós
Uma árvore estritamente binária com n folhas contém sempre 2n - 1 nós. Prof.: Sergio Pacheco 37 37

38 Árvore Binária – Números de nós
Uma árvore estritamente binária completa (balanceada) com altura h. Tem-se com a fórmula (2h+1 -1), o numero de nós; Os números de nós dessa árvore é descoberto pela fórmula a cima; h = 2 com isso, – 1 = 7 nós. Prof.: Sergio Pacheco 38 38

39 Classificar as árvores binárias, quanto ao tipo, e qual é a fórmula para calcular o números de nós.
Arvore estritamente binária (2 * folhas - 1); Arvore estritamente binária, quase completa (2 * folhas -1) ou 2Nivel d e 2Nivel d -1 nós não folhas; Arvore estritamente binária completa (2 h+1 - 1); Árvore binária e quase completa 2 * folhas. Prof.: Sergio Pacheco 39 39

40 Numeração da Árvore Os nós de uma árvore binária quase completa podem ser numerados: Atribui-se o número 1 à raiz; Um filho esquerdo recebe a atribuição de um número equivalente ao dobro do número atribuído a seu pai; e Um filho direito recebe a atribuição de um número equivalente ao dobro do número atribuído a seu pai mais um. Prof.: Sergio Pacheco 40 40

41 Numeração da Árvore Exemplos de numeração de árvores binárias quase completas: Prof.: Sergio Pacheco 41 41

42 Percurso pre-ordem em-ordem pós-ordem Prof.: Sergio Pacheco 42 42

43 Exercícios em-ordem - (A + B)/(C - D) * E;
pre-ordem – * / + A B – C D E pós-ordem – A B + C D - / E * Prof.: Sergio Pacheco 43 43

44 Árvore de Pesquisa Binária
Serve para guardar valores de tal forma que a recuperação dos mesmos possa ser efetuada de forma ordenada; Assim, cada nó interno de uma árvore binária de pesquisa obedece aos seguintes critérios: Todo elemento armazenado na subárvore da esquerda for menor que R (Raiz); Nenhum elemento armazenado na subárvore da direita for menor que R (Raiz); Nenhum elemento armazenado na subárvore da esquerda for maior que R (Raiz); As subárvores da esquerda e da direta também forem árvore de busca binária. * C Prof.: Sergio Pacheco 44 44

45 Árvore de Pesquisa Binária
Exemplo {50,10,15,20,0,30,70} 50 70 10 15 20 * 30 A localização do ‘ponto de inserção’ é semelhante à busca por um valor na árvore. Após a inserção do novo elemento, a árvore deve manter as propriedades de ‘árvore binária de busca’. O nó inserido é sempre uma folha. Prof.: Sergio Pacheco 45 45

46 Árvore de Pesquisa Binária
Exercícios {g,i,a,b,h,j,l,m,z, d} g m d i a b h l j z Prof.: Sergio Pacheco 46 46

47 Revisão - Inserção em árvore binária
Exemplo: 14 Prof.: Sergio Pacheco 47 47

48 Revisão - Inserção em árvore binária
Exemplo: 14 15>14 15 Prof.: Sergio Pacheco 48 48

49 Revisão - Inserção em árvore binária
Exemplo: 4<14 14 4 15 Prof.: Sergio Pacheco 49 49

50 Revisão - Inserção em árvore binária
Exemplo: 9<14 14 4 15 Prof.: Sergio Pacheco 50 50

51 Revisão - Inserção em árvore binária
Exemplo: 14 4 15 9>4 9 Prof.: Sergio Pacheco 51 51

52 Revisão - Inserção em árvore binária
Exemplo: 7<14 14 4 15 9 Prof.: Sergio Pacheco 52 52

53 Revisão - Inserção em árvore binária
Exemplo: 14 4 15 7>4 9 Prof.: Sergio Pacheco 53 53

54 Revisão - Inserção em árvore binária
Exemplo: 14 4 15 9 7<9 7 Prof.: Sergio Pacheco 54 54

55 Revisão - Inserção em árvore binária
Exemplo: 14 18>14 4 15 9 7 Prof.: Sergio Pacheco 55 55

56 Revisão - Inserção em árvore binária
Continuar: 14 4 15 9 7 Prof.: Sergio Pacheco 56 56

57 Implementação Considerando a seguinte estrutura (um nó da árvore);
struct no { int numero; struct no *esquerda; struct no *direita; } ARV; 12 P* 11 13 Prof.: Sergio Pacheco 57 57

58 Implementação Se p é um ponteiro para o nó n de uma árvore binária, e sendo x do tipo do dado do nó e q do tipo ponteiro para nó: x = Dado(p): retorna o conteúdo de n; q = Esq(p) ou Dir(p): retorna ponteiro para o filho esquerdo/direito de n; Retorna NULL se Esq ou Dir não existir. Prof.: Sergio Pacheco 58 58

59 Implementação Inserção em uma árvore binária, levando em consideração a árvore de busca binária, tem-se o seguinte algoritmo: int verifica_empty (ARV a){ return (a == NULL); } ARV insere (ARV a, int b){ ARV nova; if (verifica_empty(a)){ nova = (ARV) malloc (sizeof(NO)); nova->esq = NULL; nova->dir = NULL; nova->info = b; printf("Insercao do numero %d na AB realizada!", b); return nova; }else{ if ( b > a->info ) a->dir = insere(a->dir, b); else a->esq = insere(a->esq, b); return a; Prof.: Sergio Pacheco 59 59

60 Implementação A função recebe um ponteiro para o nó Raiz 12 P* 11
Nó Raiz - Posição memória (106537). O valor a inserir é 10 (numero) ? if ( b > a->info ){ a->dir = insere(a->dir, b); }else{ a->esq = insere(a->esq, b); } return a; Prof.: Sergio Pacheco 60 60

61 Implementação A função recebe um ponteiro para o nó Raiz 12 P* 11
Nó Raiz - Posição memória (106537). O valor a inserir é 10 (numero) ? if ( b > a->info ){ a->dir = insere(a->dir, b); }else{ a->esq = insere(a->esq, b); } return a; Prof.: Sergio Pacheco 61 61

62 Implementação A função recebe um ponteiro para o nó Raiz 12 P* 11 10
Nó Raiz - Posição memória (106537). O valor a inserir é 10 (numero) ? if ( b > a->info ){ a->dir = insere(a->dir, b); }else{ a->esq = insere(a->esq, b); } return a; 10 P* Neste caso se deparou com a condição de parada. Qual é? Prof.: Sergio Pacheco 62 62

63 Implementação Algoritmo para varrer a árvore em ordem, usa-se a recursividade como aliada: void lista_em_Ordem (ARV a){ if (! EMPTY(a) ){ lista_em_Ordem(a->esq); printf(" %d ", a->info); lista_em_Ordem(a->dir); } Se árvore vazia, fim; Percorremos a subárvore esquerda em ordem; Visitamos a raiz; Percorremos a subárvore direita em ordem; Prof.: Sergio Pacheco 63 63

64 Implementação Algoritmo para varrer a árvore em pre órdem, usa-se a recursividade como aliada: // varre a árvore binária em pre órdem void lista_pre_Ordem (ARV a){ if (! EMPTY(a) ){ printf(" %d ", a->info); lista_pre_Ordem(a->esq); lista_pre_Ordem(a->dir); } Se árvore vazia, fim; Visitamos a raiz; Percorremos a subárvore esquerda em pré-ordem; Percorremos a subárvore direita em pré-ordem. Prof.: Sergio Pacheco 64 64

65 Implementação - Fazer Algoritmo para varrer a árvore em pos órdem, usa-se a recursividade como aliada: // varre a árvore binária em pre órdem void lista_pos_Ordem (ARV a){ if (! EMPTY(a) ){ lista_pos_Ordem (a->esq); lista_pos_Ordem(a->dir); printf(" %d ", a->info); } Se árvore vazia, fim; Percorremos a subárvore esquerda em pós-ordem; Percorremos a subárvore direita em pós-ordem; e Visitamos a raiz. Prof.: Sergio Pacheco 65 65

66 Bom final de semana e até semana que vem !!!
Estudem !!!! ( Prof.: Sergio Pacheco 66 66


Carregar ppt "Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1."

Apresentações semelhantes


Anúncios Google