Programação avançada

Professor: Rodrigo de Barros Paes

Grupo de email

pa-ic@googlegroups.com

Solicite a sua inscrição em: https://groups.google.com/d/forum/pa-ic

Como se matricular?

Se você é aluno de Engenharia da Computação ou Ciência da Computação da UFAL, procure as disciplinas de Programação Avançada.

As ementas que existem hoje são:

Checklist de assuntos

Estude os tópicos abaixo:

  • Nível 1:
    • Saber usar direito a biblioteca padrão
    • Busca Binária
    • Busca Ternária
    • DFS/BFS
    • Bicoloração em grafos
    • Dijkstra, Bellman-Ford, Floyd-Warshall
    • PD bottom-up/top-down
    • Exponenciação rápida
    • Segment Tree
    • Fenwick Tree
    • Matemática básica (combinatória básica, gcd, lcm, etc)
  • Nível 2:
    • Fluxo em grafos (ford-fulkerson)
      • Entender a relação entre minimo corte e máximo fluxo
    • Relações recursivas lineares com matriz (por exemplo: Fibonacci ou caminhos de tamanho k num grafo dirigido de 1 até n)
    • SQRT decomposition com "buckets"
    • Algoritmo de Mo (entra em SQRT)
    • PD em árvore
    • Merge sort tree
    • Inclusão-exclusão
    • Crivo e derivados (coisas que usam a série harmônica)
    • Geometria básica
      • Distância entre pontos, distância entre retas, convex-hull (olhar a parte de geometria do CP3)
  • Nível 3:
    • Line sweep
    • Decomposição em centroide de árvore
    • 2-sat
    • FFT/NTT
    • Otimização de pd
    • Segment tree 2d
    • Tópicos de matemática mais avançada do CP3

No roteiro da UFMG, eles sugerem vários problemas para os tópicos acima. Use para praticar: http://wiki.maratona.dcc.ufmg.br/index.php/Roteiros

Contests

Github

Aprenda com as soluções de seus colegas e contribua com a sua solução: https://github.com/r0drigopaes/maratonaic

Problemas

Só para esquentar

Fila e Fila de Prioridades

[Notas de aula]

Pilha

Dicionário

Busca completa / Backtracking

[Vídeo aula]

[Notas de aula]

Árvore

Grafos

Notas de aula:

Programação Dinâmica

[Vídeo aulas]

[notas de aula]

Range Minimum Query

Range Sum Query

Estrutura de dados "sagazes"

Strings

  • KMP
  • Suffix trie, tree e array
  • Longest Repeated Substring
  • Longest Common Substring

Comentários

Exponenciação de matrizes utilizando dividir e conquistar. Mais especificamente Exponentiation By Squaring

Problema de cadeia de markov. Os comentários estão em:

https://youtu.be/CnhNkRwHytQ

Bibliografia

  1. Introdução à Programação com a Linguagem C: Aprenda a resolver problemas com uma abordagem prática.
    1. Rodrigo de Barros Paes. Editora: Novatec, 2016.
  2. Skiena, Steven S, Programming Challenges: The Programming Contest Training Manual (Texts in Computer Science), 2003
  3. Cormen, Thomas H., et al. Introduction to algorithms. Ed 3. Cambridge: MIT press, 2009.
  4. Halim, Steven. Competitive Programming 3. 2013.Available at: https://sites.google.com/site/stevenhalim/

Sites

  • https://www.hackerearth.com/codemonk/
  • https://www.topcoder.com/community/competitive%20programming/
  • http://codeforces.com
  • https://uva.onlinejudge.org
  • https://thehuxley.com

Fotos