Cheat sheet

Condições, invariantes, recorrências e custos para rever os algoritmos da cadeira.

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Em grafos, n=∣V∣n=|V| conta vértices e m=∣E∣m=|E| conta arestas. Noutras entradas, nn conta elementos. Custos de grafos assumem listas de adjacência. Cada secção liga à explicação completa para derivar fórmulas e reconstruir soluções.

Qual algoritmo de grafos

ObjetivoUsaSó seCusto
Menos arestas desde ssBFSPesos iguais ou ignoradosO(n+m)O(n+m)
Explorar e ciclos dirigidosDFSCinzento indica cicloO(n+m)O(n+m)
Ordenar dependênciasKahn ou DFSDAG; Kahn emite nnO(n+m)O(n+m)
Regiões mútuasKosaraju ou TarjanDirigidoO(n+m)O(n+m)
Ligar tudo pelo mínimoKruskalNão dirigido; negativos permitidosO(mlog⁡m+n)O(m\log m+n)
Ligar tudo pelo mínimoPrimNão dirigido; reinicia por componenteO((n+m)log⁡n)O((n+m)\log n), denso O(n2)O(n^2)
Uma origem, sem negativosDijkstraPesos não negativosO((n+m)log⁡n)O((n+m)\log n)
Uma origem, com negativosBellman-FordDeteta ciclo negativo alcançávelO(nm)O(nm)
Uma origem em DAGOrdem topológicaSem ciclos; admite negativosO(n+m)O(n+m)
Todos os pares, densoFloyd-WarshallDiagonal negativa denuncia cicloΘ(n3)\Theta(n^3)
Todos os pares, esparsoJohnsonSem ciclos negativosO(nm+n(n+m)log⁡n)O(nm+n(n+m)\log n)
Fluxo máximoEdmonds-KarpCapacidades não negativas; BFS residualO(nm2)O(nm^2)
Emparelhar bipartidoEmparelhamentoCapacidades 1; até min⁡(∣L∣,∣R∣)\min(\lvert L\rvert,\lvert R\rvert) aumentosO((min⁡(∣L∣,∣R∣)+1)(n+m))O((\min(\lvert L\rvert,\lvert R\rvert)+1)(n+m))

Heap com duplicados em Dijkstra guarda O(m)O(m) pares e custa O(n+mlog⁡(m+1))O(n+m\log(m+1)). Nunca alteres chave na heap sem reorganizar. MST minimiza soma total; árvore de Dijkstra minimiza distâncias à raiz.

Invariantes que decidem

  • BFS: marca cada vértice quando o insere na fila, e a fila sai por ordem de distância. O vetor de pais reconstrói o caminho; um vértice inalcançável mantém distância desconhecida, nunca zero.
  • DFS: cada vértice está branco (por descobrir), cinzento (chamada ativa) ou preto (chamada terminada). Num grafo não dirigido, a aresta de regresso ao pai não conta como ciclo.
  • Kosaraju: primeira DFS completa guarda términos; segunda em GTG^T por término decrescente.
  • Tarjan: ao seguir a aresta u→vu\to v, se vv ainda não foi visitado, explora e propaga low[v]; se vv está na pilha, atualiza com index[v]; se vv já saiu da pilha, ignora porque pertence a uma componente fechada. Quando low[u]==index[u], desempilha até uu e fecha uma componente.
  • Corte MST: AA respeita corte sem o atravessar; mais leve é segura. Acíclico só não chega.
  • Bellman-Ford: após n−1n-1 passagens, todos os caminhos com até n−1n-1 arestas já foram contemplados; se uma passagem extra ainda melhora um vértice alcançável desde a origem, há um ciclo negativo alcançável.
  • Fluxo: residual direta c−fc-f, inversa ff; aumenta pelo gargalo. Sem caminho, alcançáveis de ss dão corte mínimo.
  • Valor e corte: fluxo é saída líquida de ss; corte soma só S→TS\to T. Igualdade certifica ótimo, sem provar unicidade.

Relaxação e transformações

Relaxa u→vu\to v quando d[u]d[u] finito e d[u]+w<d[v]d[u]+w<d[v]; atualiza distância e predecessor.

Floyd-Warshall: kk exterior.

D(k)[i,j]=min⁡(D(k−1)[i,j],D(k−1)[i,k]+D(k−1)[k,j]).D^{(k)}[i,j]=\min(D^{(k-1)}[i,j],D^{(k-1)}[i,k]+D^{(k-1)}[k,j]).

