- Nunca ouvi falar sobre isso antes
- Já ouvi falar, mas não conheço os detalhes
- Conheço, mas ainda não programei/usei
- Posso programar/usar, mas não com muita confiança ou rapidez
- Posso programar/usar com rapidez e confiança
-
Conceitos Básicos de Programação: Sequência, Seleção, Repetição
-
Recursão/Backtracking
-
Problema Ad-Hoc
-
C++ STL (Standard Template Library)
-
Java API (Application Programming Interface)
-
Array/C++ STL vector/Java Vector
-
Técnicas Básicas de Bitmask, Manipulação de Bits
-
Lista Encadeada/C++ STL list/Java LinkedList
-
Pilha/Fila/Fila Dupla/C++ STL stack/queue/deque/Java Stack/Queue/Deque
-
Árvore Binária de Busca/C++ STL map/set/Java TreeMap/TreeSet
-
Árvore Binária Balanceada/AVL/Red-Black (com seu próprio código)
-
Tabela Hash/Java HashMap (C++11 unordered_map)
-
Heap/Fila de Prioridade/C++ STL priority_queue/Java PriorityQueue
-
Grafo/Matriz de Adjacência/Lista de Adjacência/Lista de Arestas
-
Conjuntos Disjuntos Union-Find
-
Árvore de Segmentos
-
Árvore Binária Indexada (BIT/Binary Indexed Tree/Árvore de Fenwick)
-
Bubble Sort
-
Insertion Sort
-
Selection Sort
-
Merge Sort
-
Quick Sort
-
Heap Sort
-
Ordenação com Vários Campos (ex.: ordenação com Struct, Classes)
-
Counting Sort
-
Contagem de Inversões (com Merge Sort)
-
Busca Completa/Força Bruta/Backtracking Recursivo/Iterativo
-
Consigo resolver o problema das N-Rainhas até N ≤ 14 (N-Queens Problem)
-
Busca em Espaço de Estados (State-Space Search)
-
Meet in the Middle (Busca Bidirecional)
-
Algoritmo A* (tradicional)
-
Técnica de Aprofundamento Iterativo (IDA*)
-
Princípios de Divisão & Conquista
-
Técnicas de Busca Binária
-
Gulosos
-
Ideias Básicas de Programação Dinâmica (PD)
-
Soma Máxima 1D/2D/etc
-
Algoritmo de Kadane para Soma Máxima 1D/2D/etc
-
Longest Increasing Subsequence (LIS/Maior Subsequência Crescente)
-
Solução em tempo O(n log k) para LIS
-
Coin Change (CC/Problema do Troco)
-
Algoritmo da Mochila 0-1/Soma de Subconjuntos (Subset Sum)
-
Problema do Caixeiro Viajante (Traveling Salesman Problem/TSP)
-
PD e sua relação com DAGs (Grafos Direcionados Acíclicos)
-
PD "em Árvore"
-
Longest Common Subsequence (LCS/Maior Subsequência Comum)
-
Alinhamento de Strings/Distância de Edição
-
Técnicas de Otimização de PD
-
Caixeiro Viajante Bitônico (Bitonic TSP)
-
Multiplicação de Cadeia de Matrizes (Matrix Chain Multiplication/MCM)
-
Árvore Binária de Busca Ótima (Optimal Binary Search Tree/OBST)
-
Busca/Percurso em Profundidade (Depth-First Search/DFS)
-
Ordenação Topológica
-
Encontrar Componentes Conectadas/Flood Fill
-
Encontrar Pontos de Articulação/Pontes em tempo O(V+E)
-
Encontrar Comp. Fortemente Conectadas (SCC) num Grafo Dirigido em O(V+E)
-
Busca/Percurso em Amplitude (Breadth-First Search/DFS)
-
Kruskal (Árvore Geradora Mínima/Minimum Spanning Tree/MST)
-
Prim (Árvore Geradora Mínima/Minimum Spanning Tree/MST)
-
Dijkstra (Caminho Mínimo de Fonte Única)
-
Bellman Ford (Caminho Mínimo de Fonte Única)
-
Floyd Warshall (Caminho Mínimo entre Todos os Pares)
-
Ford Fulkerson/Edmonds Karp (Fluxo Máximo, Corte Mínimo)
-
Caminhos Independentes e Arestas-Disjuntos
-
Fluxo (Máximo) a Custo Mínimo
-
Caminhos menores/maiores/entre Todos os Pares em uma Árvore
-
Menor Ancestral Comum (Lowest Common Ancestor/LCA)
-
Grafo/Caminho/Ciclo Euleriano
-
Problema do Carteiro Chinês
-
Grafo Direcionado Acíclico (Directed Acyclic Graph/DAG)
-
Caminho Mínimo/Máximo em DAGs
-
Contando Caminhos em DAGs
-
Cobertura do Menor Caminho (Min Path Cover) em DAGs
-
Grafo Bipartido
-
Emparelhamento Máximo em Grafos Bipartidos (MCBM)
-
Cobertura Mínima de Vértices em Grafos Bipartidos (Teorema de Konig)
-
Maior Conjunto Independente/Dominante em Grafos Bipartidos
-
Algoritmo de Caminho Aumentante p/ Emp. Máximo em Grafos Bipartidos
-
Algoritmo de Hopcroft–Karp p/ Emp. Máximo em Grafos Bipartidos
-
Algoritmo Kuhn Munkres/Húngaro p/ Emp. Máximo em Grafos Bipartidos
-
Algoritmo de Edmonds (Blossom Shrinking) para Emparelhamento Geral
-
Sequências e Sistemas de Numeração
-
Polinômios
-
Big Integer
-
Número Base
-
Combinatória
-
Fatorial/Fibonacci
-
Teoria dos Números
-
Geração de Números Primos: Crivo de Eratóstenes
-
Teste de Primos
-
Algoritmo de Miller–Rabin
-
Fatoração de Primos por Divisão por Tentativa
-
Algoritmo Rho de Pollard (Pollard's Rho)
-
Crivo Modificado
-
MDC/MMC/Algoritmo de Euclides
-
Euclides Estendido/Equação Linear Diofantina
-
Phi de Euler
-
Aritmética Modular
-
Fibonacci/Factorial
-
Divisibilidade
-
Detecção de Ciclos/Algoritmo de Tortoise–Hare
-
Exponenciação Rápida via Divisão & Conquista
-
Exponenciação de Matrizes
-
Álgebra Linear/Eliminação Gaussiana
-
Gramáticas BNF (Forma(lismo) de Backus–Naur
-
Algoritmo Knuth–Morris–Pratt (KMP) para Correspondência de Strings
-
Aho–Corasick
-
Trie de Sufixos e suas aplicações
-
Árvore de Sufixos e suas aplicações
-
Construção de Array de Sufixos em tempo O(n log n) e Aplicações
-
Geometria Básica, ex.: área, perímetro, distância Euclidiana, Trigonometria
-
Intersecção entre Segmentos de Reta
-
Teste do Sentido Anti-Horário (CCW Test)
-
Teste do Incírculo
-
Área e Perímetro de um Polígono Arbitrário
-
Testar se um Polígono é Convexo
-
Testar se um Ponto está dentro de um Polígono
-
Cortar um Polígono (Convexo) com uma Linha Reta
-
Varredura de Graham (Fecho Convexo)
-
Paradigma da Varredura no Plano
-
Intersecção de Área ou Volume
-
Triangulação
-
Problema dos Pares Mais Próximos
-
Estatísticas de Ordem: Algoritmo de Seleção em Tempo Linear
-
Jogos clássicos de Tabuleiro, Cartas, Xadrez, jogos populares de Intelig. Artificial
-
Ambiente e sistema operacional (Ubuntu) Linux