Estrutura de Dados II - 2020-2
UnB-\(\gamma\)
Table of Contents
- 1. Aulas
- 1.1. Aula 1 01_fev
- 1.2. Aula 2 03_fev ordenacao_elementar
- 1.3. Aula 3 08_fev merge_sort
- 1.4. Aula 4 10_fev exercicios
- 1.5. Aula 5 17_fev recap assincrono
- 1.6. DONE Aula 6 22_fev avaliacao
- 1.7. Aula 7 24_fev sobre_avaliacao quicksort
- 1.8. Aula 8 01_mar quickselect
- 1.9. Aula 9 03_mar hash
- 1.10. Aula 10 08_mar hash
- 1.11. Aula 11 10_mar hash
- 1.12. DONE Aula 12 15_mar avaliacao
- 1.13. Aula 13 17_mar assincrono
- 1.14. Aula 14 22_mar árvores
- 1.15. Aula 15 24_mar exercícios
- 1.16. Aula 16 29_mar
- 1.17. Aula 17 31_mar
- 1.18. Aula 18 05_abr
- 1.19. Aula 19 07_abr
- 1.20. DONE Aula 20 12_abr avaliacao
- 1.21. Aula 21 14_abr
- 1.22. Aula 22 19_abr
- 1.23.
Aula 2321_abr feriado - 1.24. Aula 24 26_abr
- 1.25. Aula 25 28_abr
- 1.26. Aula 26 03_mai
- 1.27. Aula 27 05_mai
- 1.28. DONE Aula 28 10_mai avaliacao
- 1.29. Aula 29 12_mai
- 1.30. Aula 30 17_mai
- 1.31. Aula 31 19_mai
- 2. Antes de Começar
- 3. Plano de Aulas
- 4. Monitor
- 5. Presença
- 6. Notas
1 Aulas
1.1 Aula 1 01_fev
1.1.1 Tópicos
- Apresentação da disciplina em live no YouTube
- Apresentação do Plano de Aulas
- Previsão de Avaliações
- Método de cálculo de presença
- Método avaliativo e gradação
- Apresentação do Plano de Aulas
1.1.2 Material de apoio
Para a aula de hoje é recomendado que o aluno veja os vídeos abaixo:
1.2 Aula 2 03_fev ordenacao_elementar
1.2.1 Tópicos e materiais
Nesta aula vamos começar a trabalhar com algoritmos elementares de ordenação, em especial: BubbleSort; Selection Sort; Insertion Sort.
Antes de começar a trabalhar com os algoritmos de ordenação vamos definir as "regras do jogo", o contexto, a terminologia e o arcabouço mínimo que se espera para começar a implementar os algoritmos de ordenação.
A aula ao vivo é um teaser de todos os algoritmos e os vídeos referenciados na sub-seção abaixo são recomendados para todos os alunos, pois em cada um deles os algoritmos são destrinchados e implementados passo a passo.
- A Implementação de vários algoritmos de Ordenação está disponível no Github para que você tome como referência.
- Veja o material do professor Paulo Feofiloff sobre Algoritmos elementares de Ordenação
1.2.2 Entenda os Algoritmos passo a passo
1.2.3 Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-ordena-elementar
- Implemente
- cada um dos algoritmos discutidos em aula (evite consultar o material e deduza os passos);
- Compare o tempo de execução dos algoritmos
- Gere entradas aleatórias com 100000 elementos (experimente outras variações de tamanho também)
- Para gerar uma entrada aleatória em
bash
for((i=0;i<100000;i++)); do echo $RANDOM; done > aleatorio.in
- Caso prefira implementar em
C
srand(time(NULL)); for(int i=0;i<100000;i++) printf("%d\n",rand());
compile o código e execute da seguinte forma:
./meuprograma > aleatorio.in
- O seu programa deve ler o conjunto de números da entrada padrão, e você poderá verificar o tempo executado através dos comandos:
time ./bubblesort < aleatorio.in > bubblesort.out
- assim o seu programa irá ler o conteúdo do arquivo
aleatorio.in
como se fosse digitado pelo teclado e toda a saída será gravada no arquivobubblesort.out
(você pode trocar o nome do arquivo se assim desejar [recomendo um arquivo diferente para cada algoritmo implementado].
- Crie variações dos arquivos, gere arquivos maiores, menores, ordenados, ordenados reversamente… E compare o tempo entre esses arquivos, há diferença?
- Verifique a quantidade de operações executadas
- Modifique a sua implementação de forma a mostrar a quantidade de operações de troca e quantas comparações foram feitas.
- Compare o resultado com todos os algoritmos implementados para diversas entradas
- Escreva uma função que coloque em ordem lexicográfica um vetor de strings
- Resolva a Terceira questão desta prova
- Resolva a Segunda questão desta prova
- Defina o conceito de estabilidade de um algoritmo de ordenação.
- Liste quais algoritmos trabalhados nesta aula são estáveis e quais não são
- Ordenando um registro
Suponha que cada elemento de um vetor é um registro com dois campos: um inteiro e outro uma string:
struct registro { int aa; char *bb;};
Escreva uma função que rearranje o vetor de modo que os campos
aa
fiquem em ordem crescente. Escreva outra função que rearranje o vetor de modo que os camposbb
fiquem em ordem lexicográfica. - Execute o benchmark disponibilizado no Github
Faça o
git clone
do repositório https://github.com/bcribas/benchmark-ordenacao e siga as instruções doREADME
para executar o experimento com algumas implementações.
1.3 Aula 3 08_fev merge_sort
1.3.1 Tópicos e materiais
Discussão e implementação do Algoritmo linearítmico de Ordenação MergeSort.
Nesta aula foi discutido o algoritmo MergeSort
, mas antes, iniciamos
a discussão sobre o funcionamento da função intercala
(merge
) que
é a base para o funcionamento do algoritmo de ordenação.
Na live foi implementada a intercalação que recebe dois ponteiros de
vetores e seus respectivos intervalos fechados [l,r]
(l
para
left
[ou elemento mais a esquerda] e r
para right
[ou elemento
mais a direita]) devolvendo um vetor alocado com os elementos dos dois
vetores, a
e b
, intercalados. A função implementada em aula segue
o conceito implementado abaixo:
1: Item *intercala(Item *a, int la, int ra, Item *b, int lb, int rb) 2: { 3: //Tamanhos dos vetores a e b 4: int ta=(ra-la+1); 5: int tb=(rb-lb+1); 6: 7: Item *c=malloc(sizeof(Item)*(ta+tb)); 8: 9: //intervalos do vetor c 10: int lc=0; 11: int rc=(ta+tb-1); 12: 13: int ia=la, ib=lb,ic=lc; 14: 15: while(ia<=ra && ib<=rb) 16: { 17: if(lesseq(a[ia],b[ib])) 18: c[ic++]=a[ia++]; 19: else 20: c[ic++]=b[ib++]; 21: } 22: while(ia<=ra) 23: c[ic++]=a[ia++]; 24: while(ib<=rb) 25: c[ic++]=b[ib++]; 26: return c; 27: }
Esta implementação difere, ligeiramente, da versão feita no vídeo
indicado como complementar ao MergeSort
(na seção abaixo), que faz
com que a função de intercalação receba um único vetor com os índices
l,m,r
(left,middle,right).
O efeito da intercalação é o mesmo, porém, a implementação feita em
aula exige que o vetor c
seja manipulado dentro do procedimento
mergesort
, diferentemente do outro vídeo.
A complexidade assintótica não é modificada e tão pouco agrega overhead adicional entre as versões. Fica interessante ter a manipulação diferente dos elementos para ter uma visão ampla da implementação.
Dessa forma o mergesort
, em aula, foi implementado da seguinte
forma:
28: void mergesort(Item *v,int l,int r) 29: { 30: if(l>=r) return; 31: int meio=(l+r)/2; 32: mergesort(v,l,meio); 33: mergesort(v,meio+1,r); 34: //principal diferença do intercala não ser in-place 35: Item *c=intercala(v,l,meio,v,meio+1,r); 36: for(int i=0;i<r-l+1;i++) 37: v[l++]=c[i]; 38: free(c); 39: }
A principal diferença na mergesort
acontece a partir da linha
35, onde o nosso procedimento manipula o vetor resultante
da intercalação para dentro do vetor que está sendo ordenado.
Outra maneira de passar os parâmetros do vetor v
como se fossem dois
vetores realmente disjuntos, seria passando o ponteiro da posição
inicial de cada left
do vetor, substituindo a Linha 35
pela linha indicada abaixo:
1: Item *c=intercala(&v[l],0,meio-l,&v[meio+1],0,r-(meio+1));
O que acontece neste ponto é que passamos os ponteiros dos left
de
cada um dos vetores que devem ser intercalados, um deles começa em l
e o outro em meio+1
, o que precisamos calcular agora é qual seria o
novo right
de cada vetor, pois como cada vetor não começa no l
do
vetor original temos que recalcular o deslocamente de cada parte,
ficando meio-l
para a primeira metade e r-(meio+1)
para a segunda
metade.
O aluno também pode acompanhar o material de MergeSort do prof. Paulo Feofiloff
1.3.2 Veja também
1.3.3 Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na SEGUNDA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-ordena-rapido-e-busca
- Se você já conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
- Implemente o algoritmo da Intercalação (merge)
- Implemente o algoritmo de ordenaçao por intercalação (mergesort)
- Escreva uma função que
- receba vetores disjuntos
x[0..m-1]
ey[0..n-1]
, ambos em ordem crescente, e produza um vetorz[0..m+n-1]
que contenha o resultado da intercalação dos dois vetores dados.- É claro que
z
estará em ordem crescente.
- É claro que
- Escreva duas versões da função: uma iterativa e uma recursiva.
- receba vetores disjuntos
- Exercícios baseados do Professor Paulo Feofiloff
- A respeito do problema da Intercalação (merge)
O problema da intercalação (merge) é clássico na computação e consiste em resolver o seguinte problema: dados vetores crescentes
v[p .. q-1]
ev[q .. r-1]
, rearranjarv[p .. r-1]
em ordem crescente.Uma leO é uma lista encadeada que contém uma sequência crescente de números inteiros. Escreva uma função que intercale duas leO dadas, produzindo assim uma terceira leO. Sua função não deve alocar novas células na memória, mas reaproveitar as células das duas listas dadas.
- Execute o benchmark disponibilizado no Github
Faça o
git clone
do repositório https://github.com/bcribas/benchmark-ordenacao e siga as instruções doREADME
para executar o experimento com algumas implementações.Recomendo que neste momento você execute da seguinte maneira
TIMEOUT=3 BINARY="dummy bubblesort selectionsort insertionsortslow insertionsort mergesort" make time.reverso time.ordenado
- Após a execução compare a diferença de execução entre os algoritmos e pondere suas implicações
- Modifique a sua implementação do MergeSort para que ela mostre a quantidade de comparações feitas e compare com execuções feitas com os algoritmos elementares
1.4 Aula 4 10_fev exercicios
1.4.1 Tópicos e Materiais
Nesta aula o professor irá conversar e discutir com os alunos alguns dos problemas disponibilizados nas listas de exercícios de fixação, liberadas em aulas anteriores.
Os alunos devem ler a maior parte dos problemas para que entendam a motivação de cada um deles.
1.4.2 Vídeos adicionais
1.4.3 Exercícios
- 1a lista de exercícios de fixação no MOJ
- 2a lista de exercícios de fixação no MOJ
- Primeira lista de presença
- Credenciais enviadas para o email institucional
- A lista está disponível em https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-1
- A lista contempla os dias 01 03 08 10 e 17 de fevereiro
- Você deverá
ACERTAR o exercíciogarantir10%
de acerto para receber a presença
1.5 Aula 5 17_fev recap assincrono
Quanto à resolução do problema Número Proibido, que se encontra presente na 2a lista de fixação e na 1a lista de presença da disciplina.
Algumas notas antes de discutir a resolução do problema:
- O login para a lista de presença foi enviado por e-mail, de
maneira individualizada, e você deve copiar exatamente a string
de login e senha.
- importante notar que o login possui o prefixo presenca
- O link para acesso à lista é: https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-1
- Para garantir a sua presença, você precisa obter no mínimo
10%
de acerto no problema.- A quantidade de acerto é mensurada com código após o veredicto,
por exemplo:
Accepted,100p
Wrong Answer,80p
Time Limit Exceeded,8p
- A quantidade de acerto é mensurada com código após o veredicto,
por exemplo:
Em cada um dos exemplos acima o número indicado antes do
caractere p
representa a porcentagem de acerto. Problemas
aceitos terão, sempre, 100%
de acertos. Outras respostas
terão um valor inferior a 100p.
- O veredicto
Time Limit Exceeded
(com qualquer porcentagem de acerto) indica que a sua solução não está com a complexidade esperada, ou seja, a sua solução precisa de mais operações para resolver o problema do que o esperado- para a lista de presença isso não é um problema, mas para atividades de avaliação sim.
- O veredicto
RunTime Error
indica que sua solução está recebendosegmentation fault
, geralmente ocasionado por acesso errado no vetor (exemplo, índice além do tamanho do vetor).- para a lista de presença não é um problema, embora você tenha que entender o que está acontecendo para arrumar.
Voltando para a discussão do problema do número proibido, a descrição do problema é bastante clara e não esconde o que precisa ser feito, no entanto é necessário que o aluno tenha alguma "malícia" algorítmica para entender como atacar o problema, mas vamos discutir isso com calma.
Primeiramente o enunciado explica que existe uma lista de números proibidos e eles possuem um tamanho bem específico, até \(140000\) números, e cada um deles é um número positivo entre \([0,2^{31}]\) (note que o intervalo é fechado), o que significa que esses números cabem em um número inteiro.
A entrada dos números inteiros é dada por um \(N\), indicando a quantidade de números proibidos, e depois os \(N\) numerais. O código para entrada é bastante direto e possui complexidade em \(\mathcal{O}(N)\), parecido com o código abaixo:
1: int proibidos[140000]; 2: int proibidos_ct; 3: scanf("%d",&proibidos_ct); 4: for(int i=0;i<proibidos_ct;i++) 5: scanf("%d",&proibidos[i]);
O código acima não tem nenhum segredo, mas o problema começa a apareser nas próximas linhas do enunciado.
O enunciado nos conta que o depois da lista de números proibidos acontecerá um número indeterminado de perguntas, e cada pergunta consiste em saber se um número dado pertence ao conjunto de números proibidos.
A informação da quantidade indeterminada de perguntas nos sugere que elas devem acontecer diversas vezes, muitas vezes mais que a quantidade de números proibidos. E é nesse ponto que você deve ficar encafifado.
Caso você já tenha levado um Time Limit Exceeded
, você percebeu que
o tempo limite de execução é de meros \(0,2495\) segundos, você
identifica isso dentro do log enviado pelo mojinho ao invocar o
comando getlog
.
Mas vou um pouco mais além e vou mostrar a informação presente nas máquinas. Hoje temos duas máquinas operando como juízes, a jaguapitanga e a ovomaltine (principal), veja a spec delas:
- jaguapitanga
- arch: x8664
- cpu: Intel(R) Celeron(R) CPU 3867U @ 1.80GHz
- memory: 8077352
- ovomaltine
- arch: x8664
- cpu: Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
- memory: 16315452
As máquina são pouco diferentes e o tempo de execução são:
- jaguapitanga
- c: .3980
- ovomaltine
- c: .2495
Mesmo a ovomaltine sendo mais rápida os tempos não são tão diferentes. Note que a jaguapitanga só é utilizada quando a ovomaltine fica fora do ar, opera como um backup.
Agora vou executar alguns experimentos na jaguapitanga para que consigamos ter uma noção dos tempos que as coisas levam.
Considerando uma ideia bobinha, por exemplo, um código com um vetor de \(140000\) elementos procurando um elemento que não existe, ou seja, efetuando uma busca sequencial. Como o problema nos fala que a quantidade de perguntas é indeterminada, vamos monstar um exemplo que procure \(140000\) vezes um número que não existe.
Como vamos utilizar uma busca sequencial, significa que vamos ter que percorrer o vetor de números proibidos inteiro para descobrir que o número não está lá, então podemos dizer que a busca sequencial é proporcional a \(\mathcal{O}(N)\) operações, como \(N\) é \(140000\) e vamos realizar \(140000\) buscas falhas temos operações propocionais a \(N^2\).
Vamos ver como se comporta um código bobinho desses:
1: #include <stdio.h> 2: #include <stdlib.h> 3: int achou(int num,int *v,int l,int r) 4: { 5: for(int i=l;i<=r;i++) 6: if(v[i]==num) 7: return 1; 8: return 0; 9: } 10: int main(void) 11: { 12: int vetor[140000]; 13: //preparando para gerar números aleatórios 14: srand(140000); 15: //preenchendo o vetor com números aleatórios inferiores a 1milhão 16: for(int i=0;i<140000;i++) 17: vetor[i]=rand()%1000000; 18: 19: //fazendo 140000 buscas pelo número 1milhão 20: for(int i=0;i<140000;i++) 21: if(!achou(1000000,vetor,0,140000-1)) 22: printf("nao\n"); 23: else 24: printf("sim\n"); 25: } 26:
Executando este código na jaguapitanga, e compilando com os mesmos parâmetros que usamos no MOJ o tempo de execução fica em enormes \(15,61\) segundos. Muito acima do tempo limite estipulado pelo MOJ.
Veja abaixo como foi executado:
ribas@jaguapitanga:/tmp$ make busca_bobinha CFLAGS='-O2 -static' cc -O2 -static busca_bobinha.c -o busca_bobinha ribas@jaguapitanga:/tmp$ time ./busca_bobinha > /dev/null real 0m15.616s user 0m15.607s sys 0m0.008s
O resultado é muito aquém ao que esperamos, pois o TL é de \(0,2495\) segundos. Como poderíamos reduzir este tempo?
Lá em EDA-1 você deve ter aprendido que existe um algoritmo que sabe fazer uma busca mais rapidamente que a busca sequencial. Esta é a busca binária. O problema é que a busca binária precisa de um vetor ordenado para poder realizar a busca rapidamente.
Então PARA TUDO! Precisamos ordenar esse vetor antes de fazer a busca!
Aprendemos diversos algoritmos de ordenação neste semestre e temos uma noção de como cada um se comporta.
Peguei rapidamente o Benchmark de Ordenação e resolvi experimentar na jaguapitanga primeiramente testando os clássicos:
- bubblesort
- seletionsort
- insertionsort
- mergesort
Sabemos que somente o mergesort, dentre os listados acima, possui complexidade em \(\mathcal{O}(N \log{}(N))\), enquanto que os outros estão em \(\mathcal{O}(N^2)\).
Alg/#Elementos | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536 | 131072 | 262144 | 524288 | 1048576 |
bubblesort | 0.00 | 0.00 | 0.00 | 0.01 | 0.04 | 0.20 | 0.91 | 3.89 | 16.01 | TLE | TLE | TLE | TLE |
selectionsort | 0.00 | 0.00 | 0.00 | 0.00 | 0.01 | 0.05 | 0.23 | 0.91 | 3.61 | 14.42 | TLE | TLE | TLE |
insertionsort | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.01 | 0.04 | 0.16 | 0.67 | 2.79 | 11.69 | TLE | TLE |
mergesort | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.01 | 0.03 | 0.06 | 0.12 | 0.25 | 0.53 |
Para gerar a tabela acima o benchmark de ordenação foi executado da seguinte maneira na jaguapitanga:
TIMEOUT=20 BINARY="bubblesort selectionsort insertionsort mergesort" make time.aleatorio
Veja que os algoritmos quadráticos (os três primeiros) crescem na
proporção esperada, ou seja, ~4x
mais tempo é necessário para ordenar
um vetor com o dobro do tamanho.
Logo, é perceptível que somente o mergesort consegue ordenar o vetor dentro do limite de tempo tão justo, ou seja, sabemos que ele ordena \(262144\) elementos em \(0,12\) segundos.
Nesse ponto sabemos o que fazer! Para poder utilizar a busca binária devemos ordenar o vetor com o mergesort, para que seja possível sobrar mais tempo para realizar as consultas.
Modificando o Código da Busca Bobinha para ordenar com MergeSort e realizar a busca binária, ficaria da seguinte forma:
1: #include <stdio.h> 2: #include <stdlib.h> 3: //Mergesort e Intercala OMITIDOS! Use a versão disponibilizada na Aula 3, seção 3.1 4: 5: int buscabinaria(int num,int *v,int l,int r) 6: { 7: if(l>r) return -1; 8: int meio=(l+r)/2; 9: if(less(v[meio],num)) 10: return achou(num,v,meio+1,r); 11: else if(lesseq(v[meio],num)) 12: return meio; 13: else 14: return achou(num,v,l,meio-1); 15: } 16: int main(void) 17: { 18: int vetor[140000]; 19: //preparando para gerar números aleatórios 20: srand(140000); 21: //preenchendo o vetor com números aleatórios inferiores a 1milhão 22: for(int i=0;i<140000;i++) 23: vetor[i]=rand()%1000000; 24: 25: //Tenha cuidado com a chamada do MergeSort, o intervalo é FECHADO [l,r] 26: //por isso é subtraído 1 do tamanho do vetor, para ficar [0,139999] 27: //que representa os 140000 elementos. 28: mergesort(vetor,0,140000-1); 29: 30: //fazendo 140000 buscas pelo número 1milhão 31: for(int i=0;i<140000;i++) 32: if(!buscabinaria(1000000,vetor,0,140000-1)) 33: printf("nao\n"); 34: else 35: printf("sim\n"); 36: } 37:
O código acima possui a implementação da BuscaBinária e utiliza o MergeSort implementado na Aula 3.
Seguimos a execução conforme abaixo:
ribas@jaguapitanga:/tmp$ make busca2 CFLAGS='-O2 -static' cc -O2 -static busca2.c -o busca2 ribas@jaguapitanga:/tmp$ time ./busca2 >/dev/null real 0m0.032s user 0m0.028s sys 0m0.005s
O que antes demorava mais de \(15\) segundos, passou a executar em apenas \(0,032\) segundos, bem abaixo do tempo limite estipulado no sistema MOJ.
Implementado um código que utiliza esta estratégia sai do custo de \(\mathcal{O}(N^2)\) operações para \(\mathcal{O}(N log{}(N) + N log{}(N))\), pois a ordenação fica em \(\mathcal{O}(N log{}(N)\), e a busca binária fica em \(\mathcal{O}(log{}(N))\), sendo executada \(N\) vezes, pois são feitas \(140000\) perguntas.
A busca que implementamos neste exercício mental trata de uma entrada próxima do pior caso, e que força uma implementação simples a ficar com custo proporcional a \(\mathcal{O}(N^2)\), enquanto que podemos implementar de uma maneira mais eficiente apenas pensando nos custos envolvidos.
1.5.1 Exercícios
- Resolva os exercícios propostos das aulas anteriores
- O algoritmo MergeSort é estável?
- Um algoritmo de intercalação é estável se não altera a posição relativa de elementos iguais. A função
intercala
discutida na Aula 3 é estável? E se a comparaçãolesseq(a[ia],b[ib])
, for trocada porless(a[ia],b[ib])
? - Implemente uma versão modificada do MergeSort com que ele considere os números ímpares sempre maiores que os números pares HOT
Dessa maneira o vetor, sem ordenação, abaixo:
30 44 1 93 44 77
Ficaria ordenado da seguinte maneira:
30 44 44 1 77 93
1.6 DONE Aula 6 22_fev avaliacao
- Atividade de Avaliação 1
- https://moj.naquadah.com.br/cgi-bin/score.sh/bcr-EDA2-2020_2-avaliacao-1
1.7 Aula 7 24_fev sobre_avaliacao quicksort
1.7.1 O QuickSort
Segue nesta seção um conjunto de vídeos a respeito do QuickSort, e que serão tema das próximas aulas, assista para que possamos elevar a discussão a respeito deste algoritmo.
1.7.2 Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na TERCEIRA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-quick
- Se você já conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
- Assista aos vídeos sobre QuickSort no youtube (elencados na seção anterior)
1.8 Aula 8 01_mar quickselect
1.8.1 Exercícios
- Escreca o algoritmo da separação
- Escreva uma função que rearranje um vetor
v[p..r]
de inteiros de modo que tenhamosv[p..j-1] <=0
ev[j..r] > 0
para algumj
emp..r+1
.
- Faz sentido exigir que
j
esteja emp..r
? - Procure fazer uma função rápida que não use vetor auxiliar.
- Repita o exercício depois de trocar
v[j..r] > 0
porv[j..r] >=0
. - Faz sentido exigir que
v[j]
seja0
?
- Faz sentido exigir que
- Um vetor
v[p..r]
está arrumado se existej
emp..r
tal quev[p..j-1] <=v[j] < v[j+1..r]
. Escreva um algoritmo que decida sev[p..r]
está arrumado. Em caso afirmativo, o seu algoritmo deve devolver o valor dej
. - Um programador inexperiente afirma que a seguinte implementação da função de separação rearranja o vetor v[p..r], com p < r, e devolve um índice j em p..r-1 tal que v[p..j] <= v[j+1..r].
int sep( int v[], int p, int r) { int q, i, j, t; i = p; q = (p + r) / 2; j = r; do { while (v[i] < v[q]) ++i; while (v[j] > v[q]) --j; if (i <= j) { t = v[i], v[i] = v[j], v[j] = t; ++i, --j; } } while (i <= j); return i; }
Mostre um exemplo onde essa função não dá o resultado esperado. E se trocarmos
return i
porreturn i-1
? É possível fazer algumas poucas correções de modo que a função dê o resultado esperado? - Qual o resultado da função separa quando os elementos de
v[p..r]
são todos iguais? E quandov[p..r]
é crescente? E quandov[p..r]
é decrescente? E quando cada elemento dev[p..r]
tem um de dois valores possíveis? - A função separa produz um rearranjo estável do vetor, ou seja, preserva a ordem relativa de elementos de mesmo valor? HOT
- Escreva uma versão recursiva da função separa.
- Implemente o QuickSort
- Submeta o vetor
77 55 33 99
indexado por1..4
à função quicksort. Teremos a seguinte sequência de invocações da função (observe a indentação):
quicksort( v,1,4) quicksort( v,1,2) quicksort( v,1,0) quicksort( v,2,2) quicksort( v,4,4)
Repita o exercício com o vetor
55 44 22 11 66 33
indexado por1..6
. - A função quicksort produz uma ordenação estável do vetor?
- Escreva uma versão não recursiva do algoritmo Quicksort. sol
- Execute todas as variações do QuickSort distribuídas no Benchmark de Ordenação e reflita sobre os resultados
1.9 Aula 9 03_mar hash
1.9.1 Exercícios
- Veja o material sobre hash do Prof. Paulo Feofiloff
- Você consegue aplicar as ideias de HASH nos exercícios
Remoção
eSanidade
? - Você consegue aplicar as ideias de HASH no exercício
Eleição U.R.S.A.L
? - Você consegue aplicar os conhecimentos, adquiridos pelos vídeos acima, no problema
Desfile dos Patos
(em nossa segunda lista de presença).
1.10 Aula 10 08_mar hash
1.10.1 Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na QUARTA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-hash
- Se você já conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
- Considere as técnicas de busca sequencial, busca binária e busca baseada em hashing:
- Descreva as vantagens e desvantagens de cada uma dessas técnicas, indicando em que situações você usaria cada uma delas.
- Qual é a eficiência de utilização da memória (relação entre o espaço necessário para dados e o espeço total necessário) para cada método?
- Sobre Tabelas HASH:
- É possível criar uma função HASH em que é garantido que nunca haverá colisão? Porquê?
- Quando existe colisão, quais estratégias podem ser utilizadas para contornad esse problema? Quando cada estratégia é melhor utilizada?
- Resolva os exerícios DESTA PROVA hot
1.11 Aula 11 10_mar hash
Na aula de hoje os alunos devem assistir ao vídeo abaixo (sobre double hash e tabela hash dinâmica) e às 9h00 o professor entrará em LIVE.
Primeiro assista o vídeo abaixo:
Às 9h00 entro ao vivo com vocês:
1.11.1 Exercícios
- Imagine que você tenha um bug em sua implementação de tabela hash utilizando hash-dupla (double-hashing) de tal forma que a primeira ou a segunda função de hash retornam sempre o mesmo valor (porém diferente de \(0\)). Descreva o que ocorre (exemplo: os custos de inserção e busca permanecem o esperado?) quando:
- a primeira hash está errada;
- a segunda hash está errada;
- ambas funções hash estão erradas.
- Resolva o exerício HASHIT da quarta lista de exerícios de fixação.
Veja a discussão deste exercício com o Monitor Felipe Borges
- Resolva o exercício da Lista de Presença, Desfile dos Patos com o seguinte algoritmo
1.12 DONE Aula 12 15_mar avaliacao
- Atividade de Avaliação 2
- https://moj.naquadah.com.br/cgi-bin/score.sh/bcr-EDA2-2020_2-avaliacao-2
1.13 Aula 13 17_mar assincrono
A aula de hoje terá caráter assíncrono. Os alunos devem relembrar os conceitos de árvores binárias.
Já deixo separado e recomendado que vocês iniciem a leitura de:
1.13.1 Vídeos de apoio
1.13.2 Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na QUINTA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-5alista
- Se você já conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
- Tente resolver o exercício https://br.spoj.com/problems/PREEMPOS/
1.14 Aula 14 22_mar árvores
1.14.1 Exercícios
- Lista de presença para o dia 22 de março está no moj
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-4
- utilize os mesmos logins das listas de presença
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-4
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na SEXTA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-6alista
- Se você já possui conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
1.15 Aula 15 24_mar exercícios
A aula de hoje é dedicada à resolução de exercícios relativos a árvores binárias.
1.15.1 Exercícios
- Lista de presença para o dia 29 de março está no moj
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-5
- utilize os mesmos logins das listas de presença
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-5
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na SEXTA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-6alista
- Se você já possui conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
- Suponha que as chaves
50 30 70 20 40 60 80 15 25 35 45 36
são inseridas, nesta ordem, numa árvore de busca inicialmente vazia. Desenhe a árvore que resulta. prof_Feofiloff - Considere árvores binárias de busca cujos nós têm a estrutura indicada abaixo. prof_Feofiloff
Escreva uma função que receba a raiz de uma tal árvore e o endereço de um nó
x
e devolva o endereço do pai dex
.typedef struct reg { int chave; int conteudo; struct reg *esq, *dir; } noh;
[NÚMERO DE NÓS.]
Escreva uma função que calcule o número de nós de uma árvore binária. prof_Feofiloff[FOLHAS.]
Escreva uma função que imprima, em ordem in-order, os conteúdos das folhas de uma árvore binária. prof_Feofiloff- Dada uma árvore binária, encontrar um nó da árvore cujo conteúdo tenha um dado valor val. prof_Feofiloff
[VARREDURA r-e-d.]
Escreva uma função que faça a varredura r-e-d (varredura prefixa) de uma árvore binária. prof_Feofiloff[VARREDURA e-d-r.]
Escreva uma função que faça varredura e-d-r (varredura posfixa) de uma árvore binária. prof_Feofiloff- Escreva uma função para calcular a altura de uma árvore binária
- Escreva uma função que determine a profundidade de um nó dado. prof_Feofiloff
- Escreva uma função que decida se uma dada árvore binária é quase completa. prof_Feofiloff
1.16 Aula 16 29_mar
1.16.1 Material de apoio
1.16.2 Exercícios
- Lista de presença para o dia 29 de março está no moj
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-6
- utilize os mesmos logins das listas de presença
- https://moj.naquadah.com.br/cgi-bin/contest.sh/bcr-EDA2-2020_2-presenca-6
- Resolva os exercícios de PQ prof_Feofiloff
1.17 Aula 17 31_mar
1.18 Aula 18 05_abr
1.18.1 Exercícios
- Resolva a Sétima Lista de presença MOJ
- (SW 9.1) Suponha que a sequência
P R I O * R * * I * T * Y * * * Q U E * * * U * E
é aplicada a uma PQ de máximo inicialmente vazia. Uma letra significa inserção e um asterisco significa remoção do máximo. Dê a sequência de letras produzida pelas remoções. Sedgewick - (SW 9.17) Um vetor em ordem decrescente é um heap decrescente? Um vetor em ordem crescente é um heap crescente? Sedgewick
- Insira os itens
E A S Y Q U E S T I O N
, nessa ordem, em um heap decrescente inicialmente vazio. Mostre o heap que resulta. Sedgewick - Escreva um método
isMaxHeap()
para verificar se o vetorpq[]
é um heap decrescente. O seu algoritmo deve consumir tempo linear. Repita para heap crescente. Sedgewick - Fila priorizada min/max. Projete um tipo-de-dados que dê suporte às seguinte operações: inserção, remoção do mínimo, remoção do máximo, encontrar o mínimo (sem remover), e encontrar o máximo (sem remover). As três primeiras operações devem consumir tempo logarítmico e as duas últimas devem consumir tempo constante. Dica: Use dois heaps. Sedgewick
- Escreva a API completa de Filas de Prioridade de maneira que ela suporte mais de um Fila de prioridades no seu programa
- Como você pode implementar um algoritmo de Ordenação utilizando o conceito de filas de prioridade?
- Rode o conjunto de benchmark de ordenação e idenfique o comportamento dos algoritmos HeapSort e PQsortsimple quando se comparado com o melhor quicksort e o mergesort
- O HeapSort é estável?
- Você é capaz de ressolver esta ISSUE?
- Qual implementação (em vetor ordenado ou não ordenado, com lista encadeada ordenada ou não ordenada, árvore binária em vetor) para encontrar os \(100\) menores elementos de um conjundo de \(10^6\) números aleatórios? Sedgewick
- Implemente e faça testes de desempenho
- Resolva o problema Classificados de Sementes utilizando os conceitos de fila de prioridades
- Você pode ler o Enunciado aqui
- O exercício pode ser resolvido na 3a lista de exercícios de fixação
- É possível resolver o problema kk-página utilizando os conceitos de fila de prioridades?
- Você pode ler o Enunciado aqui
- O exercício pode ser resolvido na 3a lista de exercícios de fixação
- Resolva o problema Eu posso advinhar a estrutura de dados! urionlinejudge
- Implemente a ADT de fila de prioridades para fazer a troca baseada em índice (como vimos no fim da última aula)
- Suponha que um vetor está preenchido com as seguintes chaves
E A S Y Q U E S T I O N
. Imprima o conteúdo do vetorpq
eqp
após a inserção dos elementos da fila de prioridades implementada no exercício 1.18.1.16 - Adicione a operação remover na sua implementação do problema 1.18.1.16
- esta função serve para quando se remover um elemento qualquer do vetor original
- Resolva o exercício Churrascarias da Avenida utilizando a implementação feita no exercício 1.18.1.16 spoj br
1.19 Aula 19 07_abr
1.20 DONE Aula 20 12_abr avaliacao
- Atividade de Avaliação 3
- https://moj.naquadah.com.br/cgi-bin/statistic.sh/bcr-EDA2-2020_2-avaliacao-3
1.21 Aula 21 14_abr
1.21.1 Material de Apoio
1.22 Aula 22 19_abr
- Exercícios
- Lista pública no CD-MOJ
- Resolva os exercícios propostos na SÉTIMA lista pública do CD-MOJ.
Para ganhar credenciais de acesso à lista, envie uma mensagem para @mojinhobot, no telegram AQUI, com o conteúdo:
participar bcr-EDA2-2020_2-7alista
- Se você já possui conta para a outra lista (disponibilizada na Aula 2), pode utilizar as mesmas credenciais.
1.23 Aula 23 21_abr feriado
1.24 Aula 24 26_abr
1.25 Aula 25 28_abr
1.25.1 Material de Apoio
1.26 Aula 26 03_mai
Às 9:00 iniciamos a live
1.27 Aula 27 05_mai
1.28 DONE Aula 28 10_mai avaliacao
- Atividade de Avaliação 4
1.29 Aula 29 12_mai
1.30 Aula 30 17_mai
1.31 Aula 31 19_mai
- Finalização da disciplina e notas disponibilizadas
2 Antes de Começar
Nesta disciplina é esperado que o aluno tenha conhecimento básico da
linguagem C
tais como:
- Ponteiros
- Strings
- Leitura da Entrada padrão
As subseções abaixo elencam alguns vídeos que recaptulam o conhecimento necessário.
2.1 Material no Youtube
Vídeos com material relacionado ao conteúdo esperado para uso na disciplina.
Tenho disponibilizado vários materiais em meu canal no YouTube, por favor, considere assinar o canal e deixar o joinha :)
2.1.1 Revisão de Ponteiros
Segue abaixo a playlist da revisão de ponteiros no Youtube. Por ora são 5 vídeos que exploram o que é necessário saber para a disciplina de EDA-2.
2.1.2 Strings em C
Aqui um apanhando geral em como se manipula strings na linguagem C. Em uma série que chamei de "Umas Palavras sobre String"
2.1.3 SCANF
O SCANF
é uma poderosa função capaz de ler dados da entrada padrão
(e de outros arquivos com suas aliases como fscanf(3)
.
Na série Detonando o SCANF temos, além do uso básico da função abordo algumas curiosidades sobre as funções.
3 Plano de Aulas
O plano de ensino e plano de aulas é um PLANO e pode sofrer modificações ao longo do semestre de acordo com o rendimento da turma.
Curso: | Engenharia de Software | Período Letivo | 2020/2 |
Disciplina: | Estrutura de Dados 2 | Código | |
Carga Horária: | 60 horas | Créditos | 04 |
3.1 Ementa
- Estruturas não-lineares. Árvores. Tabelas hash. Grafos
- Filas de prioridade. Heap
- Algoritmos de ordenação avançados \(\mathcal{O}(n\log{}n)\)
- Algoritmos de manupalição e análise de grafos
- Aplicações
3.2 Horários das aulas e atendimento
- Aulas:
- {segunda,quarta}-feira, das 8:00 às 9:50
- Atendimento:
- TODO a definir
- E-mail:
- bruno.ribas EM unb.br
- Página:
3.3 Método
Aula expositiva por meio de vídeos no Youtube (gravados ou em live stream), conversas periódicas em vídeo conferências com os alunos nos horários das aulas, quadro branco (representado pelo tablet), listas de exercícios.
3.4 Critérios de Avaliação
- A avaliação será baseada nas notas de quatro avaliações,
denotados, respectivamente, por \(A_1,A_2,A_3,A_4\)
- As notas serão compostas por um número inteiro no intervalo \([0,100]\);
- As avaliações serão compostas por questões, podendo ser, a
critério do professor, teóricas e/ou práticas
- O método de entrega será combina previamente com os alunos, podendo ser realizada por meio: do corretor automático MOJ; questionários no sistema SIGAA e/ou; submissão por e-mail para o professor;
- Será aplicada uma avaliação de reposição ao final do semestre para o aluno que necessite faltar uma das avaliações, desde que seja justificada previamente e seja corerente com aspectos legais que justifiquem a ausência;
- Qualquer tentativa de fraude nas provas implicará em média ZERO no semestre para todos os envolvidos.
3.4.1 Presença
A presença na disciplina se dará pela execução e entrega de exercícios determinados pelo professor.
Durante o semestre será disponibilizado diversas listas de presenças com prazos de entrega específicos que contemplarão as atividades que devem ser entregues para receber a presença nas datas específicas.
A entrega DENTRO do prazo é obrigatória para todos os alunos.
A presença será computada pela soma das atividades.
3.4.2 Menção Final
As notas serão calculadas conforme a equação abaixo:
\begin{align} M_F = \frac{A_1 + 2\cdot A_2 + 3\cdot A_3 + 4\cdot A_4}{10} \end{align}3.4.3 Critérios de aprovação
Obterá aprovação no curso o aluno que cumprir todas as exigências listadas abaixo:
- \(M_F >= 50\); e
- Presença em \(75\%\) ou mais das aulas.
Por fim, a menção final do curso é dada de acordo com a tabela abaixo:
\(M_F\) | Menção | Descrição |
\(0\) | SR | Sem rendimento |
\([1,29]\) | II | Inferior |
\([30,49]\) | MI | Médio Inferior |
\([50,69]\) | MM | Médio |
\([70,89]\) | MS | Médio Superior |
\([90,100]\) | SS | Superior |
3.5 Cronograma
Data | Atividade |
Semanas {1,2,3} | Ordenação Elementar, QuickSort, MergeSort |
22/Fev | Avaliação 1 |
Semanas {4,5,6} | Hashing, Filas de Prioridades |
15/Mar | Avaliação 2 |
Semanas {7,8,9,10} | Heap, Árvores Balanceadas |
12/Abr | Avaliação 3 |
Semanas {11,12,13,14,15,16} | Grafos |
10/Maio | Avaliação 4 |
3.6 Bibliografia
- CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Cli or. Algoritmos: Teoria e Prática. 2a.edição, Campus.
- (eBrary) CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L. Introduction to Algorithms. MIT Press, 2014.
- (eBrary) MEHLHORN, K; SANDERS, P. Algorithms and Data Structures: The Basic ToolBox, 1st. ed. Springer, 2008.
- (open access) HALIM, Steve S; HALIM, Felix. Competitive Programming, 1st ed, Lulu, 2010.
- (eBrary) STEPHENS, Rod. Essential Algorithms: A Pratical Approach to Computer Algorithms. John Wiley Sons, 2013.
- (open access) AHO, A. V.; ULLMAN, J. D. Foundations of Computer Science: C Edition (Principles of Computer Science Series), 1st ed., W. H. Freeman, 1994.
4 Monitor
O monitor da disciplina é o Felipe Borges, o contato segue abaixo:
- e-mail: bumbleblo2013 EM gmail.com
- Canal no YouTube
- Inscreva-se e ative o sininho :)
Para tirar duas dúvidas, envie um e-mail para o Felipe.
5 Presença
| FEVEREIRO | MARÇO | ABRIL | MAIO | %pres | Matrícula | | 01 03 08 10 17 22 24 | 01 03 08 10 15 17 22 24 29 31 | 05 07 12 14 19 26 28 | 03 05 10 12 17 19 | ----- | --------- | | X X X X X X X | X X X X X X - - X X | X X X X X X X | X X X X X X | 93 | 190041871 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180096991 | | - - - - - X X | X X X X X X - X X X | X X - X X X X | X X X X X X | 76 | 150004796 | | - - - - - X X | X X X X X X - X X X | X X X X X X X | X X X X X X | 80 | 190063441 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180030264 | | X X X X X X X | X X X X X X - X X X | X X X X X X X | X X X X X X | 96 | 160112974 | | X X X X X X X | X X X X X - X - - - | X X X X X X X | X X X X X X | 86 | 170138798 | | X X X X X - X | X X X X X - X - X X | X X - - - X X | X X X X X X | 80 | 170085023 | | X X X X X - - | - - - - - - - - - - | - - - - - X X | X X - X X X | 40 | 190011602 | | X X X X X - X | X X X X X X X X X X | X X - X X X X | X X X X X X | 93 | 190026243 | | X X X X X X X | X X X X X X - - X X | X X X X X X X | X X X X X X | 93 | 170031438 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180149687 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 190026600 | | X X X X X X X | X X X X X X X X X X | X X - - - X X | X X X X X X | 90 | 190026758 | | X X X X X X X | X X X X X - - - - - | X X X X X X X | X X X X X X | 83 | 140136355 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180113151 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180015834 | | X X X X X - - | - - - - - X - X - - | - - - - - X X | X X - X X X | 46 | 180119508 | | X X X X X - - | - - - - X X X X X X | X X X X X X X | X X X X X X | 80 | 160006163 | | X X X X X X X | X X X X X X X X X X | X X - - - X X | X X - X X X | 86 | 180100831 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180100840 | | X X X X X - X | X X X X X X X - - - | X X - X X X X | X X X X X X | 83 | 180145088 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 170010341 | | X X X X X - X | X X X X X - - - X X | X X - - - X X | X X - X X X | 73 | 160120918 | | X X X X X - X | X X X X X X - - - - | X X - - - X X | X X - X X X | 70 | 180148338 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180016938 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180052845 | | X X X X X X X | X X X X X X - - X X | X X X X X X X | X X X X X X | 93 | 170011267 | | X X X X X X X | X X X X X X X - - - | X X X X X X X | X X X X X X | 90 | 170129411 | | X X X X X - X | X X X X X X X X X X | X X X X X X X | X X X X X X | 96 | 180018159 | | X X X X X - X | X X X X X X - X - - | X X - - - X X | X X - X X X | 73 | 200038141 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180018574 | | X X X X X X X | X X X X X X X X - - | X X X X X X X | X X X X X X | 93 | 180136925 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180018604 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180102087 | | X X X X X X X | X X X X X X X X X X | X X - - - X X | X X - X X X | 86 | 180102613 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180102656 | | X X X X X X X | X X X X X - X X X X | X X X X X X X | X X X X X X | 96 | 170145514 | | X X X X X X X | X X X X X X X X X X | X X - - - X X | X X X X X X | 90 | 170013651 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 180042238 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 170013812 | | - - - - - - - | - - - - - - - - - - | - - - - - - - | - - - - - - | 0 | 160127327 | | X X X X X - X | X X X X X X X X - - | X X - X X X X | X X X X X X | 86 | 160152615 | | X X X X X X X | X X X X X X - - - - | X X X X X X X | X X X X X X | 86 | 170013910 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 190030879 | | X X X X X X X | X X X X X X X X X X | X X - X X X X | X X X X X X | 96 | 180103431 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180113861 | | X X X X X - X | X X X X X X - - - - | X X X X X X X | X X X X X X | 83 | 180021974 | | X X X X X - X | X X X X X - - X X X | X X X - - X X | X X X X X X | 83 | 150136862 | | - - - - - - - | - - - - - - - - - - | - - - - - - - | - - - - - - | 0 | 170039501 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180105256 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180125770 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 170080102 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180114077 | | X X X X X X - | - - - - X X X X X X | X X X X X X X | X X X X X X | 83 | 180114093 | | - - - - - - - | - - - - - - - - - - | - - - - - - - | - - - - - - | 0 | 150138202 | | - - - - - X - | - - - - - - - - - - | - - - - - X X | X X - X X X | 26 | 190134623 | | - - - - - X X | X X X X X X - - - - | X X X X X X X | X X - X X X | 66 | 180066382 | | X X X X X X X | X X X X X X - X X X | X X X X X X X | X X X X X X | 96 | 170017885 | | - - - - - - X | X X X X X X X X X X | X X X X X X X | X X X X X X | 80 | 170150747 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180106970 | | X X X X X X X | X X X X X X X - X X | X X X X X X X | X X X X X X | 96 | 180127969 | | X X X X X X X | X X X X X X - X X X | X X X X X X X | X X X X X X | 96 | 170080366 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180025601 | | - - - - - - - | - - - - - - - - - - | - - - - - - - | - - - - - - | 0 | 140156909 | | X X X X X X X | X X X X X X X X X X | X X X - - X X | X X X X X X | 93 | 170122549 | | X X X X X X X | X X X X X X X - X X | X X X X X X X | X X X X X X | 96 | 180129058 | | X X X X X X X | X X X X X X X - X X | X X X X X X X | X X X X X X | 96 | 180129147 | | X X X X X X X | X X X X X X - X X X | X X - - - X X | X X - X X X | 83 | 170153975 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | 180129287 | | X X X X X - X | X X X X X - - - - - | X X - - - X X | X X X X X X | 70 | 170062686 | | X X X X X - X | X X X X X X - - - - | X X X - - X X | X X X X X X | 76 | 180011308 | | X X X X X - X | X X X X X X - X X X | X X X X X X X | X X X X X X | 93 | 160141842 | | X X X X X - X | X X X X X X X X X X | X X - X X X X | X X X X X X | 93 | 180108344 | | X X X X X X X | X X X X X X - - X X | X X X X X X X | X X X X X X | 93 | 190019158 | | X X X X X - X | X X X X X - X X X X | X X X X X X X | X X X X X X | 93 | 140065547 | | X X X X X - X | X X X X X X - - X X | X X - X X X X | X X X X X X | 86 | 180027352 | | X X X X X X X | X X X X X X - X X X | X X X X X X X | X X X X X X | 96 | 160144485 | | X X X X X - X | X X X X X X - X X X | X X X - - X X | X X X X X X | 86 | 180130722 | | X X X X X X X | X X X X X X - X X X | - - X X X X X | X X X X X X | 90 | 180078224 | | X X X X X X X | X X X X X X X - X X | X X X X X X X | X X X X X X | 96 | 180114689 | | X X X X X - X | X X X X X X - X - - | X X X X X X X | X X - X X X | 83 | 180138596 | | X X X X X - X | X X X X X X X X X X | X X X X X X X | X X X X X X | 96 | 180068229 | | X X X X X X X | X X X X X X X X X X | X X - X X X X | X X X X X X | 96 | 170115500 | | X X X X X - - | - - - - - X X - - - | - - - - - X X | X X - X X X | 46 | 170047326 | | - - - - - - - | - - - - - - - - - - | - - - - - - - | - - - - - - | 0 | 130138304 | | X X X X X X X | X X X X X X X X X X | X X X X X X X | X X X X X X | 100 | MÁXIMO |
6 Notas
AVx
são as avaliaçõesPP
é a porcentagem de presença (consolidada nesta tabela no fim do semestre)- Na seção anterior você pode ver o acompanhamento das presenças
situação
é a situação final na disciplina, gerada após todas avaliações- As penalidades nas avaliações são relativas às chamadas ao
getlog
do MojinhoBot
matricula | PP | AV1 | AV2 | AV3 | AV4 | MM | situacao | nome |
190041871 | 93 | 017= 017 | 096= 096 | 100= 100 | 000= 000 | 50 | MM | ** |
180096991 | 100 | 100= 100 | 100= 100 | 100= 100 | 000= 000 | 60 | MM | ** |
150004796 | 76 | 041= 041 | 100= 100 | 000= 000 | 082= 082 | 56 | MM | ** |
190063441 | 80 | 073= 073 | 100= 100 | 100= 100 | 082= 082 | 90 | SS | ** |
180030264 | 100 | 018= 018 | 055= 055 | 045= 045 | 005= 005 | 28 | MI | ** |
160112974 | 96 | 017= 017 | 055= 055 | 100= 100 | 032= 032 | 55 | MM | ** |
170138798 | 86 | 100= 100 | 100= 100 | 100= 100 | 071= 071 | 88 | MS | ** |
170085023 | 80 | 000= 000 | 055= 055 | 000= 000 | 079= 079 | 43 | MI | ** |
190011602 | 40 | 000= 000 | ** | ** | ** | 0 | SR | ** |
190026243 | 93 | 000= 000 | 100= 100 | 005= 005 | 082= 082 | 54 | MM | ** |
170031438 | 93 | 100-05= 095 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
180149687 | 100 | 100-05= 095 | 089= 089 | 100= 100 | 072= 072 | 86 | MS | ** |
190026600 | 93 | 100-10= 090 | 100= 100 | 070= 070 | 005= 005 | 52 | MM | ** |
190026758 | 90 | 100= 100 | 000= 000 | 000= 000 | 100= 100 | 50 | MM | ** |
140136355 | 83 | 100= 100 | 100= 100 | 010= 010 | 061= 061 | 57 | MM | ** |
180113151 | 100 | 100= 100 | 100= 100 | 100= 100 | 042= 042 | 76 | MS | ** |
180015834 | 100 | 100= 100 | 100= 100 | 100= 100 | 071= 071 | 88 | MS | ** |
180119508 | 46 | 000= 000 | 000= 000 | ** | ** | 0 | SR | ** |
160006163 | 80 | 009= 009 | 100= 100 | 100= 100 | 000= 000 | 50 | MM | ** |
180100831 | 86 | 031= 031 | 000= 000 | 000= 000 | ** | 3 | MI | ** |
180100840 | 100 | 020-05= 015 | 100= 100 | 100-05= 095 | 100= 100 | 90 | SS | ** |
180145088 | 83 | 000= 000 | 099= 099 | 005= 005 | 082= 082 | 54 | MM | ** |
170010341 | 93 | 100= 100 | 073= 073 | 100= 100 | 082= 082 | 87 | MS | ** |
160120918 | 73 | 000= 000 | 055= 055 | 000= 000 | ** | 11 | SR | ** |
180148338 | 70 | 000= 000 | 096= 096 | 000= 000 | ** | 19 | SR | ** |
180016938 | 100 | 100-05= 095 | 100= 100 | 100= 100 | 071= 071 | 87 | MS | ** |
180052845 | 100 | 100= 100 | 055= 055 | 100= 100 | 093= 093 | 88 | MS | ** |
170011267 | 93 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
170129411 | 90 | 100= 100 | 100= 100 | 100= 100 | 071= 071 | 88 | MS | ** |
180018159 | 96 | 007= 007 | 006= 006 | 100= 100 | 100= 100 | 71 | MS | ** |
200038141 | 73 | 000-05= 000 | 008= 008 | ** | 000= 000 | 2 | SR | ** |
180018574 | 100 | 100= 100 | 100= 100 | 070= 070 | 100= 100 | 91 | SS | ** |
180136925 | 93 | 028-05= 023 | 055= 055 | 025= 025 | 079= 079 | 52 | MM | ** |
180018604 | 100 | 017-05= 012 | 100= 100 | 100= 100 | 082= 082 | 84 | MS | ** |
180102087 | 100 | 100= 100 | 100= 100 | 070= 070 | 000= 000 | 51 | MM | ** |
180102613 | 86 | 053= 053 | 000= 000 | 000= 000 | ** | 5 | MI | ** |
180102656 | 100 | 100= 100 | 100= 100 | 045= 045 | 082= 082 | 76 | MS | ** |
170145514 | 96 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
170013651 | 90 | 100= 100 | 000= 000 | 005= 005 | 100= 100 | 51 | MM | ** |
180042238 | 93 | 100-05= 095 | 095= 095 | 070= 070 | 082= 082 | 82 | MS | ** |
170013812 | 93 | 100-05= 095 | 063= 063 | 100= 100 | 085= 085 | 86 | MS | ** |
160127327 | 0 | ** | ** | ** | ** | 0 | SR | ** |
160152615 | 86 | 000= 000 | 100= 100 | 000= 000 | 082= 082 | 52 | MM | ** |
170013910 | 86 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
190030879 | 100 | 019-10= 009 | 100= 100 | 070= 070 | 100= 100 | 81 | MS | ** |
180103431 | 96 | 019= 019 | 100= 100 | 000= 000 | 000= 000 | 22 | MI | ** |
180113861 | 100 | 029-05= 024 | 100= 100 | 100= 100 | 100= 100 | 92 | SS | ** |
180021974 | 83 | 001= 001 | 096= 096 | 100= 100 | 082= 082 | 82 | MS | ** |
150136862 | 83 | 000= 000 | 100= 100 | 075= 075 | 021= 021 | 50 | MM | ** |
170039501 | 0 | ** | ** | ** | ** | 0 | SR | ** |
180105256 | 100 | 019-05= 014 | 100= 100 | 100= 100 | 082= 082 | 84 | MS | ** |
180125770 | 100 | 100= 100 | 100= 100 | 100= 100 | 100= 100 | 100 | SS | ** |
170080102 | 93 | 100= 100 | 100= 100 | 100= 100 | 005= 005 | 62 | MM | ** |
180114077 | 100 | 100= 100 | 100= 100 | 100= 100 | 100= 100 | 100 | SS | ** |
180114093 | 83 | 020-05= 015 | 100= 100 | 100= 100 | 100= 100 | 91 | SS | ** |
150138202 | 0 | 000= 000 | ** | ** | ** | 0 | SR | ** |
190134623 | 26 | 018= 018 | ** | ** | ** | 2 | SR | ** |
180066382 | 66 | 017= 017 | 100= 100 | 015= 015 | ** | 26 | SR | ** |
170017885 | 96 | 100= 100 | 100= 100 | 100= 100 | 000= 000 | 60 | MM | ** |
170150747 | 80 | ** | 055= 055 | 100= 100 | 045= 045 | 59 | MM | ** |
180106970 | 100 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
180127969 | 96 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
170080366 | 96 | 028= 028 | 100= 100 | 100= 100 | 021= 021 | 61 | MM | ** |
180025601 | 100 | 100-05= 095 | 100= 100 | 100= 100 | 093= 093 | 96 | SS | ** |
140156909 | 0 | ** | 000= 000 | ** | ** | 0 | SR | ** |
170122549 | 93 | 100-05= 095 | 099= 099 | 100= 100 | 024= 024 | 68 | MM | ** |
180129058 | 96 | 100= 100 | 100= 100 | 100= 100 | 082= 082 | 92 | SS | ** |
180129147 | 96 | 099= 099 | 097= 097 | 100= 100 | 038= 038 | 74 | MS | ** |
170153975 | 83 | 100= 100 | 000= 000 | 000= 000 | ** | 10 | MI | ** |
180129287 | 100 | 019= 019 | 100= 100 | 100= 100 | 042= 042 | 68 | MM | ** |
170062686 | 70 | 000-05= 000 | 100= 100 | 000= 000 | 072= 072 | 49 | SR | ** |
180011308 | 76 | 000= 000 | 000= 000 | 015= 015 | 082= 082 | 37 | MI | ** |
160141842 | 93 | 000= 000 | 095= 095 | 045-20= 025 | 082= 082 | 59 | MM | ** |
180108344 | 93 | 000= 000 | 100= 100 | 000= 000 | 000= 000 | 20 | MI | ** |
190019158 | 93 | 017-05= 012 | 096= 096 | 100= 100 | 000= 000 | 50 | MM | ** |
140065547 | 93 | 002= 002 | 100= 100 | 045= 045 | 042= 042 | 50 | MM | ** |
180027352 | 86 | ** | 100= 100 | 000= 000 | 000= 000 | 20 | MI | ** |
160144485 | 96 | 100= 100 | 078= 078 | 015= 015 | 072= 072 | 58 | MM | ** |
180130722 | 86 | 000= 000 | 100= 100 | 100= 100 | 042= 042 | 66 | MM | ** |
180078224 | 90 | 059= 059 | 055= 055 | 045= 045 | 082= 082 | 63 | MM | ** |
180114689 | 96 | 020-10= 010 | 100= 100 | 100= 100 | 100= 100 | 91 | SS | ** |
180138596 | 83 | ** | 055= 055 | 045= 045 | 000= 000 | 24 | MI | ** |
180068229 | 96 | 005= 005 | 055= 055 | 045= 045 | 082= 082 | 57 | MM | ** |
170115500 | 96 | 020= 020 | 100= 100 | 005= 005 | 082= 082 | 56 | MM | ** |
170047326 | 46 | ** | 000= 000 | ** | ** | 0 | SR | ** |
130138304 | 0 | ** | ** | ** | ** | 0 | SR | ** |
média | ** | 50 | 79 | 64 | 62 | ** | ** | Média da turma |