---
title: Revisão Julho - Estrutura de Dados
---

----------
<center> <font size="+4"><b> Avaliação de Retorno</b></font></center>
<center> <font size="+3"><b> Estrutura de Dados</b></font></center>
----------
# Regras
- A avaliação consite na escolha e resolução de 3 dos 4 exercícios disponíveis nessa lista;
- O aluno estará aprovado se obter ao menos 50% da nota final;
- O aluno pode consultar o material em sala, assim como material disponível na internet;
- Entretanto, o aluno deve realizar a avaliação de maneira individual, sem consultas a outras pessoas;
- A avaliação deve ser entregue até dia 04/jan/21, 23h50, via email para rychard.guedes@letscode.com.br;
- O código deve estar comentado, contando positivamente na avaliação.
# Exercícios
## Exercício 1 - Árvore de Decisão
Vamos fazer um programa que utiliza uma árvore de decisão para auxiliar um diagnóstico médico.
### Passo 1 (35%)
Construa uma árvore que represente a informação do diagrama abaixo. Cada nó contem uma pergunta, a respeito de um teste, e dois filhos direito e esquerdo correspondendo às respostas True e False respectivamente. Os nós folha contém o diagnóstico mais provável dados os resultados dos testes.

Figura extraída de: Albu, A. (2017). **From logical inference to decision trees in medical diagnosis**. 2017 E-Health and Bioengineering Conference (EHB), 65-68.
### Passo 2 (65%)
Com a árvore construída o seu programa deverá ler um arquivo csv no formato abaixo onde cada coluna indica um teste e cada linha corresponde aos testes de um paciente. Para cada linha o programa deverá percorrer a árvore de acordo com os resultados dos testes informados até chegar a um nó folha e então imprimir o diagnóstico. Caso o paciente não tenha efetuado um teste necessário para o diagnóstico, o programa deve imprimir `Missing TestX` onde TestX é o teste faltante.
Exemplo de entrada:
```
HBsAg ,anti-HDV,anti-HBc,anti-HBs,IgM anti-HBc
positive,positive, , ,
negative,negative,positive, ,
,positive, , ,
```
Exemplo de saída:
```
Hepatitis B+D
Unclear (possible resolved)
Missing HBsAg
```
> Observação: os espaços no exemplo de entrada são apenas para facilitar a visualização.
----------
## Exercício 2 - Lowest Common Ancestor
Resolver o problema do Lowest Common Ancestor no [Hackerrank](https://www.hackerrank.com/challenges/binary-search-tree-lowest-common-ancestor/problem).
----------
## Exercício 3 - Trajetos de Metrô
Vamos fazer um programa que, dado um arquivo especificando a malha metroviária de uma cidade, possibilita definir o melhor caminho entre duas estações.
O programa deverá ler um arquivo no formato abaixo e armazenar estas informações em um grafo. Por simplicidade, não vamos incluir todas as estações da malha metroviária, mas apenas conexões e outros pontos de interesse.
### Formato do arquivo de entrada
Cada linha contem duas estações separadas por vírgula e um número indicando o "custo" entre duas estações.
```
Sé, República, 2
Sé, Paraíso, 10
Sé, Luz, 2
Luz, República, 1
Consolação, República, 2
Consolação, Paraíso, 3
Chacara Klabin, Santa Cruz, 1
Santa Cruz, Paraíso, 3
Chacara Klabin, Paraíso, 2
Eng. Goulart, Guarulhos CECAP, 5
Guarulhos CECAP, Guarulhos Aeroporto, 2
```
### Passo 1 (40%)
Faça um programa que lê um arquivo no formato acima e carrega as informações em um grafo.
### Passo 2 (40%)
Modifique o programa para que receba uma solicitação do usuário contendo duas estações A, B e indique um caminho (qualquer) para sair da estação A e chegar na estação B.
Exemplo de entrada:
```
Luz, Chacara Klabin
```
Exemplo de saída:
```
Luz -> República -> Consolação -> Paraíso -> Chacara Klabin
```
### Passo 3 (20%)
Modifique o programa para que a resposta do passo 2 seja garantidamente o menor caminho.
----------
## Exercício 4 - Famílias de Troia
A Guerra de Troia pode ter sido um grande conflito bélico entre gregos e troianos, possivelmente ocorrido entre 1300 a.C. e 1200 a.C. (fim da Idade do Bronze no Mediterrâneo). Recentemente foram encontradas inscrições numa caverna a respeito de sobreviventes. Após um trabalho árduo, arqueólogos descobritam que as incrições descreviam relações de parentesco numa certa população. Cada item da inscrição indicavam duas pessoas que pertenciam a uma mesma família. Seu problema é determinar quantas famílias distintas existem.
### Entrada
O arquivo de entrada consiste de M + 1 linhas. A primeira linha do arquivo de entrada contém um inteiro positivo N, que indica o número de elementos da comunidade, numerados de 1 a N. As demais M linhas do arquivo de entrada contêm, cada uma, dois inteiros. Cada inteiro identifica um elemento da comunidade. Cada linha indica que os dois indivíduos pertencem a uma mesma família.
Exemplo de entrada:
```
9 8
1 2
2 3
3 6
4 3
6 5
7 8
1 4
6 2
```
### Saída
A saída deve conter apenas uma linha contendo um único inteiro, que é o número de famílias.
Exemplo de saída:
```
3
```
Extraído de: [URI](https://www.urionlinejudge.com.br/judge/en/problems/view/2440)