Algoritmos e Estruturas de Dados Iprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Outros...

Post on 09-Jul-2020

1 views 0 download

Transcript of Algoritmos e Estruturas de Dados Iprofessor.ufabc.edu.br/~jesus.mena/courses/aed1-1q-2019/...Outros...

1

Aula 09 Revisão + Simulado

Algoritmos e Estruturas de Dados I

Prof. Jesús P. Mena-Chalcojesus.mena@ufabc.edu.br

1Q-2019

2

Vetores

3

Vetores

4

Vetores

vetor

5

Vetores

vetor

...

...

6

Ponteiros

7

INSTRUÇÕES

Armazena o código compilado (na linguagem máquina)

[~bytes]

PILHA (STACK)

Armazena as variáveis ao longo da execução do programa.

[~Mbytes]

Processo na memória

HEAP

Espaço de memória principal gerenciado pelo SO.

[~Toda a memória RAM]

Alocação estática Alocação dinâmica

int x;double M[10][20];char *c;

double M = malloc(...);

8

INSTRUÇÕES PILHA (STACK)

Processo na memória

HEAP

Ponteiros?

Em Java e Python o uso é transparente. Não precisa se preocupar de alocar e

liberar memória

9

INSTRUÇÕES PILHA (STACK)

Processo na memória

HEAP

Fenômeno: Stack Overflow

10

Endereços

A memória de qualquer computador (arquitetura de Von Neumann) é uma sequência de bytes.

Cada byte armazena um de 256 possíveis valores.

Os bytes são numerados sequencialmente e o número de um byte é o seu endereço

(*) Fonte: http://codingfox.com/3-1-computer-memory-and-data-representation/

11

Endereços

Em c o endereço de um objeto é dado pelo operador &

Se x é uma variável, então &x é o seu endereçoint s = -999int* p = &s

0x89422

0x60001

p

p = 0x89422&p = 0x60001

-9999

0x89422

*p = -9999

s

“p aponta para a s”“p é o endereço de s”“p aponta a s”

*p é o mesmo que escrever “s”

12

Structs

13

Linguagem C: Tipos de dados

Tipos de dados primários.Tipos de dados derivados.Tipos definidos pelo usuário.

(*) Fonte: http://www.studytonight.com/c/datatype-in-c.php

14

Por que precisamos saber de structs?

Em determinadas aplicações é necessário associar diferentes dados a um “objeto”.

Objeto: Ponto em 3D

Ponto 2

Ponto 3

Ponto 4

Ponto 5

Ponto 1

x y z

.

.

.

15

Por que precisamos saber de structs?

Podemos usar 3 vetores para armazenar as posições de cada ponto no espaço 3D

Vx Vy Vz

void plot3D(double Vx[], double Vy[], double Vz[]) { ...}

16

Por que precisamos saber de structs?

Podemos usar 7 vetores para armazenar as posições de cada ponto no espaço 3D e a sua cor RGB

Vx Vy Vz

void plot3D(double Vx[], double Vy[], double Vz[], … ) { ...}

Vr Vg Vb Va

17

Por que precisamos saber de structs?

Por que não simplificar? void plot3D(struct Ponto3D V[], int n) { ...}

As structs fornecem uma forma “simples” para programar

Vx Vy Vz Vr Vg Vb Va

18

Estruturas

Uma estrutura para armazenar um ponto 3D

Uma estrutura para armazenar um ponto 3D e sua cor (RGBA)

19

Maior segmento de reta 2D

Crie um programa, na linguagem C, em que dada uma sequência de n pares de números reais, apresente o comprimento do maior segmento de reta. Deve ser obrigatoriamente utilizada a estrutura: struct Ponto2D { double x; double y; };

Exemplo de entrada:51 12 20 03 34 4Saída:5.66

Obs.: Não use colchetes. Use apenas ponteiros.

Apresente apenas os 2 primeiros digitos após o ponto decimal

20

Exemplo de segmentos de reta

Maior segmento

21

Maior segmento de reta 2D

pow(2,2)sqrt(2)

22

Maior segmento de reta 2D

23

Área do Menor Triângulo

Crie um programa, na linguagem C, em que dada uma sequência de n (n>=3) pares de números reais, apresente a área do menor triângulo composto por 3 pontos. Deve ser obrigatoriamente utilizada a estrutura: struct Ponto2D { double x; double y; };

Exemplo de entrada:315 1520 3028 30

Saída:60.00

Obs.: Não use colchetes. Use apenas ponteiros.

Apresente apenas os 2 primeiros digitos após o ponto decimal