Guarda next[i][j] com primeiro passo. Par com i⇝k⇝ji\leadsto k\leadsto j em ciclo negativo sem mínimo finito.

Johnson: origem qq com zeros, hh por Bellman-Ford, w′=w+h(u)−h(v)w'=w+h(u)-h(v), recupera δ(s,t)=δ′(s,t)−h(s)+h(t)\delta(s,t)=\delta'(s,t)-h(s)+h(t). Somar constante a todas as arestas não preserva mínimos.

Emparelhamento: s→L→R→ts\to L\to R\to t com capacidade 1. Fluxo inteiro equivale a arestas sem extremos repetidos. O emparelhamento máximo tem a maior cardinalidade possível no grafo; um emparelhamento maximal só resiste a acrescentar mais uma aresta, mas pode não ser máximo. Com dois vértices de cada lado e uma só aresta, o máximo é 1, enquanto min⁡(∣L∣,∣R∣)=2\min(\lvert L\rvert,\lvert R\rvert)=2 é apenas um limite superior.

Técnica e justificação

TécnicaProva queExemplos
Força brutaEnumera tudo; valida antes de compararSubconjuntos, intervalos, TSP
GulosoÓtimo com escolha local; resto conserva estruturaFim mais cedo, densidade, Huffman
DivisãoPartição cobre casos; combinação reconstróiMerge, cruzamento, Hanoi
DPEstado suficiente; base e dependênciasMochila, trocos, LCS, edição
RetrocessoRamo podado sem válida possívelExcesso com positivos, rainhas
Branch and boundLimite otimista para continuaçõesFracionária ou LP

Maximizar: incumbente é piso, nó tem teto; poda U≤LU\le L. Minimizar: incumbente é teto, nó tem piso; poda sem melhoria. Para listar ótimos, conserva empates.

Recorrências

Teorema mestre, T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n) com a≥1a\ge1, b>1b>1 e ε>0\varepsilon>0. No caso 3, a regularidade af(n/b)≤cf(n)af(n/b)\le cf(n) vale para alguma constante c<1c<1 e nn suficientemente grande:

Fora das chamadasSolução
O(nlog⁡ba−ε)O(n^{\log_ba-\varepsilon})Θ(nlog⁡ba)\Theta(n^{\log_ba})
Θ(nlog⁡ba)\Theta(n^{\log_ba})Θ(nlog⁡balog⁡n)\Theta(n^{\log_ba}\log n)
Ω(nlog⁡ba+ε)\Omega(n^{\log_ba+\varepsilon}) com af(n/b)≤cf(n)af(n/b)\le cf(n)Θ(f(n))\Theta(f(n))

Hanoi H(n)=2H(n−1)+1=2n−1H(n)=2H(n-1)+1=2^n-1 fora do formato. Quadrados: O(log⁡(k+1))O(\log(k+1)) multiplicações. Máscaras com somas por máscara Θ(n2n)\Theta(n2^n); com acumulados Θ(2n)\Theta(2^n). TSP com origem fixa (n−1)!(n-1)! ordens, Θ(n!)\Theta(n!). Coloração com kk rótulos knk^n, não k!k!. Clique kk exige kk cores; coloração kk mostra que chegam.

Estados de DP

ProblemaTransiçãoCusto
Mochila 0-1 (pip_i peso, viv_i valor, WW capacidade)F[i,w]=F[i−1,w]F[i,w]=F[i-1,w] se pi>wp_i>w; senão max⁡(F[i−1,w],vi+F[i−1,w−pi])\max(F[i-1,w],v_i+F[i-1,w-p_i])O(nW)O(nW)
Trocos ilimitados (cic_i facial, TT alvo)C[i,t]=min⁡(C[i−1,t],1+C[i,t−ci])C[i,t]=\min(C[i-1,t],1+C[i,t-c_i]); ignora a segunda se t<cit<c_iO(nT)O(nT)
Trocos com stock (sis_i stock, SS máximo)min⁡q(q+C[i−1,t−qci])\min_q(q+C[i-1,t-qc_i]) com 0≤q≤min⁡(si,⌊t/ci⌋)0\le q\le\min(s_i,\lfloor t/c_i\rfloor)O(nT(S+1))O(nT(S+1))
Soma (B[i,t]B[i,t] existência)B[i,t]=B[i−1,t]∨(t≥ai∧B[i−1,t−ai])B[i,t]=B[i-1,t]\lor(t\ge a_i\land B[i-1,t-a_i])O(nT)O(nT)
Subvetor (E[i]E[i] melhor terminado em ii)E[i]=max⁡(A[i],E[i−1]+A[i])E[i]=\max(A[i],E[i-1]+A[i]), E[0]=A[0]E[0]=A[0]; resposta é o máximo globalO(n)O(n)
LCSIguais diagonal +1+1; senão máximoO(∣X∣∣Y∣)O(\lvert X\rvert\lvert Y\rvert)
EdiçãoMínimo de remover, inserir, manter e trocarO(∣X∣∣Y∣)O(\lvert X\rvert\lvert Y\rvert)
MatrizesM[i,j]=min⁡k(M[i,k]+M[k+1,j]+pi−1pkpj)M[i,j]=\min_k(M[i,k]+M[k+1,j]+p_{i-1}p_kp_j)O(n3)O(n^3)
CYKNão-terminais por segmento e divisãoO(n3∣P∣)O(n^3\lvert P\rvert)

