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

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

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

Apresentações semelhantes


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

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

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

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

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

5 Prof.: Sergio Pacheco Listas Generalizadas - Definições 5 São estruturas muitos flexíveis, do tipo recursiva, que garantem a construção de estruturas simples as mais complexas. Uma lista generalizada L [e 1,e 2,e 3...,e n ],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 e 1 (head) e o resto outros elementos (tail).

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

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

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

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

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

11 Prof.: Sergio Pacheco Ainda não !! -- Notação Polonesa ou prefixa 11 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.

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

13 Prof.: Sergio Pacheco Avaliar Expressões 13 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.

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

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

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

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

18 Prof.: Sergio Pacheco Árvore 18 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.

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

20 Prof.: Sergio Pacheco Árvore - Exercícios 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 ?

21 Prof.: Sergio Pacheco Árvore - Exercícios 21 Qual é a profundidade da árvore? R: 4 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.

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

23 Prof.: Sergio Pacheco Árvore Binária 23 Á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);

24 Prof.: Sergio Pacheco Árvore Binária 24 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

25 Prof.: Sergio Pacheco Árvore Binária 25 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 ?

26 Prof.: Sergio Pacheco Árvore Binária 26 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

27 Prof.: Sergio Pacheco Árvore Binária 27 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.

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

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

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

31 Prof.: Sergio Pacheco Árvore Binária 31 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

32 Prof.: Sergio Pacheco Árvore Binária 32 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 LMNOP

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

34 Prof.: Sergio Pacheco Árvore Binária 34 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.

35 Prof.: Sergio Pacheco Árvore Binária 35 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 - 1. No último nível tendo um filho a direita, deve-se ter um filho a esquerda.

36 Prof.: Sergio Pacheco Árvore Binária – Números de nós 36 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.

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

38 Prof.: Sergio Pacheco Árvore Binária – Números de nós 38 Uma árvore estritamente binária completa (balanceada) com altura h. Tem-se com a fórmula (2 h+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.

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

40 Prof.: Sergio Pacheco Numeração da Árvore Numeração da Árvore 40 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.

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

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

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

44 Prof.: Sergio Pacheco Árvore de Pesquisa Binária 44 * C 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.

45 Prof.: Sergio Pacheco Árvore de Pesquisa Binária 45 * Exemplo {50,10,15,20,0,30,70} 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.

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

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

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

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

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

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

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

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

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

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

56 Prof.: Sergio Pacheco Revisão - Inserção em árvore binária 56 Continuar: Continuar:

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

58 Prof.: Sergio Pacheco Implementação 58 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.

59 Prof.: Sergio PachecoImplementação 59 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; }

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

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

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

63 Prof.: Sergio Pacheco Implementação 63 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); } 1.Se árvore vazia, fim; 2.Percorremos a subárvore esquerda em ordem; 3.Visitamos a raiz; 4.Percorremos a subárvore direita em ordem;

64 Prof.: Sergio Pacheco Implementação 64 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); } 1. Se árvore vazia, fim; 2. Visitamos a raiz; 3. Percorremos a subárvore esquerda em pré-ordem; 4. Percorremos a subárvore direita em pré-ordem.

65 Prof.: Sergio Pacheco Implementação - Fazer 65 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); } } 1.Se árvore vazia, fim; 2.Percorremos a subárvore esquerda em pós-ordem; 3.Percorremos a subárvore direita em pós-ordem; e 4.Visitamos a raiz.

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


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

Apresentações semelhantes


Anúncios Google