24

Exemplo de triângulos para 4 pontos

25

Área de um triângulo

https://www.mathopenref.com/coordtrianglearea.html

26

Área do Menor triângulo

27

Área do Menor triângulo

28

Listas

29

Definição

Suporemos que os objetos armazenados nos nós são do tipo int.

A estrutura de nós pode ser definida como:

3 7

30

Imprimir uma lista (rec)

31

Busca por um elemento

xBusca → (dado um elemento)

x O(n)

pr

Se o elemento não existir, na lista, a função devolve NULL.

32

Outros tipos de listas encadeadas:

Lista circular

7

p

4

8

13

0

-3

A última célulaaponta para a primeira

33

Outros tipos de listas encadeadas:

Lista duplamente encadeada

7

p

9 -2 75

q

NULL NULL

Cada célula contém o endereçoda célula anterior e o da

seguinte

34

4) Eliminar elemento em uma posição

Dado um ponteiro para o primeiro nó de uma lista ligada, e um número inteiro p. Elimine da lista o nó que está na posição p da lista. A função deve devolver um ponteiro ao primeiro elemento da lista. Assuma que a posição p sempre será uma posição válida.

Uma posição igual a 0 indica o início da lista. Uma posição igual a 1 indica o nó seguinte ao início da lista e assim por diante. O ponteiro dado pode ser nulo, o que significa que a lista inicial está vazia.Obs.: Deve implementar apenas a função eliminarElementoEmUmaPosicao

Entrada Saída Descrição

511223344552

11224455

Na lista ligada de 5 nós, composta pelos elementos: 11→ 22 → 33 → 44 → 55

Deve ser eliminado o elemento da posição 2. Resultando a lista:11→ 22 → 44 → 55

35

4) Eliminar elemento em uma posição

36

5) Inverter uma lista ligada

Dado um ponteiro para o primeiro nó de uma lista ligada, crie uma função que permita inverter a ordem na lista. Isto é, as ligações devem ser invertidas. O último elemento da lista deve apontar a NULL. A função deve devolver um ponteiro ao primeiro elemento da lista.

O ponteiro dado pode ser nulo, o que significa que a lista inicial está vazia.Obs.: Deve implementar apenas a função inverterListaLigada

Entrada Saída Descrição

51122334455

5544332211

A lista ligada de 5 elementos, composta por: 11→ 22 → 33 → 44 → 55 → NULL

Deve ser transformada na lista:55→ 44 → 33 → 22 → 11 → NULL

37

5) Inverter uma lista ligada

38

6) Comparar duas listas ligadas

Dados dois ponteiros para os primeiros nós de duas listas ligadas, crie uma função que permita comparar os dados nos nós das listas para verificar se eles são iguais. As listas são iguais apenas se tiverem o mesmo número de nós e os nós correspondentes tiverem os mesmos dados. O ponteiro dado pode ser nulo, o que significa que a lista está vazia.Obs.: Deve implementar apenas a função compararListasLigadas

Entrada Saída Descrição

21122111

0 Dadas as duas listas: Lista 1: 11→ 22 → NULL Lista 2: 11→ NULL

A resposta deve ser 0 dado que são listas diferentes.

2556625566

1 Dadas as duas listas: Lista 1: 55→ 66 → NULL Lista 2: 55→ 66 → NULL

A resposta deve ser 1 dado que são listas iguais.

39

6) Comparar duas listas ligadas

40

7) Valor em uma determinada posição

Dado um ponteiro para o primeiro nó de uma lista ligada e um inteiro que representa uma posição p, crie uma função que permita obter o valor do nó dada na posição p, contando de trás para frente.Assuma que a posição p sempre será uma posição válida. Uma posição igual a 0 indica o último elemento da lista. Uma posição igual a 1 indica o penúltimo e assim por diante. O ponteiro dado pode ser nulo, o que significa que a lista está vazia.

Obs.: Deve implementar apenas a função valorEmPosicao

Entrada Saída Descrição

511223344551

44 Na lista ligada de 5 elementos, composta por: 11→ 22 → 33 → 44 → 55 → NULL

O elemento na posição 1 (de trás para frente) é44

41

7) Valor em uma determinada posição

42

8) Eliminar elementos duplicados

Dado um ponteiro para o primeiro nó de uma lista ligada com elementos organizados na ordem crescente. Crie uma função que permita eliminar o mínimo dos nós para que a lista não contenha nenhum valor repetido. A função deve devolver um ponteiro ao primeiro elemento da lista.