Bases: mochila zero; trocos com zero e infinito; LCS zero; edição com comprimentos. Sem pais não há reconstrução. O(nW)O(nW) e O(nT)O(nT) pseudopolinomiais em binário. Vários símbolos em CYK não provam ambiguidade.

Kleene: Rij(k)=Rij(k−1)∣Rik(k−1)(Rkk(k−1))∗Rkj(k−1)R_{ij}^{(k)}=R_{ij}^{(k-1)}\mid R_{ik}^{(k-1)}(R_{kk}^{(k-1)})^*R_{kj}^{(k-1)}. Inicia diretas e ε\varepsilon na diagonal; une até finais.

Complexidade e garantias

P resolve em polinomial; NP verifica certificado polinomial. Autorredução usa até nn chamadas ao decisor. A≤pBA\le_pB transforma AA em BB; para provar BB difícil, reduz difícil para BB. NP-completo é NP e NP-difícil.

Três cores: x,¬xx,\neg x com BB codificam opostos; dispositivo admite se algum literal verdadeiro. ω(G)≤χ(G)≤Δ(G)+1\omega(G)\le\chi(G)\le\Delta(G)+1 em simples.

AproximaçãoGarantiaCondição
Cobertura por dois extremosC≤2OPTC\le2OPTRepetir até não haver aresta descoberta; escolhidas formam emparelhamento maximal
Mochila por prefixo e maiorC≥OPT/2C\ge OPT/2Descarta objeto que não cabe; compara prefixo por densidade com melhor objeto isolado
TSP por MST duplicadaC≤2OPTC\le2OPTCompleto, simétrico, não negativos, triangular
Conjuntos por ganhoC≤HdOPTC\le H_dOPTdd é o tamanho do maior conjunto; Hd=1+1/2+⋯+1/dH_d=1+1/2+\dots+1/d

PTAS polinomial na entrada para precisão fixa; FPTAS também em 1/ε1/\varepsilon. Heurística sem prova não é garantia. Somar MM por aresta conserva ótimos de TSP mas muda razões.

LP e ILP

LP: max⁡cTx\max c^Tx, Ax≤bAx\le b, x≥0x\ge0. Slack para igualdades. No simplex, entra a variável com custo reduzido que melhora o objetivo e sai a restrição que primeiro limita essa entrada pela menor razão válida; depois substitui em todas as equações. Se a variável que melhora não tem limite em nenhuma restrição, o objetivo é ilimitado. Folga negativa inicial exige fase I. Bland evita ciclos.

Dual min⁡bTy\min b^Ty, ATy≥cA^Ty\ge c, y≥0y\ge0. Admissíveis com mesmo valor certificam ótimo. Região ilimitada pode ter ótimo finito.

ILP: relaxação dá teto em max e piso em min. Ramifica aa em x≤⌊a⌋x\le\lfloor a\rfloor e x≥⌈a⌉x\ge\lceil a\rceil. Cada corte conserva todos os pontos inteiros e exclui a solução fracionária atual. Arredondar a solução fracionária pode sair do poliedro ou piorar o objetivo.

Gomory para uma linha do tableau cuja variável básica xBx_B é inteira e todas as variáveis da linha são inteiras e não negativas: xB+∑ajxj=bx_B+\sum a_jx_j=b dá ∑{aj}xj≥{b}\sum\{a_j\}x_j\ge\{b\}, com {r}=r−⌊r⌋\{r\}=r-\lfloor r\rfloor. Se algum aja_j for fracionário por natureza contínua, não há corte fracionário garantido.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.