Informações Gerais
-
Turmas Teóricas: Terças (CB15) e Sextas (CB02) às 10h
-
Laboratório: Sextas (SI03 e SI05) às 14h
-
Informações adicionais: PDF
-
Professor: Emilio Francesquini - francesquini@ic.unicamp.br
-
Monitores: mc202bc-monitores@googlegroups.com
-
João Pedro Congio Martins
-
Marcos Roberto e Souza
-
Maurício Gagliardi Palma
-
Nathália Harumi Kuromiya
-
-
Fórum de discussão de dúvidas e anúncios: https://groups.google.com/forum/#!forum/mc202bc1s2017
O horário de atendimento será prestado sempre depois das aulas pelo professor e pelos monitores durante o laboratório. Caso necessário, atendimentos extras podem ser combinados por e-mail.
Avisos
As notas da P2 já estão online. |
Datas Importantes
-
Primeira prova: 25/Abril/2017
-
Segunda prova: 23/Junho/2017
-
Exame: 11/Julho/2017
-
Lab. 1: 03/04/2017 - Paciência
-
Lab. 2: 30/04/2017 - Pílulas de Nanicolina
-
Lab. 3: 30/05/2017 - Googol
-
Lab. 4: 18/06/2017 - O Jogo do Bacon!
Listas de Exercícios
Esta lista deverá ser entregue no máximo até dia 23/06 antes do início da prova.
Atenção: Essa lista de exercícios substituirá a nota de apenas um dos testes caso você tenha perdido. Não substituirá testes com nota zero. |
Os exercícios a serem entregues são:
-
Lista 1.30
-
Lista 1.34
-
Lista 2.12
-
Lista 2.17
-
Lista 3.4
-
Lista 3.5
-
Lista 3.11
-
Lista 4.6
-
Lista 4.14
-
Lista 4.18
-
Lista 4.19
-
Lista 5.10
-
Lista 5.11
-
Lista 5.13
Laboratórios
Os laboratórios deverão ser entregues via Susy: https://susy.ic.unicamp.br:9999/mc202bc/
-
Lab. 1: Paciência
-
Enunciado: PDF
-
-
Lab. 2: Pílulas de Nanicolina
-
Enunciado: PDF
-
Código Auxiliar: bitstream.h
-
Versão Executável - Use como modelo para o seu código:
-
Linux: nanicolina
Para executar, baixe o arquivo nanicolina, dê permissão de execução:
$ chmod
a+x
nanicolina
$ ./nanicolina
-
Windows: nanicolina.exe
-
-
Avaliação do Lab. 02: Por limitações do Susy, o Lab. 02 será avaliado individualmente pelos monitores. A submissão continua sendo pelo Susy! Contudo, o processo de correção não será imediato e feito pelo Susy como vocês estão acostumados. Existe um corretor automático (semelhante ao utilizado pelo Susy) que será empregado pelos monitores. Todos os arquivos de entrada de teste e o corretor automático estão disponíveis. Para utilizá-lo basta baixar o arquivo lab02_testes_abertos.zip, descompactá-lo, colocar o seu arquivo.c no mesmo diretório, e executar o script de correção. Assim, você pode testar o seu programa antes de fazer a submissão quantas vezes quiser.
-
-
Lab. 3: Googol
-
Enunciado: PDF
-
Aqui estão os resultados do desafio. As barras representam quantas vezes o programa é mais lento do que o programa mais rápido de todos ("Professor Karatsuba + Base Variável"). Por exemplo, a versão "Professor Simples" é 10,40X mais lenta que a versão mais elaborada. Dois alunos bateram o tempo do meu programa na versão simples (base 10) e na versão com Karatsuba!! Parabéns! Apenas as submissões que passaram em TODOS os testes do Susy estão abaixo. Os nomes dos alunos foram substituídos por AAA, BBB, … Se você quiser que seu nome apareça ou apenas quiser saber quem é você me mande um e-mail!
-
-
Lab. 4: O Jogo do Bacon!
-
Enunciado: PDF
-
Implementação do professor:
-
Exemplos de entrada e saída: atores.exemplo, consulta.exemplo, saida.exemplo
-
Para executar basta fazer ./bacon atores.exemplo consulta.exemplo
-
-
Script para baixar dados do IMDB (Linux): baixa_e_processa_arquivos.sh
-
Infelizmente por motivos legais não posso colocar online os arquivos pré-processados.
-
-
Notas
Você encontra as notas neste link.
Aqui estão os critérios utilizados para a correção assim como os comentários para cada um dos laboratórios submetidos:
- Laboratório 02
- Laboratório 03
- Laboratório 04
Aulas
-
03/03/2017 - Aula 1
-
Apresentação do curso e revisão relâmpago.
-
Slides: PDF
-
-
07/03/2017 - Aula 2 - Listas ligadas - Parte 1 - Definição e operações básicas.
-
Slides: PDF
-
-
10/03/2017 - Aula 3 - Listas ligadas - Parte 2 - Ordenação.
-
Slides: PDF
-
-
14/03/2017 - Aula 4 - Listas ligadas - Parte 3 - Listas duplamente ligadas e listas circulares, Pilhas.
-
Slides: PDF
-
Códigos: Pilha com vetores
-
-
17/03/2017 - Aula 5 - Pilhas (Continuação), Filas.
-
Slides: PDF
-
-
21/03/2017 - Aula 6 - µ-revisão e Teste 1.
-
Enunciado: Teste 1
-
Solução: Solução Teste 1
-
-
24/03/2017 - Aula 7 - Comentários do Teste 1, Árvores Binárias Parte 1.
-
Slides: PDF Aulas 07 e 08
-
-
28/03/2017 - Aula 8 - Árvores Binárias Parte 2.
-
Slides: PDF Aulas 07 e 08
-
-
31/03/2017 - Aula 9 - Árvores Binárias Conclusão, Jogo dos Animais
-
Códigos: Versão Chutadora (RUIM), Versão Inquisitiva (BOA).
Note que nenhuma das implementações está completa. No final do jogo a memória não é liberada.
Exercício: Modifique o código para liberar a memória alocada para cada um dos nós da árvore.
-
-
04/04/2017 - Aula 10 - Filas com prioridade (heaps) e Heapsort.
-
07/04/2017 - Aula 11 - Heaps Parte 2, Teste 2
-
Enunciado: Teste 2
-
-
11/04/2017 - Aula 12 - Heaps Final, Árvores Binárias de Busca
-
Código: Rascunho da implementação de Heap: heap.c
-
Slides: PDF Aula 12
-
-
14/04/2017 - Não haverá aula - Sexta-feira Santa
-
18/04/2017 - Aula 13 - Árvores Binárias de Busca Parte 2, Revisão para prova
-
21/04/2017 - Não haverá aula - Tiradentes
-
25/04/2017 - Aula 14 - Prova 1
-
28/04/2017 - Aula 15 - Plantão de dúvidas
-
02/05/2017 - Aula 16 - Árvores Binárias Balanceadas de Busca
-
Slides: PDF Aula 16,17,18
-
-
05/05/2017 - Aula 17 - Árvores Rubro-Negras - Inserção
-
Slides: PDF Aula 16,17,18
-
-
09/05/2017 - Aula 18 - Árvores Rubro-Negras - Remoção
-
Slides: PDF Aula 16,17,18
-
-
12/05/2017 - Aula 19 - Tabelas de Espalhamento
-
Slides: PDF Aula 19,20
-
-
16/05/2017 - Aula 20 - Tabelas de Espalhamento, Teste 3
-
Slides: PDF Aula 19,20
-
Enunciado: Teste 3
-
-
19/05/2017 - Aula 21 - Grafos - Parte 1
-
Slides: PDF Aula 21
-
-
23/05/2017 - Aula 22 - Grafos - Parte 2
-
Série Numb3rs: http://www.imdb.com/title/tt0433309/
-
Episódio Algoritmo de Dijkstra: http://www.imdb.com/title/tt1026015/?ref_=ttep_ep23
-
-
Uso de grafos no mercado de arbitragem de moedas: Veja o livro do R. Sedgewick e K. Wayne "Algorithms", Quarta Edição, Páginas 679 a 681
-
-
26/05/2017 - Aula 23 - Grafos - Parte 3
-
02/06/2017 - Aula 24 - Árvores B - Definição, Inserção
-
Slides: PDF Aula 24,25
-
-
06/06/2017 - Aula 25 - Árvores B - Remoção
-
Slides: PDF Aula 24,25
-
-
09/06/2017 - Aula 26 - Bloom Filters, Teste 4
-
Slides: PDF Aula 26
-
Enunciado: Teste 4 - A, Teste 4 - B
-
-
13/06/2017 - Aula 27 - Skip Lists
-
Slides: PDF Aula 27
-
-
16/06/2017 - Não haverá aula - Corpus Christi
-
20/06/2017 - Aula 28 - Revisão
-
23/06/2017 - Aula 29 - Entrega da Lista Coringa, Prova 2
Recursos Online
-
Página da disciplina MC102 - Algoritmos e Programação de Computadores — Listas de exercícios e slides das aulas
-
Projeto de Algoritmos (em C) — Página do professor Paulo Feofiloff sobre estruturas de dados e seus algoritmos
Programa da Disciplina
-
Estruturas ligadas: nó, apontador, variável apontadora, alocação dinâmica de memória
-
Listas ligadas simples: operações básicas
-
Comparação de listas ligadas com vetores
-
Algoritmos gerais para listas simples: enumeração, inversão, cópia, concatenação
-
Pilhas, filas, e aplicações (eliminação de recursão)
-
Intercalação (merge) de listas e mergesort; análise informal
-
Variações: listas circulares, duplamente ligadas, com cabeça.
-
Algoritmos de ordenação
-
Árvores binárias: representação e percurso (recursivo)
-
Aplicação: árvores de busca (com inserção e remoção)
-
Árvores binárias de busca balanceadas
-
Fila de prioridade (heap) implementação com vetor e heapsort
-
Árvores gerais: definição, representação por listas, percursos
-
Listas generalizadas e uso para representar estruturas ligadas em geral
-
Árvores B e generalizações
-
Hashing: conceito, implementação, técnicas em arquivos
-
Grafos: conceito, representação por matrizes e listas ligadas
-
Percurso de grafos em largura e profundidade
-
Implementação de estruturas de dados em disco
Critério de Avaliação
-
Serão aplicadas 2 provas teóricas P1 e P2. A média das provas teóricas será calculada da seguinte forma:
-
Serão aplicadas 4 mini-provas de curta duração (~30 min.) sempre no final das aulas. Cada mini-prova i (Minii) valerá de 0 a 1. A média das mini-provas MMiniP será dada por:
-
Caso alguém tenha perdido alguma das mini-provas (e apenas neste caso) haverá a oportunidade de fazer uma mini-prova substitutiva. Ela ocorrerá no final do semestre e a data será definida oportunamente. Contudo, caso o aluno tenha perdido mais de uma mini-prova, apenas a nota de uma das mini-provas perdidas será substituida. Portanto, atenção às faltas!
-
Durante o semestre serão dados 4 laboratórios. Os laboratórios 1 e 2 terão peso 2 e os demais peso 3. A média das mini-provas será avaliada em conjunto com as notas dos laboratórios e terá peso 3. A média ML dos laboratórios e mini-provas será dada por:
-
A média M, antes do exame, será calculada da seguinte maneira:
Note a importância de obter bom desempenho tanto nas provas quanto nos laboratórios.
-
Caso o aluno tenha média 2,5 ≤ M < 5,0, ele poderá fazer um exame final (seja E a nota do exame).
-
A nota final, F, será calculada como:
-
O aluno estará aprovado caso sua nota final F seja maior ou igual a 5,0 e estará reprovado caso contrário.
Bibliografia
-
[Feofiloff] P. Feofiloff. Algoritmos em Linguagem C. Campus-Elsevier, 2009.
-
[Sedgewick] R. Sedgewick. Algorithms in C. Addison-Wesley, 1990.
-
[TLA] A. M. Tenenbaum, Y. Langsam, and M. J. Augenstein. Data Structures using C. Prentice-Hall, 1990.
-
[CLRS] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and Clifford Stein. Introduction to Algorithms, second edition. MIT Press, 2009.
-
[Mamber] U. Mamber, Introduction to Algorithms - A Creative Aproach, Addison-Wesley Publishing Company, 1989.
-
[Knuth] D. E. Knuth. The Art of Computer Programming, volume I: Fundamental Algorithms. Addison-Wesley, 1978.
-
[KR] B. W. Kernighan, D. M. Ritchie. The C Programming Language (2a. edição), Prentice-Hall, 1988