O ponteiro dado pode ser nulo, o que significa que a lista está vazia.Obs.: Deve implementar apenas a função eliminarElementosDuplicados

Entrada Saída Descrição

711222233444455

1122334455

A lista ligada de 7 elementos, composta por: 11→22→22→33→44→44→ 55 → NULL

Deve ser transformada na lista: 11→22→33→44→ 55 → NULL

43

8) Eliminar elementos duplicados

44

9) Intercalar duas listas ligadas

Dados dois ponteiros para os primeiros nós de duas listas ligadas, crie uma função que permita intercalar os dados nos nós das listas de tal forma a criar uma (nova) terceira lista ligada mas organizada na forma crescente. Os dados em ambas as listas iniciais estão organizados na sua forma crescente. O ponteiro dado pode ser nulo, o que significa que a lista está vazia.Obs.: Deve implementar apenas a função intercalarListasLigadas

Entrada Saída Descrição

21144422335566

112233445566

Dadas as duas listas: Lista 1: 11→44→NULL Lista 2: 22→33→55→66→NULL

O resultado de intercalar as duas listas deve ser:11→22→33→44→55→66→NULL

199199

9999

Dadas as duas listas: Lista 1: 99→NULL Lista 2: 99→NULL

O resultado de intercalar as duas listas deve ser:99→ 99→NULL

45

9) Intercalar duas listas ligadas

46

10) Segundo menor elemento

Dado um ponteiro para o primeiro nó de uma lista ligada. Crie uma função que permita devolver o valor do segundo menor elemento presente na lista ligada. Considere que a lista inicial sempre terá no mínimo 2 elementos.

Obs.: Deve implementar apenas a função segundoMenorElemento

Entrada Saída Descrição

51199443366

33 A lista ligada de 5 elementos, composta por: 11→99→44→33→66→NULL

Tem como segundo menor valor:33

3444444

44 A lista ligada de 3 elementos, composta por: 44→44→44→NULL

Tem como segundo menor valor:44

47

10) Segundo menor elemento

Resumo

Listas

Listas com arranjosListas com arranjos

Listas ligadas/encadeadas/enlaçadasListas ligadas/encadeadas/enlaçadas

- Simples para usar- Alocação em bloco contínuo- Acesso a um item em tempo constante

- Simples para usar- Alocação em bloco contínuo- Acesso a um item em tempo constante

- Não requer conhecer a quantidade de itens previamente

- Inserção e remoção não requer deslocamentos

- Não requer conhecer a quantidade de itens previamente

- Inserção e remoção não requer deslocamentos

- Requer saber a quantidade de itens previamente (para alocação)

- Inserção/Remoção requer deslocamentos- Expansão custosa (realocar e copiar)

- Requer saber a quantidade de itens previamente (para alocação)

- Inserção/Remoção requer deslocamentos- Expansão custosa (realocar e copiar)

- Acesso a uma posição necessita percorrer a lista- Memória extra para os ponteiros

- Acesso a uma posição necessita percorrer a lista- Memória extra para os ponteiros

49

listas e árvores

50

Vetor (array): Elementos contiguos na memória. Todos do mesmo tipo de dado

Listas ligadas: Elementos não necessariamente contiguos na memória.Podem ter ‘atributos’ diferentes.

Árvores:Elementos não necessariamente contiguos na memória.Podem ter ‘atributos’ diferentes.

51

Structs

Para uma lista ligada:

Para uma lista duplamente ligadae também para uma árvore em quecada nó tenha no máximo 2 ligações:

52

Varredura

Como seria a varredura e-r-d?

53

Varredura

Na figura abaixo, os nós estão numeradas na ordem da varredura e-r-d.

5

3 8

1 4

0 2

6 9

7

54

Custos de algoritmos

55

O número de comparações, no algoritmos, depende dos inteiros registrados no vetor.

No melhor caso: o elemento está na primeira posição

No pior caso: o elemento está na última posição ou não está no vetor.

No caso médio?

56

Busca de um elemento

Seja f uma função de complexidade tal que f(n) é o número de elementos consultados.

Melhor caso:

Pior caso:

Caso médio:

Quando o elemento procurado é o primeiro consultado

Quando o elemento procurado é o último consultado ouNão está presente no vetor

57(*) Fonte: http://algs4.cs.princeton.edu/14analysis/

58

http://bigocheatsheet.com/

59

Simulado

60

Q1

(a) Devolve a diferença entre o maior e o menor valor presente no vetor V.

(b) Para qualquer caso o número de comparações é proporcional a 2n.

61

Q2

62

Q3

63

Q4