<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
    <title>Matemática para Computação</title>
    <subtitle>Guia de matemática para computação em português, do básico ao avançado: matemática discreta, álgebra linear, análise, probabilidade, teoria dos números, álgebra abstrata, análise numérica, otimização e teoria da computação.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://pages.singularjourney.org/devjonatas/guia-matematica/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-26T00:00:00+00:00</updated>
    <id>https://pages.singularjourney.org/devjonatas/guia-matematica/atom.xml</id>
    <entry xml:lang="pt-BR">
        <title>Bibliografia Comentada</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/bibliografia-comentada/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/bibliografia-comentada/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/bibliografia-comentada/">&lt;h1 id=&quot;bibliografia-comentada&quot;&gt;Bibliografia Comentada&lt;&#x2F;h1&gt;
&lt;p&gt;Lista de referências por área, com uma indicação honesta de nível e de para que cada livro serve. Vários estão disponíveis legalmente de graça — marcados com &lt;strong&gt;(livre)&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matematica-discreta&quot;&gt;Matemática discreta&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Rosen, &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O livro-texto padrão. Amplo, muito bem explicado, com milhares de exercícios. É a escolha certa para quem está começando do zero. Peca por ser longo demais para leitura linear — use como referência por capítulo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Graham, Knuth e Patashnik, &lt;em&gt;Concrete Mathematics&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Escrito para dar a base matemática do TAOCP. Difícil, divertido e insubstituível em somatórios, recorrências e assintótica. As notas de margem são parte do valor. Segunda leitura, não primeira.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gersting, &lt;em&gt;Mathematical Structures for Computer Science&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Alternativa ao Rosen, mais enxuta e mais orientada a computação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teoria-dos-grafos&quot;&gt;Teoria dos grafos&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Diestel, &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — o autor disponibiliza a edição eletrônica. Referência teórica moderna, rigorosa. Não é livro de algoritmos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;West, &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Mais acessível que o Diestel, com muitos exercícios.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bondy e Murty, &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Amplo, com boa cobertura de aplicações.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algoritmos&quot;&gt;Algoritmos&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Cormen, Leiserson, Rivest e Stein, &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O CLRS. Enciclopédico, com pseudocódigo e provas completas. É referência, não leitura de cabo a rabo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Kleinberg e Tardos, &lt;em&gt;Algorithm Design&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Melhor que o CLRS para &lt;strong&gt;aprender a projetar&lt;&#x2F;strong&gt; algoritmos: organiza por técnica e explica o raciocínio que leva à solução.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Knuth, &lt;em&gt;The Art of Computer Programming&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Profundidade incomparável e notação própria. Consulta, não leitura sequencial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algebra-linear&quot;&gt;Álgebra linear&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Strang, &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; A porta de entrada. As aulas do MIT 18.06 &lt;strong&gt;(livres)&lt;&#x2F;strong&gt; seguem o livro e são excelentes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Axler, &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Trata autovalores antes de determinantes, com foco em estrutura. Ótima segunda leitura; esclarece o que o primeiro curso deixa obscuro.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Trefethen e Bau, &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; As 40 lições são o melhor texto sobre condicionamento, estabilidade e as decomposições que importam na prática.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Golub e Van Loan, &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; A referência de quem implementa.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;3Blue1Brown, &quot;Essence of Linear Algebra&quot;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — série em vídeo que constrói a intuição geométrica melhor que qualquer texto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;analise&quot;&gt;Análise&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Spivak, &lt;em&gt;Calculus&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; A melhor ponte entre cálculo operacional e análise rigorosa.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Rudin, &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O &quot;baby Rudin&quot;. Conciso ao extremo; as demonstrações são elegantes e exigem esforço.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Apostol, &lt;em&gt;Mathematical Analysis&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Mais expansivo que o Rudin, mais fácil de acompanhar sozinho.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;probabilidade&quot;&gt;Probabilidade&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Ross, &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Introdução sólida com muitos exercícios.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Mitzenmacher e Upfal, &lt;em&gt;Probability and Computing&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Probabilidade escrita para computação desde a primeira página. É o livro certo para quem quer analisar algoritmos aleatorizados.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Motwani e Raghavan, &lt;em&gt;Randomized Algorithms&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O clássico da área.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Vershynin, &lt;em&gt;High-Dimensional Probability&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — concentração e aleatoriedade em dimensão alta, com aplicações a ciência de dados.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Grinstead e Snell, &lt;em&gt;Introduction to Probability&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — introdução gratuita e bem escrita.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;analise-numerica&quot;&gt;Análise numérica&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Goldberg, &quot;What Every Computer Scientist Should Know About Floating-Point Arithmetic&quot;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — artigo de 1991, ainda insuperável. Leitura obrigatória para quem escreve código numérico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Higham, &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O tratado sobre erro numérico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Burden e Faires, &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Livro-texto padrão, com todos os métodos e análise de erro.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Press et al., &lt;em&gt;Numerical Recipes&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Implementações comentadas. Útil pelas discussões práticas; o código não é o melhor disponível.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teoria-dos-numeros-e-criptografia&quot;&gt;Teoria dos números e criptografia&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Shoup, &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — teoria dos números do ponto de vista computacional.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Menezes, van Oorschot e Vanstone, &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — todos os algoritmos, com detalhes de implementação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Katz e Lindell, &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O tratamento moderno, com definições de segurança precisas. É o livro para entender &lt;strong&gt;por que&lt;&#x2F;strong&gt; um esquema é seguro, não só como funciona.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Hardy e Wright, &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O clássico puro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teoria-da-computacao&quot;&gt;Teoria da computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Sipser, &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; A melhor introdução: clara, rigorosa e bem dosada.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Hopcroft, Motwani e Ullman.&lt;&#x2F;strong&gt; Mais amplo, com mais algoritmos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Arora e Barak, &lt;em&gt;Computational Complexity: A Modern Approach&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(rascunho livre)&lt;&#x2F;strong&gt; — complexidade moderna, além de P e NP.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Garey e Johnson, &lt;em&gt;Computers and Intractability&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; O catálogo de problemas NP-completos. Ainda a primeira consulta ao suspeitar que um problema é difícil.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;otimizacao&quot;&gt;Otimização&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Boyd e Vandenberghe, &lt;em&gt;Convex Optimization&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — o livro da área, com curso em vídeo de Stanford também gratuito.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Nocedal e Wright, &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Métodos numéricos de otimização em detalhe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Chvátal, &lt;em&gt;Linear Programming&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; Clássico sobre simplex e dualidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aprendizado-de-maquina&quot;&gt;Aprendizado de máquina&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Goodfellow, Bengio e Courville, &lt;em&gt;Deep Learning&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — a parte I é uma excelente revisão da matemática necessária.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bishop, &lt;em&gt;Pattern Recognition and Machine Learning&lt;&#x2F;em&gt;.&lt;&#x2F;strong&gt; &lt;strong&gt;(livre)&lt;&#x2F;strong&gt; — a referência bayesiana.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;como-escolher&quot;&gt;Como escolher&lt;&#x2F;h2&gt;
&lt;p&gt;Se você quer &lt;strong&gt;um&lt;&#x2F;strong&gt; livro para começar e a área é computação, comece pelo Rosen (discreta) e pelo Strang (linear). Se já tem base e quer profundidade aplicada, vá para Mitzenmacher e Upfal (probabilidade) e Trefethen e Bau (numérica) — são os dois de maior retorno prático.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-graham1994&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ronald L. Graham and Donald E. Knuth and Oren Patashnik&lt;&#x2F;strong&gt; (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780134389967&quot; rel=&quot;noopener&quot;&gt;9780134389967&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-sipser2012&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Sipser&lt;&#x2F;strong&gt; (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781133187790&quot; rel=&quot;noopener&quot;&gt;9781133187790&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-boyd2004&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Stephen Boyd and Lieven Vandenberghe&lt;&#x2F;strong&gt; (2004). &lt;em&gt;Convex Optimization&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511804441&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511804441&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Ronald L. Graham; Donald E. Knuth; Oren Patashnik (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;Stephen Boyd; Lieven Vandenberghe (2004). &lt;em&gt;Convex Optimization&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Guia de Notação</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/notacao-matematica/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/notacao-matematica/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/notacao-matematica/">&lt;h1 id=&quot;guia-de-notacao&quot;&gt;Guia de Notação&lt;&#x2F;h1&gt;
&lt;p&gt;Referência rápida dos símbolos usados neste guia. Notação é convenção, e convenções variam entre áreas — quando houver ambiguidade, ela é apontada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conjuntos&quot;&gt;Conjuntos&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\in$, $\notin$&lt;&#x2F;td&gt;&lt;td&gt;Pertence, não pertence&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\subseteq$, $\subsetneq$&lt;&#x2F;td&gt;&lt;td&gt;Subconjunto, subconjunto próprio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\cup$, $\cap$&lt;&#x2F;td&gt;&lt;td&gt;União, interseção&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\setminus$&lt;&#x2F;td&gt;&lt;td&gt;Diferença&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\overline{A}$&lt;&#x2F;td&gt;&lt;td&gt;Complemento&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\emptyset$&lt;&#x2F;td&gt;&lt;td&gt;Conjunto vazio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathcal{P}(A)$&lt;&#x2F;td&gt;&lt;td&gt;Conjunto potência&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\lvert A \rvert$&lt;&#x2F;td&gt;&lt;td&gt;Cardinalidade&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$A\times B$&lt;&#x2F;td&gt;&lt;td&gt;Produto cartesiano&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;conjuntos-numericos&quot;&gt;Conjuntos numéricos&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Conjunto&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{N}$&lt;&#x2F;td&gt;&lt;td&gt;Naturais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{Z}$&lt;&#x2F;td&gt;&lt;td&gt;Inteiros&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{Q}$&lt;&#x2F;td&gt;&lt;td&gt;Racionais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{R}$&lt;&#x2F;td&gt;&lt;td&gt;Reais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{C}$&lt;&#x2F;td&gt;&lt;td&gt;Complexos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{F}_q$, $\mathbb{Z}_n$&lt;&#x2F;td&gt;&lt;td&gt;Corpo finito, inteiros módulo $n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Atenção: alguns autores incluem o zero em $\mathbb{N}$ e outros não. Neste guia, o contexto deixa claro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;logica&quot;&gt;Lógica&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\neg$&lt;&#x2F;td&gt;&lt;td&gt;Negação&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\wedge$, $\vee$&lt;&#x2F;td&gt;&lt;td&gt;E, ou&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\to$, $\leftrightarrow$&lt;&#x2F;td&gt;&lt;td&gt;Implica, se e somente se&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\forall$, $\exists$&lt;&#x2F;td&gt;&lt;td&gt;Para todo, existe&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\equiv$&lt;&#x2F;td&gt;&lt;td&gt;Equivalente&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\blacksquare$&lt;&#x2F;td&gt;&lt;td&gt;Fim de demonstração&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;somatorios-e-produtos&quot;&gt;Somatórios e produtos&lt;&#x2F;h2&gt;
&lt;p&gt;$$\sum_{i=1}^{n}a_i = a_1 + \cdots + a_n, \qquad \prod_{i=1}^{n}a_i = a_1\cdots a_n$$&lt;&#x2F;p&gt;
&lt;p&gt;Somatório sobre conjunto vazio é $0$; produto sobre conjunto vazio é $1$. Essa convenção não é arbitrária — é o elemento neutro de cada operação, e é o que faz fórmulas recursivas funcionarem no caso base.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;funcoes-e-arredondamento&quot;&gt;Funções e arredondamento&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$f: A\to B$&lt;&#x2F;td&gt;&lt;td&gt;Função de $A$ em $B$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f\circ g$&lt;&#x2F;td&gt;&lt;td&gt;Composição&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f^{-1}$&lt;&#x2F;td&gt;&lt;td&gt;Inversa&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\lfloor x\rfloor$, $\lceil x\rceil$&lt;&#x2F;td&gt;&lt;td&gt;Piso, teto&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$n!$&lt;&#x2F;td&gt;&lt;td&gt;Fatorial&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\binom{n}{k}$&lt;&#x2F;td&gt;&lt;td&gt;Coeficiente binomial&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\gcd$, $\operatorname{lcm}$&lt;&#x2F;td&gt;&lt;td&gt;MDC, MMC&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$a \bmod n$&lt;&#x2F;td&gt;&lt;td&gt;Resto&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$a \equiv b \pmod n$&lt;&#x2F;td&gt;&lt;td&gt;Congruência&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;algebra-linear&quot;&gt;Álgebra linear&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$A^T$, $A^{-1}$, $A^+$&lt;&#x2F;td&gt;&lt;td&gt;Transposta, inversa, pseudoinversa&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\det(A)$, $\operatorname{tr}(A)$&lt;&#x2F;td&gt;&lt;td&gt;Determinante, traço&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\langle u,v\rangle$, $u^Tv$&lt;&#x2F;td&gt;&lt;td&gt;Produto interno&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\lVert x\rVert_p$&lt;&#x2F;td&gt;&lt;td&gt;Norma $p$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\kappa(A)$&lt;&#x2F;td&gt;&lt;td&gt;Número de condição&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\lambda$, $\sigma$&lt;&#x2F;td&gt;&lt;td&gt;Autovalor, valor singular&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$I$&lt;&#x2F;td&gt;&lt;td&gt;Identidade&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Vetores são colunas por padrão. Algumas bibliotecas gráficas usam a convenção de linha, o que inverte a ordem dos produtos — verifique sempre.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;probabilidade&quot;&gt;Probabilidade&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$P(A)$&lt;&#x2F;td&gt;&lt;td&gt;Probabilidade&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$P(A\mid B)$&lt;&#x2F;td&gt;&lt;td&gt;Probabilidade condicional&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$E[X]$&lt;&#x2F;td&gt;&lt;td&gt;Esperança&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\operatorname{Var}(X)$, $\sigma^2$&lt;&#x2F;td&gt;&lt;td&gt;Variância&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\operatorname{Cov}(X,Y)$&lt;&#x2F;td&gt;&lt;td&gt;Covariância&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$X\sim\mathcal{D}$&lt;&#x2F;td&gt;&lt;td&gt;$X$ segue a distribuição $\mathcal{D}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathcal{N}(\mu,\sigma^2)$&lt;&#x2F;td&gt;&lt;td&gt;Normal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;assintotica&quot;&gt;Assintótica&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$O(g)$&lt;&#x2F;td&gt;&lt;td&gt;Cresce no máximo como $g$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\Omega(g)$&lt;&#x2F;td&gt;&lt;td&gt;Cresce pelo menos como $g$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\Theta(g)$&lt;&#x2F;td&gt;&lt;td&gt;Mesma ordem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$o(g)$, $\omega(g)$&lt;&#x2F;td&gt;&lt;td&gt;Estritamente menor, estritamente maior&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\sim$&lt;&#x2F;td&gt;&lt;td&gt;Assintoticamente igual&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;$\log n$ sem base indicada significa que a base é irrelevante — ela muda apenas a constante.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;convencoes-deste-guia&quot;&gt;Convenções deste guia&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Números decimais usam vírgula: $0{,}5$.&lt;&#x2F;li&gt;
&lt;li&gt;Fórmulas são renderizadas com KaTeX; se aparecerem como texto bruto, o JavaScript está desativado.&lt;&#x2F;li&gt;
&lt;li&gt;Trechos de código são em Python quando servem para ilustrar, e não pretendem ser implementações de produção.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Roteiros de Estudo</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/roteiros-de-estudo/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/roteiros-de-estudo/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/recursos/roteiros-de-estudo/">&lt;h1 id=&quot;roteiros-de-estudo&quot;&gt;Roteiros de Estudo&lt;&#x2F;h1&gt;
&lt;p&gt;O guia não precisa ser lido em ordem. Abaixo, percursos por objetivo — cada um levando de umas poucas horas a algumas semanas, conforme a profundidade desejada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;base-minima-para-computacao&quot;&gt;Base mínima para computação&lt;&#x2F;h2&gt;
&lt;p&gt;Se você vai fazer &lt;strong&gt;um&lt;&#x2F;strong&gt; percurso, faça este. Ele cobre o que aparece em praticamente qualquer contexto técnico.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;logica-proposicional&#x2F;&quot;&gt;Lógica proposicional&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;conjuntos&#x2F;&quot;&gt;Teoria dos conjuntos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;funcoes&#x2F;&quot;&gt;Funções&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;inducao-matematica&#x2F;&quot;&gt;Indução matemática&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;analise&#x2F;analise-assintotica&#x2F;&quot;&gt;Análise assintótica&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;grafos-fundamentos&#x2F;&quot;&gt;Grafos: fundamentos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;ponto-flutuante&#x2F;&quot;&gt;Ponto flutuante&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;O último item costuma surpreender quem espera uma lista só de teoria. Ele está aqui porque é a fonte mais comum de defeitos silenciosos em código.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;preparacao-para-entrevistas-tecnicas&quot;&gt;Preparação para entrevistas técnicas&lt;&#x2F;h2&gt;
&lt;p&gt;Foco no que efetivamente é cobrado.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;analise&#x2F;analise-assintotica&#x2F;&quot;&gt;Análise assintótica&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;recorrencias&#x2F;&quot;&gt;Recorrências&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;combinatoria&#x2F;&quot;&gt;Combinatória&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;grafos-fundamentos&#x2F;&quot;&gt;Grafos: fundamentos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;arvores&#x2F;&quot;&gt;Árvores&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;caminhos-minimos&#x2F;&quot;&gt;Caminhos mínimos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;principio-casa-dos-pombos&#x2F;&quot;&gt;Princípio da casa dos pombos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;probabilidade&#x2F;espaco-amostral-e-eventos&#x2F;&quot;&gt;Espaço amostral e eventos&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;aprendizado-de-maquina&quot;&gt;Aprendizado de máquina&lt;&#x2F;h2&gt;
&lt;p&gt;O percurso mais longo, e o que exige mais álgebra linear.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;espacos-vetoriais&#x2F;&quot;&gt;Espaços vetoriais&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;matrizes-e-operacoes&#x2F;&quot;&gt;Matrizes e operações&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;produto-interno-e-normas&#x2F;&quot;&gt;Produto interno e normas&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;autovalores-e-autovetores&#x2F;&quot;&gt;Autovalores e autovetores&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;svd&#x2F;&quot;&gt;SVD&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;analise&#x2F;derivadas&#x2F;&quot;&gt;Derivadas&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;probabilidade&#x2F;variaveis-aleatorias-e-esperanca&#x2F;&quot;&gt;Variáveis aleatórias e esperança&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;probabilidade&#x2F;distribuicoes&#x2F;&quot;&gt;Distribuições&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;probabilidade&#x2F;probabilidade-condicional-e-bayes&#x2F;&quot;&gt;Probabilidade condicional e Bayes&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;probabilidade&#x2F;concentracao-e-algoritmos-aleatorizados&#x2F;&quot;&gt;Concentração e algoritmos aleatorizados&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;criptografia-e-seguranca&quot;&gt;Criptografia e segurança&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;teoria-numeros&#x2F;divisibilidade-e-euclides&#x2F;&quot;&gt;Divisibilidade e algoritmo de Euclides&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;teoria-numeros&#x2F;aritmetica-modular&#x2F;&quot;&gt;Aritmética modular&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;teoria-numeros&#x2F;teorema-chines-do-resto&#x2F;&quot;&gt;Teorema chinês do resto&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;teoria-numeros&#x2F;fermat-euler-e-primalidade&#x2F;&quot;&gt;Fermat, Euler e testes de primalidade&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;teoria-numeros&#x2F;rsa&#x2F;&quot;&gt;RSA&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;principio-casa-dos-pombos&#x2F;&quot;&gt;Princípio da casa dos pombos&lt;&#x2F;a&gt; — para o ataque do aniversário&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;computacao&#x2F;classes-p-np-e-reducoes&#x2F;&quot;&gt;Classes P, NP e reduções&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;computacao-grafica&quot;&gt;Computação gráfica&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;espacos-vetoriais&#x2F;&quot;&gt;Espaços vetoriais&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;matrizes-e-operacoes&#x2F;&quot;&gt;Matrizes e operações&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;transformacoes-lineares&#x2F;&quot;&gt;Transformações lineares&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;determinante&#x2F;&quot;&gt;Determinante&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;produto-interno-e-normas&#x2F;&quot;&gt;Produto interno e normas&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;interpolacao-e-integracao-numerica&#x2F;&quot;&gt;Interpolação e integração numérica&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;ponto-flutuante&#x2F;&quot;&gt;Ponto flutuante&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;computacao-cientifica&quot;&gt;Computação científica&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;ponto-flutuante&#x2F;&quot;&gt;Ponto flutuante&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;erro-e-condicionamento&#x2F;&quot;&gt;Erro e condicionamento&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;sistemas-lineares&#x2F;&quot;&gt;Sistemas lineares&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;decomposicoes-lu-e-cholesky&#x2F;&quot;&gt;Decomposições LU e Cholesky&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;algebra-linear&#x2F;ortogonalidade-e-qr&#x2F;&quot;&gt;Ortogonalidade e fatoração QR&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;raizes-e-metodo-de-newton&#x2F;&quot;&gt;Raízes e método de Newton&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;analise&#x2F;series-de-taylor&#x2F;&quot;&gt;Séries de Taylor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;numerica&#x2F;interpolacao-e-integracao-numerica&#x2F;&quot;&gt;Interpolação e integração numérica&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;compiladores-e-linguagens&quot;&gt;Compiladores e linguagens&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;logica-proposicional&#x2F;&quot;&gt;Lógica proposicional&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;relacoes&#x2F;&quot;&gt;Relações&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;computacao&#x2F;automatos-e-linguagens&#x2F;&quot;&gt;Autômatos e linguagens formais&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;computacao&#x2F;maquina-de-turing-e-decidibilidade&#x2F;&quot;&gt;Máquina de Turing e decidibilidade&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;coloracao-de-grafos&#x2F;&quot;&gt;Coloração de grafos&lt;&#x2F;a&gt; — alocação de registradores&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;pages.singularjourney.org&#x2F;devjonatas&#x2F;guia-matematica&#x2F;topicos&#x2F;discreto&#x2F;arvores&#x2F;&quot;&gt;Árvores&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;como-estudar&quot;&gt;Como estudar&lt;&#x2F;h2&gt;
&lt;p&gt;Três recomendações que valem para qualquer percurso.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Faça as contas à mão pelo menos uma vez.&lt;&#x2F;strong&gt; Cada página tem um exemplo trabalhado. Refazê-lo no papel, sem olhar, é o que separa reconhecer de saber.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Implemente o algoritmo.&lt;&#x2F;strong&gt; Os trechos de código do guia são curtos de propósito. Digitá-los e rodá-los com entradas próprias revela detalhes que a leitura esconde.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Volte depois.&lt;&#x2F;strong&gt; Conceitos de matemática raramente são absorvidos numa passada. Reler um mês depois, tendo usado a ideia no meio-tempo, é mais produtivo que reler no dia seguinte — é a prática de recuperação espaçada, e ela tem base experimental sólida.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Autovalores e Autovetores</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/autovalores-e-autovetores/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/autovalores-e-autovetores/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/autovalores-e-autovetores/">&lt;h1 id=&quot;autovalores-e-autovetores&quot;&gt;Autovalores e Autovetores&lt;&#x2F;h1&gt;
&lt;p&gt;Autovalores respondem a uma pergunta específica: existem direções que a transformação apenas &lt;strong&gt;estica ou encolhe&lt;&#x2F;strong&gt;, sem girar? Essas direções revelam a estrutura essencial da matriz e são a base do PCA, do PageRank e da análise de estabilidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;Um vetor não nulo $v$ é &lt;strong&gt;autovetor&lt;&#x2F;strong&gt; de $A$ com &lt;strong&gt;autovalor&lt;&#x2F;strong&gt; $\lambda$ quando&lt;&#x2F;p&gt;
&lt;p&gt;$$Av = \lambda v$$&lt;&#x2F;p&gt;
&lt;p&gt;Aplicar $A$ a $v$ não muda sua direção, só sua escala.&lt;&#x2F;p&gt;
&lt;p&gt;Da equação segue $(A - \lambda I)v = 0$ com $v \ne 0$, o que exige $A - \lambda I$ singular:&lt;&#x2F;p&gt;
&lt;p&gt;$$\det(A - \lambda I) = 0$$&lt;&#x2F;p&gt;
&lt;p&gt;Esse é o &lt;strong&gt;polinômio característico&lt;&#x2F;strong&gt;, de grau $n$. Sobre os complexos ele tem exatamente $n$ raízes contando multiplicidade — mas uma matriz real pode ter autovalores complexos, como toda matriz de rotação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fatos-essenciais&quot;&gt;Fatos essenciais&lt;&#x2F;h2&gt;
&lt;p&gt;$$\sum_i \lambda_i = \operatorname{tr}(A), \qquad \prod_i \lambda_i = \det(A)$$&lt;&#x2F;p&gt;
&lt;p&gt;São duas verificações baratas e muito úteis para conferir um cálculo.&lt;&#x2F;p&gt;
&lt;p&gt;Outros fatos que vale ter na ponta da língua:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Matriz &lt;strong&gt;triangular&lt;&#x2F;strong&gt;: os autovalores são a diagonal.&lt;&#x2F;li&gt;
&lt;li&gt;Matriz &lt;strong&gt;simétrica real&lt;&#x2F;strong&gt;: autovalores reais, autovetores ortogonais.&lt;&#x2F;li&gt;
&lt;li&gt;Matriz &lt;strong&gt;ortogonal&lt;&#x2F;strong&gt;: autovalores de módulo 1.&lt;&#x2F;li&gt;
&lt;li&gt;$A^k$ tem autovalores $\lambda_i^k$, com os mesmos autovetores.&lt;&#x2F;li&gt;
&lt;li&gt;$A$ é singular se e somente se $0$ é autovalor.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;diagonalizacao&quot;&gt;Diagonalização&lt;&#x2F;h2&gt;
&lt;p&gt;Se $A$ tem $n$ autovetores linearmente independentes, então&lt;&#x2F;p&gt;
&lt;p&gt;$$A = PDP^{-1}$$&lt;&#x2F;p&gt;
&lt;p&gt;com $P$ a matriz dos autovetores em colunas e $D$ diagonal com os autovalores.&lt;&#x2F;p&gt;
&lt;p&gt;O ganho é computacional e conceitual:&lt;&#x2F;p&gt;
&lt;p&gt;$$A^k = PD^kP^{-1}$$&lt;&#x2F;p&gt;
&lt;p&gt;Elevar uma matriz diagonal à potência $k$ é elevar cada entrada. Isso transforma um cálculo caro num trivial, e é o que permite analisar o comportamento de longo prazo de sistemas iterativos: &lt;strong&gt;o autovalor de maior módulo domina&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Nem toda matriz é diagonalizável. Matrizes &lt;strong&gt;defeituosas&lt;&#x2F;strong&gt; — como $\begin{pmatrix}1&amp;amp;1\0&amp;amp;1\end{pmatrix}$, que tem autovalor $1$ com multiplicidade 2 mas só um autovetor independente — exigem a forma de Jordan.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-espectral&quot;&gt;Teorema espectral&lt;&#x2F;h2&gt;
&lt;p&gt;Para $A$ simétrica real:&lt;&#x2F;p&gt;
&lt;p&gt;$$A = Q\Lambda Q^T$$&lt;&#x2F;p&gt;
&lt;p&gt;com $Q$ &lt;strong&gt;ortogonal&lt;&#x2F;strong&gt; e $\Lambda$ diagonal real.&lt;&#x2F;p&gt;
&lt;p&gt;Este é o resultado mais útil da área. Ele garante que matrizes simétricas são sempre diagonalizáveis, com base ortonormal de autovetores e autovalores reais. Como $Q^{-1} = Q^T$, não há inversão a calcular e o cálculo é numericamente estável.&lt;&#x2F;p&gt;
&lt;p&gt;Matrizes simétricas aparecem em toda parte — matrizes de covariância, hessianas, laplacianos de grafos, matrizes de Gram — e é o teorema espectral que torna esses objetos tratáveis.&lt;&#x2F;p&gt;
&lt;p&gt;Uma matriz simétrica é &lt;strong&gt;definida positiva&lt;&#x2F;strong&gt; exatamente quando todos os autovalores são positivos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;calculo-na-pratica&quot;&gt;Cálculo na prática&lt;&#x2F;h2&gt;
&lt;p&gt;Não use o polinômio característico. Os métodos reais:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Método da potência.&lt;&#x2F;strong&gt; Itera $v_{k+1} = Av_k &#x2F; |Av_k|$ e converge para o autovetor dominante. Simples, e é a ideia por trás do PageRank.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Iteração QR.&lt;&#x2F;strong&gt; Fatora repetidamente $A_k = Q_kR_k$ e faz $A_{k+1} = R_kQ_k$. Converge para forma triangular com os autovalores na diagonal. É o algoritmo padrão.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Lanczos e Arnoldi.&lt;&#x2F;strong&gt; Para matrizes esparsas grandes quando se quer apenas alguns autovalores.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vals, vecs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.eigh(A)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # simétrica: mais rápido e estável&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;vals, vecs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.eig(A)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # geral: pode devolver complexos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Use &lt;code&gt;eigh&lt;&#x2F;code&gt; sempre que a matriz for simétrica — a diferença de desempenho e de estabilidade é significativa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 2 &amp;amp; 1 \ 1 &amp;amp; 2 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\det(A - \lambda I) = (2-\lambda)^2 - 1 = \lambda^2 - 4\lambda + 3 = (\lambda-1)(\lambda-3)$$&lt;&#x2F;p&gt;
&lt;p&gt;Autovalores $\lambda_1 = 1$, $\lambda_2 = 3$. Conferindo: a soma é $4 = \operatorname{tr}(A)$ e o produto é $3 = \det(A)$.&lt;&#x2F;p&gt;
&lt;p&gt;Para $\lambda = 3$: $(A - 3I)v = 0$ dá $-v_1 + v_2 = 0$, logo $v = (1,1)$. Para $\lambda = 1$: $v = (1,-1)$.&lt;&#x2F;p&gt;
&lt;p&gt;Os autovetores são ortogonais, como o teorema espectral prevê para matriz simétrica.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;PCA.&lt;&#x2F;strong&gt; Os autovetores da matriz de covariância são as direções principais, e os autovalores medem a variância em cada direção. Manter os maiores é reduzir dimensionalidade preservando o máximo de informação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;PageRank.&lt;&#x2F;strong&gt; A pontuação de páginas é o autovetor dominante da matriz de transição da web. O método da potência converge à distribuição estacionária, e a taxa de convergência é dada pela razão entre o segundo e o primeiro autovalor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Agrupamento espectral.&lt;&#x2F;strong&gt; Os autovetores do laplaciano do grafo revelam estrutura de comunidades. O número de autovalores nulos conta os componentes conexos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Estabilidade.&lt;&#x2F;strong&gt; Num sistema dinâmico $x_{k+1} = Ax_k$, a trajetória converge se e somente se todos os autovalores têm módulo menor que 1. O mesmo critério governa a estabilidade de esquemas numéricos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Vibrações e gráficos.&lt;&#x2F;strong&gt; Modos naturais de deformação de uma malha são autovetores do operador laplaciano discreto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Calcular autovalores por raízes do polinômio característico.&lt;&#x2F;strong&gt; Numericamente instável.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar &lt;code&gt;eig&lt;&#x2F;code&gt; em matriz simétrica&lt;&#x2F;strong&gt; em vez de &lt;code&gt;eigh&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que toda matriz é diagonalizável.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esperar autovalores reais de matriz não simétrica.&lt;&#x2F;strong&gt; Rotações têm autovalores complexos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar a normalização.&lt;&#x2F;strong&gt; Autovetores são definidos a menos de escala, e o sinal devolvido pela biblioteca é arbitrário.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Strang, capítulo 6 — autovalores com muitas aplicações trabalhadas.&lt;&#x2F;li&gt;
&lt;li&gt;Axler, capítulos 5 e 7 — a abordagem sem determinantes, que esclarece por que o teorema espectral é verdadeiro.&lt;&#x2F;li&gt;
&lt;li&gt;Trefethen e Bau, lições 24 a 30 — algoritmos de autovalores e por que a iteração QR funciona.&lt;&#x2F;li&gt;
&lt;li&gt;Artigo original do PageRank (Page e Brin) — o método da potência aplicado em escala.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-axler2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon Axler&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-319-11080-6&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-319-11080-6&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Sheldon Axler (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Decomposições LU e Cholesky</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/decomposicoes-lu-e-cholesky/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/decomposicoes-lu-e-cholesky/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/decomposicoes-lu-e-cholesky/">&lt;h1 id=&quot;decomposicoes-lu-e-cholesky&quot;&gt;Decomposições LU e Cholesky&lt;&#x2F;h1&gt;
&lt;p&gt;Fatorar uma matriz é reescrevê-la como produto de fatores mais simples. A ideia central é econômica: &lt;strong&gt;fatore uma vez, resolva muitas&lt;&#x2F;strong&gt;. Se você precisa resolver $Ax = b$ para vários $b$ diferentes com a mesma $A$, a fatoração transforma um custo $O(n^3)$ por sistema em $O(n^3)$ uma vez e $O(n^2)$ por sistema.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fatoracao-lu&quot;&gt;Fatoração LU&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = LU$$&lt;&#x2F;p&gt;
&lt;p&gt;com $L$ triangular inferior de diagonal unitária e $U$ triangular superior. É a eliminação gaussiana registrada em forma matricial: $U$ é o resultado da eliminação e $L$ guarda os multiplicadores usados.&lt;&#x2F;p&gt;
&lt;p&gt;Resolver $Ax = b$ vira dois sistemas triangulares:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;$Ly = b$ por substituição progressiva — $O(n^2)$.&lt;&#x2F;li&gt;
&lt;li&gt;$Ux = y$ por substituição regressiva — $O(n^2)$.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Custo da fatoração: $\frac{2}{3}n^3$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pivoteamento-pa-lu&quot;&gt;Pivoteamento: PA = LU&lt;&#x2F;h2&gt;
&lt;p&gt;A fatoração pura falha quando surge pivô nulo e fica imprecisa com pivô pequeno. Na prática usa-se pivoteamento parcial:&lt;&#x2F;p&gt;
&lt;p&gt;$$PA = LU$$&lt;&#x2F;p&gt;
&lt;p&gt;com $P$ uma matriz de permutação. Isso garante que todos os multiplicadores tenham módulo $\le 1$.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; scipy.linalg&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; lu_factor, lu_solve&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lu, piv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; lu_factor(A)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;              # fatora uma vez: O(n³)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; lu_solve((lu, piv), b1)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;        # cada resolução: O(n²)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; lu_solve((lu, piv), b2)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Este padrão — fatorar fora do laço, resolver dentro — é a otimização mais importante de qualquer código que resolve sistemas repetidamente, e é frequentemente esquecida.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cholesky&quot;&gt;Cholesky&lt;&#x2F;h2&gt;
&lt;p&gt;Para $A$ &lt;strong&gt;simétrica e definida positiva&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$A = LL^T$$&lt;&#x2F;p&gt;
&lt;p&gt;com $L$ triangular inferior de diagonal positiva.&lt;&#x2F;p&gt;
&lt;p&gt;Vantagens sobre a LU:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metade do custo&lt;&#x2F;strong&gt;: $\frac{1}{3}n^3$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Metade da memória&lt;&#x2F;strong&gt;: só um fator.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sem pivoteamento&lt;&#x2F;strong&gt;: é incondicionalmente estável para matrizes definidas positivas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;L&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.cholesky(A)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;           # falha se A não for definida positiva&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O fato de a fatoração &lt;strong&gt;falhar&lt;&#x2F;strong&gt; quando a matriz não é definida positiva é uma característica útil, não um defeito: é o teste mais barato dessa propriedade. Métodos de otimização usam exatamente isso para detectar que a hessiana deixou de ser definida positiva e que o passo de Newton precisa ser corrigido.&lt;&#x2F;p&gt;
&lt;p&gt;Matrizes simétricas definidas positivas são comuns: matrizes de covariância, matrizes de Gram $A^TA$, hessianas em pontos de mínimo, laplacianos com condição de contorno.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparacao&quot;&gt;Comparação&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Fatoração&lt;&#x2F;th&gt;&lt;th&gt;Requisito&lt;&#x2F;th&gt;&lt;th&gt;Custo&lt;&#x2F;th&gt;&lt;th&gt;Uso&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;LU&lt;&#x2F;td&gt;&lt;td&gt;Quadrada&lt;&#x2F;td&gt;&lt;td&gt;$\frac23 n^3$&lt;&#x2F;td&gt;&lt;td&gt;Sistemas gerais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Cholesky&lt;&#x2F;td&gt;&lt;td&gt;Simétrica definida positiva&lt;&#x2F;td&gt;&lt;td&gt;$\frac13 n^3$&lt;&#x2F;td&gt;&lt;td&gt;Covariância, mínimos quadrados&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;QR&lt;&#x2F;td&gt;&lt;td&gt;$m \ge n$&lt;&#x2F;td&gt;&lt;td&gt;$\frac43 n^3$&lt;&#x2F;td&gt;&lt;td&gt;Mínimos quadrados, estabilidade&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;SVD&lt;&#x2F;td&gt;&lt;td&gt;Qualquer&lt;&#x2F;td&gt;&lt;td&gt;$\sim 10n^3$&lt;&#x2F;td&gt;&lt;td&gt;Posto, pseudoinversa, mal condicionado&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A ordem de preferência prática é: use a fatoração mais barata cujas hipóteses a sua matriz satisfaça, exceto quando o condicionamento exigir a mais robusta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;determinante-e-log-determinante&quot;&gt;Determinante e log-determinante&lt;&#x2F;h2&gt;
&lt;p&gt;Da fatoração sai o determinante de graça:&lt;&#x2F;p&gt;
&lt;p&gt;$$\det(A) = \det(P)^{-1}\prod_i u_{ii}, \qquad \det(A) = \prod_i \ell_{ii}^2 ;\text{(Cholesky)}$$&lt;&#x2F;p&gt;
&lt;p&gt;Para evitar estouro, calcula-se o logaritmo:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;L&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.cholesky(Sigma)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log_det&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; np.sum(np.log(np.diag(L)))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Essa expressão aparece diretamente na verossimilhança da distribuição normal multivariada e em processos gaussianos, onde $\Sigma$ pode ter milhares de dimensões.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;amostragem-de-normal-multivariada&quot;&gt;Amostragem de normal multivariada&lt;&#x2F;h2&gt;
&lt;p&gt;Uma aplicação elegante de Cholesky: para amostrar $x \sim \mathcal{N}(\mu, \Sigma)$, basta&lt;&#x2F;p&gt;
&lt;p&gt;$$x = \mu + Lz, \qquad z \sim \mathcal{N}(0, I)$$&lt;&#x2F;p&gt;
&lt;p&gt;pois $\operatorname{Cov}(Lz) = L,I,L^T = LL^T = \Sigma$. Uma fatoração resolve o problema de gerar amostras correlacionadas a partir de ruído independente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrizes-esparsas&quot;&gt;Matrizes esparsas&lt;&#x2F;h2&gt;
&lt;p&gt;Para sistemas esparsos grandes, a fatoração sofre &lt;strong&gt;preenchimento&lt;&#x2F;strong&gt;: zeros viram não zeros durante a eliminação, e o fator pode ser muito mais denso que a matriz original.&lt;&#x2F;p&gt;
&lt;p&gt;Duas respostas:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reordenação&lt;&#x2F;strong&gt; (mínimo grau aproximado, dissecção aninhada) para reduzir o preenchimento antes de fatorar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Métodos iterativos&lt;&#x2F;strong&gt; (gradientes conjugados, GMRES), que nunca formam o fator e só precisam do produto matriz-vetor.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Para matrizes muito grandes — milhões de incógnitas em simulação — os métodos iterativos são a única opção viável.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 4 &amp;amp; 2 \ 2 &amp;amp; 3 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Simétrica; testemos Cholesky. Buscamos $L = \begin{pmatrix} \ell_{11} &amp;amp; 0 \ \ell_{21} &amp;amp; \ell_{22}\end{pmatrix}$:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$\ell_{11}^2 = 4 \Rightarrow \ell_{11} = 2$&lt;&#x2F;li&gt;
&lt;li&gt;$\ell_{21}\ell_{11} = 2 \Rightarrow \ell_{21} = 1$&lt;&#x2F;li&gt;
&lt;li&gt;$\ell_{21}^2 + \ell_{22}^2 = 3 \Rightarrow \ell_{22} = \sqrt2$&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Como todas as raízes existem e são reais, $A$ é definida positiva. E $\det(A) = (2 \cdot \sqrt2)^2 = 8$, que confere com $4\cdot3 - 2\cdot2 = 8$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Refatorar dentro do laço.&lt;&#x2F;strong&gt; O erro de desempenho mais frequente nesta área.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Cholesky em matriz não definida positiva.&lt;&#x2F;strong&gt; Vai falhar — trate a exceção em vez de ignorá-la.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar o pivoteamento&lt;&#x2F;strong&gt; ao implementar LU manualmente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Formar o produto $A^TA$&lt;&#x2F;strong&gt; só para poder usar Cholesky, elevando o condicionamento ao quadrado; prefira QR.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fatorar matriz esparsa sem reordenar&lt;&#x2F;strong&gt;, causando explosão de memória.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Golub e Van Loan, capítulos 3 e 4 — LU e Cholesky em detalhe, incluindo variantes por blocos.&lt;&#x2F;li&gt;
&lt;li&gt;Trefethen e Bau, lições 20 a 23 — estabilidade da eliminação gaussiana e por que o pivoteamento parcial funciona na prática.&lt;&#x2F;li&gt;
&lt;li&gt;Davis, &lt;em&gt;Direct Methods for Sparse Linear Systems&lt;&#x2F;em&gt; — a referência sobre fatoração esparsa e reordenação.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do SuiteSparse e do &lt;code&gt;scipy.sparse.linalg&lt;&#x2F;code&gt; — as ferramentas de produção.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-golub2013&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gene H. Golub and Charles F. Van Loan&lt;&#x2F;strong&gt; (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.56021&amp;#x2F;9781421407944&quot; rel=&quot;noopener&quot;&gt;10.56021&amp;#x2F;9781421407944&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-higham2002&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Nicholas J. Higham&lt;&#x2F;strong&gt; (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898718027&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898718027&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gene H. Golub; Charles F. Van Loan (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Nicholas J. Higham (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Determinante</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/determinante/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/determinante/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/determinante/">&lt;h1 id=&quot;determinante&quot;&gt;Determinante&lt;&#x2F;h1&gt;
&lt;p&gt;O determinante é um número associado a uma matriz quadrada que responde a uma pergunta geométrica: &lt;strong&gt;quanto a transformação multiplica volumes, e ela inverte a orientação?&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao-e-calculo&quot;&gt;Definição e cálculo&lt;&#x2F;h2&gt;
&lt;p&gt;Para $2\times2$ e $3\times3$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\det\begin{pmatrix} a &amp;amp; b \ c &amp;amp; d \end{pmatrix} = ad - bc$$&lt;&#x2F;p&gt;
&lt;p&gt;A definição geral é a expansão de Laplace, recursiva em menores. Ela é &lt;strong&gt;inutilizável computacionalmente&lt;&#x2F;strong&gt;: custa $O(n!)$ operações. Para $n = 20$ seriam mais de $10^{18}$ operações.&lt;&#x2F;p&gt;
&lt;p&gt;O método correto é fatorar. Como o determinante de uma triangular é o produto da diagonal, e a eliminação gaussiana só troca o sinal (nas trocas de linha) ou preserva o valor (nas combinações), basta:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;sinal, logdet&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.slogdet(A)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # estável mesmo para n grande&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;det&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; sinal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; np.exp(logdet)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Custo $O(n^3)$. A variante &lt;code&gt;slogdet&lt;&#x2F;code&gt; existe porque determinantes de matrizes grandes estouram a faixa do ponto flutuante com facilidade — o determinante de uma matriz $100\times100$ com entradas da ordem de 10 já ultrapassa $10^{100}$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;propriedades&quot;&gt;Propriedades&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Propriedade&lt;&#x2F;th&gt;&lt;th&gt;Enunciado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Produto&lt;&#x2F;td&gt;&lt;td&gt;$\det(AB) = \det(A)\det(B)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Transposta&lt;&#x2F;td&gt;&lt;td&gt;$\det(A^T) = \det(A)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Inversa&lt;&#x2F;td&gt;&lt;td&gt;$\det(A^{-1}) = 1&#x2F;\det(A)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Escalar&lt;&#x2F;td&gt;&lt;td&gt;$\det(cA) = c^n \det(A)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Triangular&lt;&#x2F;td&gt;&lt;td&gt;Produto da diagonal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Troca de linhas&lt;&#x2F;td&gt;&lt;td&gt;Inverte o sinal&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Linha nula ou repetida&lt;&#x2F;td&gt;&lt;td&gt;$\det = 0$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A propriedade do produto é a mais reveladora: compor transformações multiplica os fatores de volume, exatamente como se espera geometricamente.&lt;&#x2F;p&gt;
&lt;p&gt;Note que $\det(A+B) \ne \det(A) + \det(B)$ — o determinante não é linear na matriz, apesar de ser linear em cada linha separadamente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interpretacao-geometrica&quot;&gt;Interpretação geométrica&lt;&#x2F;h2&gt;
&lt;p&gt;$|\det(A)|$ é o volume da imagem do cubo unitário. O &lt;strong&gt;sinal&lt;&#x2F;strong&gt; indica orientação: negativo significa que a transformação reflete.&lt;&#x2F;p&gt;
&lt;p&gt;Isso dá utilidade direta em geometria computacional. Para três pontos no plano, o sinal de&lt;&#x2F;p&gt;
&lt;p&gt;$$\det\begin{pmatrix} x_2-x_1 &amp;amp; y_2-y_1 \ x_3-x_1 &amp;amp; y_3-y_1 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;diz se o terceiro está à esquerda ou à direita da reta pelos dois primeiros. Esse &lt;strong&gt;teste de orientação&lt;&#x2F;strong&gt; é a primitiva sobre a qual se constroem fecho convexo, triangulação e teste de interseção de segmentos. O módulo do mesmo determinante é o dobro da área do triângulo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;determinante-e-singularidade&quot;&gt;Determinante e singularidade&lt;&#x2F;h2&gt;
&lt;p&gt;$$\det(A) = 0 \iff A \text{ não é inversível} \iff \text{as colunas são dependentes}$$&lt;&#x2F;p&gt;
&lt;p&gt;Geometricamente: a transformação achatou o espaço, colapsando pelo menos uma dimensão.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Cuidado numérico&lt;&#x2F;strong&gt;: comparar o determinante com zero é um teste ruim de singularidade. Ele depende da escala — multiplicar a matriz por $0{,}1$ multiplica o determinante por $10^{-n}$, sem mudar nada de essencial. O indicador correto é o &lt;strong&gt;número de condição&lt;&#x2F;strong&gt; ou o menor valor singular.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;regra-de-cramer-por-que-nao-usar&quot;&gt;Regra de Cramer: por que não usar&lt;&#x2F;h2&gt;
&lt;p&gt;A regra dá a solução de $Ax=b$ como razão de determinantes:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_i = \frac{\det(A_i)}{\det(A)}$$&lt;&#x2F;p&gt;
&lt;p&gt;com $A_i$ a matriz com a $i$-ésima coluna substituída por $b$.&lt;&#x2F;p&gt;
&lt;p&gt;É elegante e teoricamente útil, mas na prática é ruim em tudo: exige $n+1$ determinantes, é numericamente instável e mais lenta que a eliminação. Use-a para provar teoremas, nunca para calcular.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;autovalores-e-polinomio-caracteristico&quot;&gt;Autovalores e polinômio característico&lt;&#x2F;h2&gt;
&lt;p&gt;$$p(\lambda) = \det(A - \lambda I)$$&lt;&#x2F;p&gt;
&lt;p&gt;As raízes são os autovalores, e daí decorre que o determinante é o &lt;strong&gt;produto dos autovalores&lt;&#x2F;strong&gt; (assim como o traço é a soma).&lt;&#x2F;p&gt;
&lt;p&gt;Ainda assim, calcular autovalores pelo polinômio característico é numericamente desastroso: as raízes de um polinômio são extremamente sensíveis aos coeficientes. Algoritmos reais usam iteração QR.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 2 &amp;amp; 1 \ 4 &amp;amp; 3 \end{pmatrix}, \quad \det(A) = 2\cdot3 - 1\cdot4 = 2$$&lt;&#x2F;p&gt;
&lt;p&gt;A matriz dobra áreas e preserva orientação. Como $\det \ne 0$, é inversível:&lt;&#x2F;p&gt;
&lt;p&gt;$$A^{-1} = \frac{1}{2}\begin{pmatrix} 3 &amp;amp; -1 \ -4 &amp;amp; 2 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;E de fato $\det(A^{-1}) = \frac{1}{2}$, o inverso do determinante original.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Geometria computacional.&lt;&#x2F;strong&gt; Testes de orientação, verificação de pontos dentro de circunferência (predicado &lt;em&gt;incircle&lt;&#x2F;em&gt;) na triangulação de Delaunay.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; O jacobiano de uma parametrização usa determinante; a mudança de variáveis em integração também.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Detecção de degeneração.&lt;&#x2F;strong&gt; Em simulação de malhas, um elemento com determinante do jacobiano negativo está invertido — defeito que precisa ser detectado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Probabilidade.&lt;&#x2F;strong&gt; A densidade da distribuição normal multivariada contém $\det(\Sigma)$; na prática usa-se o log-determinante via Cholesky.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expansão de Laplace para $n$ grande.&lt;&#x2F;strong&gt; Fatorial é intratável.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Testar singularidade comparando com zero.&lt;&#x2F;strong&gt; Use condicionamento.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar Cramer para resolver sistemas.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor linearidade na soma de matrizes.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Estouro numérico&lt;&#x2F;strong&gt; em determinantes de matrizes grandes; use log-determinante.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Strang, capítulo 5 — determinantes com ênfase geométrica.&lt;&#x2F;li&gt;
&lt;li&gt;Axler — argumenta convincentemente que determinantes devem vir &lt;em&gt;depois&lt;&#x2F;em&gt; de autovalores, não antes.&lt;&#x2F;li&gt;
&lt;li&gt;Trefethen e Bau, lição 1 — por que o determinante importa pouco em álgebra linear numérica.&lt;&#x2F;li&gt;
&lt;li&gt;Shewchuk, artigos sobre predicados geométricos robustos — como calcular sinais de determinantes com exatidão garantida.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-axler2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon Axler&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-319-11080-6&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-319-11080-6&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Sheldon Axler (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Espaços Vetoriais</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/espacos-vetoriais/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/espacos-vetoriais/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/espacos-vetoriais/">&lt;h1 id=&quot;espacos-vetoriais&quot;&gt;Espaços Vetoriais&lt;&#x2F;h1&gt;
&lt;p&gt;Vetor não é &quot;uma seta&quot; nem &quot;uma lista de números&quot; — essas são representações. Um &lt;strong&gt;espaço vetorial&lt;&#x2F;strong&gt; é qualquer conjunto em que faça sentido somar elementos e multiplicá-los por escalares, respeitando as regras usuais.&lt;&#x2F;p&gt;
&lt;p&gt;Essa abstração é o que faz a álgebra linear render tanto: o mesmo teorema vale para vetores geométricos, polinômios, funções, sinais e imagens.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;Um espaço vetorial sobre um corpo $\mathbb{F}$ (em geral $\mathbb{R}$ ou $\mathbb{C}$) é um conjunto $V$ com duas operações satisfazendo oito axiomas: associatividade e comutatividade da soma, existência de vetor nulo e de opostos, e compatibilidade da multiplicação escalar com a distributividade.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplos que valem ter em mente:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Espaço&lt;&#x2F;th&gt;&lt;th&gt;Elementos&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{R}^n$&lt;&#x2F;td&gt;&lt;td&gt;$n$-uplas de reais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{R}^{m \times n}$&lt;&#x2F;td&gt;&lt;td&gt;Matrizes&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$P_n$&lt;&#x2F;td&gt;&lt;td&gt;Polinômios de grau $\le n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$C[a,b]$&lt;&#x2F;td&gt;&lt;td&gt;Funções contínuas num intervalo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\mathbb{F}_2^n$&lt;&#x2F;td&gt;&lt;td&gt;Vetores de bits, com soma XOR&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O último é particularmente relevante em computação: códigos corretores de erro e criptografia operam em espaços vetoriais sobre corpos finitos, onde a soma é o ou-exclusivo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;combinacao-linear-e-geracao&quot;&gt;Combinação linear e geração&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;combinação linear&lt;&#x2F;strong&gt; de $v_1, \dots, v_k$ é&lt;&#x2F;p&gt;
&lt;p&gt;$$c_1 v_1 + c_2 v_2 + \cdots + c_k v_k$$&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;espaço gerado&lt;&#x2F;strong&gt; $\operatorname{span}{v_1,\dots,v_k}$ é o conjunto de todas essas combinações. Ele é sempre um subespaço.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;independencia-linear&quot;&gt;Independência linear&lt;&#x2F;h2&gt;
&lt;p&gt;Os vetores $v_1,\dots,v_k$ são &lt;strong&gt;linearmente independentes&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$c_1v_1 + \cdots + c_kv_k = 0 \implies c_1 = \cdots = c_k = 0$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou seja: nenhum deles é combinação dos demais. Dependência significa &lt;strong&gt;redundância&lt;&#x2F;strong&gt; — informação repetida.&lt;&#x2F;p&gt;
&lt;p&gt;Essa é a leitura prática mais útil. Numa matriz de dados em que colunas são atributos, colunas linearmente dependentes significam atributos redundantes; é o que causa multicolinearidade em regressão e o que torna a matriz normal singular.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;base-e-dimensao&quot;&gt;Base e dimensão&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;base&lt;&#x2F;strong&gt; é um conjunto linearmente independente que gera o espaço. Todo espaço vetorial de dimensão finita tem base, e &lt;strong&gt;todas as bases têm o mesmo número de elementos&lt;&#x2F;strong&gt; — esse número é a &lt;strong&gt;dimensão&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Numa base ${b_1,\dots,b_n}$, todo vetor se escreve de &lt;strong&gt;forma única&lt;&#x2F;strong&gt; como combinação dos $b_i$. Os coeficientes são as &lt;strong&gt;coordenadas&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A base canônica de $\mathbb{R}^3$ é ${(1,0,0), (0,1,0), (0,0,1)}$, mas ela não tem nada de especial matematicamente. Escolher outra base é justamente o que fazem PCA (base que alinha com as direções de maior variância), a transformada de Fourier (base de frequências) e wavelets (base localizada em tempo e escala). Comprimir dados é, em geral, escolher a base em que poucos coeficientes concentram a informação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;subespacos-fundamentais&quot;&gt;Subespaços fundamentais&lt;&#x2F;h2&gt;
&lt;p&gt;Para uma matriz $A \in \mathbb{R}^{m\times n}$:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Subespaço&lt;&#x2F;th&gt;&lt;th&gt;Definição&lt;&#x2F;th&gt;&lt;th&gt;Dimensão&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Espaço coluna&lt;&#x2F;td&gt;&lt;td&gt;${Ax}$&lt;&#x2F;td&gt;&lt;td&gt;$r$ (posto)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Espaço nulo&lt;&#x2F;td&gt;&lt;td&gt;${x : Ax = 0}$&lt;&#x2F;td&gt;&lt;td&gt;$n - r$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Espaço linha&lt;&#x2F;td&gt;&lt;td&gt;Gerado pelas linhas&lt;&#x2F;td&gt;&lt;td&gt;$r$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Espaço nulo à esquerda&lt;&#x2F;td&gt;&lt;td&gt;${y : A^Ty = 0}$&lt;&#x2F;td&gt;&lt;td&gt;$m - r$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O &lt;strong&gt;teorema do posto-nulidade&lt;&#x2F;strong&gt; amarra tudo:&lt;&#x2F;p&gt;
&lt;p&gt;$$\dim(\text{espaço coluna}) + \dim(\text{espaço nulo}) = n$$&lt;&#x2F;p&gt;
&lt;p&gt;Em termos de sistemas: o posto conta as equações realmente independentes, e a nulidade conta os graus de liberdade da solução. Se $Ax = b$ tem solução e a nulidade é $k$, o conjunto de soluções é um deslocamento de um subespaço de dimensão $k$ — ou seja, há infinitas soluções parametrizadas por $k$ variáveis livres.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Os vetores $(1,2)$, $(2,4)$ e $(1,0)$ em $\mathbb{R}^2$ são independentes?&lt;&#x2F;p&gt;
&lt;p&gt;Não: $(2,4) = 2(1,2)$. Além disso, três vetores em $\mathbb{R}^2$ nunca podem ser independentes — em dimensão $n$, qualquer conjunto com mais de $n$ vetores é dependente.&lt;&#x2F;p&gt;
&lt;p&gt;Já ${(1,2), (1,0)}$ é independente e tem dois elementos em espaço de dimensão dois, logo é base.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; O espaço de atributos é um espaço vetorial; embeddings representam palavras e imagens como vetores em que proximidade significa similaridade semântica. Redução de dimensionalidade é projeção em subespaço.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; Posições, normais e cores são vetores. Interpolação entre vértices é combinação linear com pesos baricêntricos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Códigos corretores.&lt;&#x2F;strong&gt; Um código linear é um subespaço de $\mathbb{F}_q^n$. A distância mínima do código determina quantos erros ele corrige.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compressão.&lt;&#x2F;strong&gt; JPEG projeta blocos numa base de cossenos e descarta coeficientes pequenos; a qualidade da compressão depende inteiramente da escolha da base.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de recomendação.&lt;&#x2F;strong&gt; Fatoração de matrizes representa usuários e itens em um mesmo espaço vetorial de baixa dimensão.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir dimensão com número de vetores.&lt;&#x2F;strong&gt; Cinco vetores em $\mathbb{R}^3$ podem gerar o espaço, mas não formam base.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Achar que espaço vetorial precisa ser $\mathbb{R}^n$.&lt;&#x2F;strong&gt; Funções e polinômios formam espaços vetoriais legítimos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que o vetor nulo pertence a todo subespaço.&lt;&#x2F;strong&gt; Um conjunto que não o contém não é subespaço.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar dependência quase linear.&lt;&#x2F;strong&gt; Numericamente, vetores quase dependentes causam instabilidade mesmo sem serem exatamente dependentes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Strang, &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt; — a apresentação mais intuitiva; as aulas do MIT 18.06 seguem esse livro e estão disponíveis gratuitamente.&lt;&#x2F;li&gt;
&lt;li&gt;Axler, &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt; — trata autovalores sem determinantes, com foco em estrutura; excelente segunda leitura.&lt;&#x2F;li&gt;
&lt;li&gt;Halmos, &lt;em&gt;Finite-Dimensional Vector Spaces&lt;&#x2F;em&gt; — o clássico rigoroso e conciso.&lt;&#x2F;li&gt;
&lt;li&gt;Série &quot;Essence of Linear Algebra&quot; do 3Blue1Brown — construção da intuição geométrica em vídeo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-axler2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon Axler&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-319-11080-6&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-319-11080-6&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-halmos1958&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Paul R. Halmos&lt;&#x2F;strong&gt; (1974). &lt;em&gt;Finite-Dimensional Vector Spaces&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-1-4612-6387-6&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-1-4612-6387-6&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Sheldon Axler (2015). &lt;em&gt;Linear Algebra Done Right&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Paul R. Halmos (1958). &lt;em&gt;Finite-Dimensional Vector Spaces&lt;&#x2F;em&gt;. Van Nostrand.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Matrizes e Operações</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/matrizes-e-operacoes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/matrizes-e-operacoes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/matrizes-e-operacoes/">&lt;h1 id=&quot;matrizes-e-operacoes&quot;&gt;Matrizes e Operações&lt;&#x2F;h1&gt;
&lt;p&gt;Matriz é simultaneamente três coisas: uma tabela de números, a representação de uma transformação linear e um objeto computacional cujo desempenho domina boa parte da computação científica moderna. Vale entender as três leituras.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;operacoes-basicas&quot;&gt;Operações básicas&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Soma&lt;&#x2F;strong&gt; e &lt;strong&gt;multiplicação por escalar&lt;&#x2F;strong&gt; são feitas elemento a elemento e exigem dimensões iguais.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Produto matricial&lt;&#x2F;strong&gt; $C = AB$ com $A \in \mathbb{R}^{m\times n}$ e $B \in \mathbb{R}^{n\times p}$:&lt;&#x2F;p&gt;
&lt;p&gt;$$c_{ij} = \sum_{k=1}^{n} a_{ik}b_{kj}$$&lt;&#x2F;p&gt;
&lt;p&gt;As dimensões internas precisam coincidir. O resultado é $m \times p$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;O produto não é comutativo&lt;&#x2F;strong&gt;: $AB \ne BA$ em geral, e frequentemente um dos dois nem está definido. Isso não é um detalhe técnico — reflete que compor transformações depende da ordem.&lt;&#x2F;p&gt;
&lt;p&gt;É associativo, porém, e isso tem consequência prática enorme. Calcular $A(BC)$ ou $(AB)C$ dá o mesmo resultado com custos muito diferentes: para $A$ de $10\times100$, $B$ de $100\times5$ e $C$ de $5\times50$, a ordem $(AB)C$ custa $5000 + 2500$ operações e $A(BC)$ custa $25000 + 50000$. O problema de escolher a melhor ordem é o clássico exercício de programação dinâmica da multiplicação de cadeia de matrizes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;transposta-e-inversa&quot;&gt;Transposta e inversa&lt;&#x2F;h2&gt;
&lt;p&gt;$$(A^T)&lt;em&gt;{ij} = a&lt;&#x2F;em&gt;{ji}, \qquad (AB)^T = B^TA^T$$&lt;&#x2F;p&gt;
&lt;p&gt;Note a inversão da ordem — vale igual para a inversa: $(AB)^{-1} = B^{-1}A^{-1}$.&lt;&#x2F;p&gt;
&lt;p&gt;A &lt;strong&gt;inversa&lt;&#x2F;strong&gt; $A^{-1}$ satisfaz $AA^{-1} = A^{-1}A = I$. Existe apenas para matrizes quadradas com $\det(A) \ne 0$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Nunca calcule a inversa para resolver um sistema.&lt;&#x2F;strong&gt; Para obter $x$ em $Ax = b$, use eliminação ou uma fatoração: é cerca de três vezes mais rápido e numericamente muito mais estável. &lt;code&gt;numpy.linalg.solve(A, b)&lt;&#x2F;code&gt; é a chamada certa; &lt;code&gt;numpy.linalg.inv(A) @ b&lt;&#x2F;code&gt; é o erro que aparece em código de quem aprendeu a fórmula antes do método.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrizes-especiais&quot;&gt;Matrizes especiais&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;&#x2F;th&gt;&lt;th&gt;Definição&lt;&#x2F;th&gt;&lt;th&gt;Propriedade útil&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Identidade $I$&lt;&#x2F;td&gt;&lt;td&gt;$1$ na diagonal, $0$ fora&lt;&#x2F;td&gt;&lt;td&gt;$AI = IA = A$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Diagonal&lt;&#x2F;td&gt;&lt;td&gt;Zero fora da diagonal&lt;&#x2F;td&gt;&lt;td&gt;Produto e inversa triviais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Triangular&lt;&#x2F;td&gt;&lt;td&gt;Zeros de um lado&lt;&#x2F;td&gt;&lt;td&gt;Sistema resolvido por substituição&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Simétrica&lt;&#x2F;td&gt;&lt;td&gt;$A = A^T$&lt;&#x2F;td&gt;&lt;td&gt;Autovalores reais, autovetores ortogonais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ortogonal&lt;&#x2F;td&gt;&lt;td&gt;$Q^TQ = I$&lt;&#x2F;td&gt;&lt;td&gt;$Q^{-1} = Q^T$; preserva norma&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Esparsa&lt;&#x2F;td&gt;&lt;td&gt;Maioria dos elementos nula&lt;&#x2F;td&gt;&lt;td&gt;Armazenamento e produto especializados&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Definida positiva&lt;&#x2F;td&gt;&lt;td&gt;$x^TAx &amp;gt; 0$ para $x \ne 0$&lt;&#x2F;td&gt;&lt;td&gt;Admite Cholesky&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Matrizes &lt;strong&gt;ortogonais&lt;&#x2F;strong&gt; são especialmente valiosas em computação numérica: como preservam comprimentos e ângulos, não amplificam erro. É por isso que algoritmos estáveis (QR, SVD) são construídos sobre transformações ortogonais.&lt;&#x2F;p&gt;
&lt;p&gt;Matrizes &lt;strong&gt;esparsas&lt;&#x2F;strong&gt; são a regra em aplicações reais — grafos, elementos finitos, sistemas de recomendação. Armazená-las densamente é inviável: uma matriz $10^6 \times 10^6$ densa exigiria $8$ TB, enquanto a versão esparsa com 10 não nulos por linha cabe em cerca de $240$ MB.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;custo-computacional&quot;&gt;Custo computacional&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Operação&lt;&#x2F;th&gt;&lt;th&gt;Custo ingênuo&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Soma&lt;&#x2F;td&gt;&lt;td&gt;$O(mn)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Produto matriz-vetor&lt;&#x2F;td&gt;&lt;td&gt;$O(mn)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Produto matriz-matriz&lt;&#x2F;td&gt;&lt;td&gt;$O(mnp)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Inversa &#x2F; determinante&lt;&#x2F;td&gt;&lt;td&gt;$O(n^3)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Resolver sistema&lt;&#x2F;td&gt;&lt;td&gt;$O(n^3)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O produto de duas matrizes $n \times n$ custa $O(n^3)$ pelo método direto. Strassen reduz para $O(n^{2{,}807})$ e algoritmos mais sofisticados chegam abaixo de $n^{2{,}372}$, mas com constantes tão grandes que não são usados na prática.&lt;&#x2F;p&gt;
&lt;p&gt;O que &lt;strong&gt;realmente&lt;&#x2F;strong&gt; importa em desempenho não é o expoente e sim a &lt;strong&gt;localidade de memória&lt;&#x2F;strong&gt;. Uma implementação ingênua com três laços tem péssimo aproveitamento de cache. Bibliotecas BLAS otimizadas trabalham por blocos que cabem no cache e chegam a ser duas ordens de grandeza mais rápidas que o código direto, com a mesma complexidade assintótica.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.random.rand(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;B&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.random.rand(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;C&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt; B&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;          # chama BLAS: segundos → milissegundos&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A lição prática: em álgebra linear numérica, &lt;strong&gt;nunca escreva o laço&lt;&#x2F;strong&gt;. Chame a biblioteca.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;traco-e-posto&quot;&gt;Traço e posto&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;traço&lt;&#x2F;strong&gt; é a soma da diagonal, e satisfaz a propriedade cíclica $\operatorname{tr}(AB) = \operatorname{tr}(BA)$, muito usada em demonstrações de aprendizado de máquina. O traço também é a soma dos autovalores.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;posto&lt;&#x2F;strong&gt; é o número de linhas (ou colunas) linearmente independentes. Matrizes de posto baixo comprimem bem: se $A$ tem posto $r$, ela pode ser escrita como produto de uma $m\times r$ por uma $r\times n$, o que reduz o armazenamento de $mn$ para $r(m+n)$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 1 &amp;amp; 2 \ 3 &amp;amp; 4 \end{pmatrix}, \quad B = \begin{pmatrix} 0 &amp;amp; 1 \ 1 &amp;amp; 0 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$AB = \begin{pmatrix} 1\cdot0 + 2\cdot1 &amp;amp; 1\cdot1 + 2\cdot0 \ 3\cdot0 + 4\cdot1 &amp;amp; 3\cdot1 + 4\cdot0 \end{pmatrix} = \begin{pmatrix} 2 &amp;amp; 1 \ 4 &amp;amp; 3 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$BA = \begin{pmatrix} 3 &amp;amp; 4 \ 1 &amp;amp; 2 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Confirmando que $AB \ne BA$: multiplicar por $B$ à direita troca colunas, à esquerda troca linhas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Redes neurais.&lt;&#x2F;strong&gt; Uma camada densa é $y = Wx + b$. O treinamento é dominado por produtos matriciais, e é exatamente isso que GPUs fazem bem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; Matrizes $4\times4$ em coordenadas homogêneas compõem toda a cadeia de transformações do pipeline.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Grafos.&lt;&#x2F;strong&gt; A potência $A^k$ da matriz de adjacência conta caminhos de comprimento $k$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Simulação.&lt;&#x2F;strong&gt; Discretizar uma equação diferencial parcial produz um sistema linear esparso e enorme, resolvido por métodos iterativos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inverter para resolver sistema.&lt;&#x2F;strong&gt; Use &lt;code&gt;solve&lt;&#x2F;code&gt;, não &lt;code&gt;inv&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir &lt;code&gt;*&lt;&#x2F;code&gt; com &lt;code&gt;@&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt; Em NumPy, &lt;code&gt;*&lt;&#x2F;code&gt; é produto elemento a elemento.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar broadcasting&lt;&#x2F;strong&gt; e obter resultado de forma inesperada sem erro.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Escrever laços aninhados&lt;&#x2F;strong&gt; em vez de chamar BLAS.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Armazenar matriz esparsa densamente.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que o produto não comuta&lt;&#x2F;strong&gt;, sobretudo ao compor transformações gráficas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Strang, capítulos 1 a 3 — matrizes com ênfase em interpretação geométrica.&lt;&#x2F;li&gt;
&lt;li&gt;Golub e Van Loan, &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt; — a bíblia da álgebra linear numérica; referência para quem implementa.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do NumPy e do SciPy sobre &lt;code&gt;linalg&lt;&#x2F;code&gt; — quando usar cada rotina e o que cada uma assume.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do LAPACK — os nomes das rotinas e suas hipóteses; útil para entender mensagens de erro de bibliotecas de alto nível.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-golub2013&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gene H. Golub and Charles F. Van Loan&lt;&#x2F;strong&gt; (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.56021&amp;#x2F;9781421407944&quot; rel=&quot;noopener&quot;&gt;10.56021&amp;#x2F;9781421407944&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Gene H. Golub; Charles F. Van Loan (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Ortogonalidade e Fatoração QR</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/ortogonalidade-e-qr/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/ortogonalidade-e-qr/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/ortogonalidade-e-qr/">&lt;h1 id=&quot;ortogonalidade-e-fatoracao-qr&quot;&gt;Ortogonalidade e Fatoração QR&lt;&#x2F;h1&gt;
&lt;p&gt;Ortogonalidade é o conceito que torna a álgebra linear &lt;strong&gt;numericamente estável&lt;&#x2F;strong&gt;. Transformações ortogonais preservam comprimentos, e por isso não amplificam erro de arredondamento — a razão pela qual os algoritmos confiáveis são construídos sobre elas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bases-ortonormais&quot;&gt;Bases ortonormais&lt;&#x2F;h2&gt;
&lt;p&gt;Um conjunto ${q_1,\dots,q_n}$ é &lt;strong&gt;ortonormal&lt;&#x2F;strong&gt; quando $\langle q_i,q_j\rangle = \delta_{ij}$: vetores unitários e mutuamente ortogonais.&lt;&#x2F;p&gt;
&lt;p&gt;A vantagem prática é enorme. Numa base qualquer, achar as coordenadas de $v$ exige resolver um sistema. Numa base ortonormal, elas são simples produtos internos:&lt;&#x2F;p&gt;
&lt;p&gt;$$v = \sum_i \langle v,q_i\rangle q_i$$&lt;&#x2F;p&gt;
&lt;p&gt;Um problema $O(n^3)$ vira $O(n^2)$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrizes-ortogonais&quot;&gt;Matrizes ortogonais&lt;&#x2F;h2&gt;
&lt;p&gt;$Q$ é &lt;strong&gt;ortogonal&lt;&#x2F;strong&gt; quando $Q^TQ = I$, isto é, $Q^{-1} = Q^T$.&lt;&#x2F;p&gt;
&lt;p&gt;Propriedades decisivas:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Preserva norma: $|Qx| = |x|$.&lt;&#x2F;li&gt;
&lt;li&gt;Preserva produto interno e ângulos.&lt;&#x2F;li&gt;
&lt;li&gt;$|\det Q| = 1$.&lt;&#x2F;li&gt;
&lt;li&gt;$\kappa_2(Q) = 1$ — o melhor condicionamento possível.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A última é o ponto central: multiplicar por matriz ortogonal &lt;strong&gt;não piora o condicionamento do problema&lt;&#x2F;strong&gt;. Toda operação intermediária de um algoritmo estável tende a ser ortogonal por essa razão.&lt;&#x2F;p&gt;
&lt;p&gt;Rotações e reflexões são exatamente as transformações ortogonais de $\mathbb{R}^n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gram-schmidt&quot;&gt;Gram-Schmidt&lt;&#x2F;h2&gt;
&lt;p&gt;Transforma uma base qualquer em ortonormal, subtraindo de cada vetor as projeções sobre os anteriores:&lt;&#x2F;p&gt;
&lt;p&gt;$$u_k = v_k - \sum_{i&amp;lt;k} \operatorname{proj}_{q_i}(v_k), \qquad q_k = \frac{u_k}{|u_k|}$$&lt;&#x2F;p&gt;
&lt;p&gt;A versão clássica é &lt;strong&gt;numericamente instável&lt;&#x2F;strong&gt;: os erros de arredondamento fazem a ortogonalidade se degradar ao longo do processo. A versão &lt;strong&gt;modificada&lt;&#x2F;strong&gt; subtrai as projeções uma a uma, atualizando o vetor a cada passo, e é bem melhor:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; gram_schmidt_modificado&lt;&#x2F;span&gt;&lt;span&gt;(V):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    n, k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; V.shape&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.zeros((n, k))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.zeros((k, k))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(k):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; V[:, j].copy()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(j):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            R[i, j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; Q[:, i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; R[i, j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; Q[:, i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;     # atualiza a cada passo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        R[j, j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.norm(v)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Q[:, j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; R[j, j]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; Q, R&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Mesmo assim, para trabalho sério prefira Householder.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fatoracao-qr&quot;&gt;Fatoração QR&lt;&#x2F;h2&gt;
&lt;p&gt;Toda matriz $A \in \mathbb{R}^{m\times n}$ com $m \ge n$ se escreve&lt;&#x2F;p&gt;
&lt;p&gt;$$A = QR$$&lt;&#x2F;p&gt;
&lt;p&gt;com $Q$ de colunas ortonormais e $R$ triangular superior.&lt;&#x2F;p&gt;
&lt;p&gt;Três métodos de obtê-la:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Método&lt;&#x2F;th&gt;&lt;th&gt;Estabilidade&lt;&#x2F;th&gt;&lt;th&gt;Observação&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Gram-Schmidt clássico&lt;&#x2F;td&gt;&lt;td&gt;Ruim&lt;&#x2F;td&gt;&lt;td&gt;Só didático&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Gram-Schmidt modificado&lt;&#x2F;td&gt;&lt;td&gt;Razoável&lt;&#x2F;td&gt;&lt;td&gt;Aceitável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Householder&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Excelente&lt;&#x2F;td&gt;&lt;td&gt;Padrão do LAPACK&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Rotações de Givens&lt;&#x2F;td&gt;&lt;td&gt;Excelente&lt;&#x2F;td&gt;&lt;td&gt;Boa para matrizes esparsas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Refletores de Householder&lt;&#x2F;strong&gt; zeram uma coluna inteira de uma vez, refletindo o vetor sobre um hiperplano:&lt;&#x2F;p&gt;
&lt;p&gt;$$H = I - 2\frac{vv^T}{v^Tv}$$&lt;&#x2F;p&gt;
&lt;p&gt;Cada $H$ é ortogonal e simétrica. Aplicando $n$ refletores, $A$ vira triangular. Custo: $\frac{2}{3}n^3$ para matriz quadrada — cerca do dobro da eliminação LU, e essa é a moeda de troca: paga-se o dobro por estabilidade muito superior.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Rotações de Givens&lt;&#x2F;strong&gt; zeram um elemento por vez, o que é preferível quando a matriz já tem muitos zeros ou quando se atualiza uma fatoração existente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;qr-e-minimos-quadrados&quot;&gt;QR e mínimos quadrados&lt;&#x2F;h2&gt;
&lt;p&gt;Este é o uso mais importante. Para minimizar $|Ax-b|_2$ com $A = QR$:&lt;&#x2F;p&gt;
&lt;p&gt;$$|Ax - b| = |QRx - b| = |Rx - Q^Tb|$$&lt;&#x2F;p&gt;
&lt;p&gt;usando que $Q$ preserva norma. Basta então resolver o sistema triangular $Rx = Q^Tb$ por substituição regressiva.&lt;&#x2F;p&gt;
&lt;p&gt;A vantagem sobre as equações normais é decisiva: $\kappa(A^TA) = \kappa(A)^2$, enquanto o método QR trabalha com $\kappa(A)$. Em problemas mal condicionados, isso é a diferença entre resultado útil e ruído.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Q, R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.qr(A)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.solve(R, Q.T&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ou, mais robusto, deixando a biblioteca escolher:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt;_&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.lstsq(A, b,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; rcond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;outras-aplicacoes&quot;&gt;Outras aplicações&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Algoritmo QR para autovalores.&lt;&#x2F;strong&gt; Fatorar e remultiplicar na ordem trocada, repetidamente, converge para forma triangular com os autovalores na diagonal. É o algoritmo padrão do mundo inteiro.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ortogonalização em gráficos.&lt;&#x2F;strong&gt; Matrizes de rotação acumuladas ao longo de milhares de quadros perdem ortogonalidade por arredondamento. Reortogonalizar periodicamente evita que a cena comece a distorcer.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Redes neurais.&lt;&#x2F;strong&gt; Inicialização ortogonal de pesos ajuda a evitar explosão e desaparecimento de gradiente em redes profundas e recorrentes, precisamente porque preserva norma.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compressão e projeções aleatórias.&lt;&#x2F;strong&gt; Projeções em subespaços ortonormais aleatórios preservam distâncias aproximadamente — o conteúdo do lema de Johnson-Lindenstrauss.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Ortonormalizar $v_1 = (1,1,0)$ e $v_2 = (1,0,1)$.&lt;&#x2F;p&gt;
&lt;p&gt;$$q_1 = \frac{v_1}{|v_1|} = \frac{1}{\sqrt2}(1,1,0)$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\langle v_2,q_1\rangle = \frac{1}{\sqrt2}, \qquad u_2 = v_2 - \frac{1}{\sqrt2}q_1 = \left(\tfrac12, -\tfrac12, 1\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;$$|u_2| = \sqrt{\tfrac14+\tfrac14+1} = \frac{\sqrt6}{2}, \qquad q_2 = \frac{1}{\sqrt6}(1,-1,2)$$&lt;&#x2F;p&gt;
&lt;p&gt;Conferindo: $\langle q_1,q_2\rangle = \frac{1}{\sqrt{12}}(1 - 1 + 0) = 0$. Ortogonais.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gram-Schmidt clássico em código de produção.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Equações normais em problema mal condicionado.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Não reortogonalizar&lt;&#x2F;strong&gt; matrizes de rotação acumuladas.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que $Q$ é quadrada.&lt;&#x2F;strong&gt; Na QR reduzida, $Q$ é $m\times n$ e $QQ^T \ne I$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar o sinal.&lt;&#x2F;strong&gt; A fatoração QR é única a menos de sinais das colunas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Trefethen e Bau, lições 7 a 11 — QR, Gram-Schmidt e Householder; a melhor exposição disponível.&lt;&#x2F;li&gt;
&lt;li&gt;Golub e Van Loan, capítulo 5 — todos os detalhes de implementação.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do LAPACK, rotinas &lt;code&gt;geqrf&lt;&#x2F;code&gt; e &lt;code&gt;orgqr&lt;&#x2F;code&gt; — o que as bibliotecas realmente fazem.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-golub2013&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gene H. Golub and Charles F. Van Loan&lt;&#x2F;strong&gt; (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.56021&amp;#x2F;9781421407944&quot; rel=&quot;noopener&quot;&gt;10.56021&amp;#x2F;9781421407944&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Gene H. Golub; Charles F. Van Loan (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Produto Interno e Normas</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/produto-interno-e-normas/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/produto-interno-e-normas/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/produto-interno-e-normas/">&lt;h1 id=&quot;produto-interno-e-normas&quot;&gt;Produto Interno e Normas&lt;&#x2F;h1&gt;
&lt;p&gt;Produto interno e norma acrescentam &lt;strong&gt;geometria&lt;&#x2F;strong&gt; ao espaço vetorial: comprimento, ângulo, distância e ortogonalidade. Sem eles, um espaço vetorial não sabe o que é &quot;perto&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;produto-interno&quot;&gt;Produto interno&lt;&#x2F;h2&gt;
&lt;p&gt;Em $\mathbb{R}^n$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\langle u, v \rangle = u^Tv = \sum_{i=1}^{n} u_iv_i$$&lt;&#x2F;p&gt;
&lt;p&gt;Propriedades: simetria, linearidade em cada argumento e positividade ($\langle v,v\rangle &amp;gt; 0$ para $v \ne 0$).&lt;&#x2F;p&gt;
&lt;p&gt;A relação com ângulo é o que dá significado geométrico:&lt;&#x2F;p&gt;
&lt;p&gt;$$\langle u, v \rangle = |u||v|\cos\theta$$&lt;&#x2F;p&gt;
&lt;p&gt;Daí: $\langle u,v\rangle = 0$ significa &lt;strong&gt;ortogonalidade&lt;&#x2F;strong&gt;; positivo significa ângulo agudo; negativo, obtuso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;normas-vetoriais&quot;&gt;Normas vetoriais&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Norma&lt;&#x2F;th&gt;&lt;th&gt;Fórmula&lt;&#x2F;th&gt;&lt;th&gt;Nome&lt;&#x2F;th&gt;&lt;th&gt;Uso&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$|x|_1$&lt;&#x2F;td&gt;&lt;td&gt;$\sum \lvert x_i \rvert$&lt;&#x2F;td&gt;&lt;td&gt;Manhattan&lt;&#x2F;td&gt;&lt;td&gt;Regularização esparsa&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$|x|_2$&lt;&#x2F;td&gt;&lt;td&gt;$\sqrt{\sum x_i^2}$&lt;&#x2F;td&gt;&lt;td&gt;Euclidiana&lt;&#x2F;td&gt;&lt;td&gt;Distância usual&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$|x|_\infty$&lt;&#x2F;td&gt;&lt;td&gt;$\max \lvert x_i \rvert$&lt;&#x2F;td&gt;&lt;td&gt;Máximo&lt;&#x2F;td&gt;&lt;td&gt;Erro de pior caso&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$|x|_p$&lt;&#x2F;td&gt;&lt;td&gt;$(\sum \lvert x_i \rvert^p)^{1&#x2F;p}$&lt;&#x2F;td&gt;&lt;td&gt;Geral&lt;&#x2F;td&gt;&lt;td&gt;Interpolação entre as anteriores&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Toda norma satisfaz positividade, homogeneidade ($|cx| = |c||x|$) e desigualdade triangular ($|x+y| \le |x| + |y|$).&lt;&#x2F;p&gt;
&lt;p&gt;Em dimensão finita todas as normas são &lt;strong&gt;equivalentes&lt;&#x2F;strong&gt; — cada uma limita a outra por constantes. Isso significa que convergência não depende da norma escolhida; o que depende é a &lt;strong&gt;geometria da bola unitária&lt;&#x2F;strong&gt;, e é aí que a escolha importa na prática.&lt;&#x2F;p&gt;
&lt;p&gt;A bola unitária de $\ell_1$ é um losango com vértices sobre os eixos; a de $\ell_2$ é uma esfera. Quando um problema de otimização é resolvido dentro dessas bolas, a de $\ell_1$ tende a produzir soluções nos vértices — isto é, com coordenadas exatamente nulas. &lt;strong&gt;É essa a razão geométrica de a regularização $L_1$ (LASSO) produzir modelos esparsos, e a $L_2$ (Ridge) apenas encolher os coeficientes sem zerá-los.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;desigualdade-de-cauchy-schwarz&quot;&gt;Desigualdade de Cauchy-Schwarz&lt;&#x2F;h2&gt;
&lt;p&gt;$$|\langle u,v\rangle| \le |u|,|v|$$&lt;&#x2F;p&gt;
&lt;p&gt;com igualdade se e somente se $u$ e $v$ são paralelos. É a desigualdade mais usada da matemática aplicada, e o que garante que $\cos\theta$ definido acima fique entre $-1$ e $1$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;similaridade-do-cosseno&quot;&gt;Similaridade do cosseno&lt;&#x2F;h2&gt;
&lt;p&gt;$$\text{sim}(u,v) = \frac{\langle u,v\rangle}{|u||v|} \in [-1,1]$$&lt;&#x2F;p&gt;
&lt;p&gt;Mede alinhamento &lt;strong&gt;ignorando magnitude&lt;&#x2F;strong&gt;. É a métrica padrão para comparar embeddings de texto, documentos em modelo vetorial e vetores de recomendação — em todos esses casos, o que importa é a direção, não o tamanho.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; cosseno&lt;&#x2F;span&gt;&lt;span&gt;(u, v):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; np.dot(u, v)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; (np.linalg.norm(u)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.norm(v))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Se os vetores forem previamente normalizados, a similaridade do cosseno vira simples produto interno — o que permite usar produto matricial e busca por vizinho mais próximo com aceleração de hardware. É o truque usado por todo banco de dados vetorial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;normas-matriciais&quot;&gt;Normas matriciais&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Norma de Frobenius&lt;&#x2F;strong&gt;, análoga à euclidiana:&lt;&#x2F;p&gt;
&lt;p&gt;$$|A|&lt;em&gt;F = \sqrt{\sum&lt;&#x2F;em&gt;{i,j} a_{ij}^2} = \sqrt{\operatorname{tr}(A^TA)}$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Normas induzidas&lt;&#x2F;strong&gt;, que medem o fator máximo de ampliação:&lt;&#x2F;p&gt;
&lt;p&gt;$$|A|&lt;em&gt;p = \max&lt;&#x2F;em&gt;{x \ne 0} \frac{|Ax|_p}{|x|_p}$$&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$|A|_1$: maior soma absoluta de coluna.&lt;&#x2F;li&gt;
&lt;li&gt;$|A|_\infty$: maior soma absoluta de linha.&lt;&#x2F;li&gt;
&lt;li&gt;$|A|_2$: maior valor singular.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Normas induzidas são &lt;strong&gt;submultiplicativas&lt;&#x2F;strong&gt;: $|AB| \le |A||B|$. É essa propriedade que permite estimar propagação de erro em cadeias de operações, e é a base da definição do número de condição $\kappa(A) = |A||A^{-1}|$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;projecao-ortogonal&quot;&gt;Projeção ortogonal&lt;&#x2F;h2&gt;
&lt;p&gt;A projeção de $v$ sobre $u$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{proj}_u(v) = \frac{\langle v,u\rangle}{\langle u,u\rangle}u$$&lt;&#x2F;p&gt;
&lt;p&gt;Projeção sobre um subespaço com base ortonormal ${q_1,\dots,q_k}$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{proj}(v) = \sum_{i=1}^{k} \langle v,q_i\rangle q_i$$&lt;&#x2F;p&gt;
&lt;p&gt;Essa fórmula é o coração de mínimos quadrados (projetar $b$ no espaço coluna de $A$), de Gram-Schmidt e de toda análise em bases ortonormais, incluindo Fourier.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Para $u = (3,4)$ e $v = (1,0)$:&lt;&#x2F;p&gt;
&lt;p&gt;$$|u|_2 = 5, \quad |u|&lt;em&gt;1 = 7, \quad |u|&lt;&#x2F;em&gt;\infty = 4$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\langle u,v\rangle = 3, \quad \cos\theta = \frac{3}{5 \cdot 1} = 0{,}6$$&lt;&#x2F;p&gt;
&lt;p&gt;Cauchy-Schwarz confere: $|3| \le 5 \cdot 1$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Busca vetorial.&lt;&#x2F;strong&gt; Bancos como FAISS e pgvector indexam por distância euclidiana ou cosseno; a escolha muda os resultados e precisa ser consistente com o modelo de embedding usado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Regularização.&lt;&#x2F;strong&gt; $L_1$ para esparsidade, $L_2$ para estabilidade; a escolha é uma decisão de modelagem, não de gosto.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise de erro.&lt;&#x2F;strong&gt; Normas matriciais quantificam como o erro se propaga em cadeias de operações numéricas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gráficos.&lt;&#x2F;strong&gt; Normalizar vetores normais é obrigatório para iluminação correta; a norma euclidiana aparece em toda medida de distância.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comparar distâncias euclidianas entre atributos de escalas diferentes&lt;&#x2F;strong&gt;, sem padronizar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir similaridade do cosseno com distância.&lt;&#x2F;strong&gt; Similaridade maior é melhor; distância menor é melhor.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a normalização&lt;&#x2F;strong&gt; antes de calcular cosseno.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar norma errada no índice vetorial&lt;&#x2F;strong&gt; em relação à usada no treino do modelo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular $|A|_2$ pela definição.&lt;&#x2F;strong&gt; É o maior valor singular; obtenha-o da SVD.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Trefethen e Bau, lições 1 a 3 — normas e condicionamento apresentados com clareza exemplar.&lt;&#x2F;li&gt;
&lt;li&gt;Boyd e Vandenberghe, capítulo sobre normas — a conexão com otimização convexa; o livro é gratuito no site de Stanford.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do FAISS e do pgvector — como a escolha de métrica afeta índice e resultado.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-boyd2004&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Stephen Boyd and Lieven Vandenberghe&lt;&#x2F;strong&gt; (2004). &lt;em&gt;Convex Optimization&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511804441&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511804441&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Stephen Boyd; Lieven Vandenberghe (2004). &lt;em&gt;Convex Optimization&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Sistemas Lineares</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/sistemas-lineares/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/sistemas-lineares/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/sistemas-lineares/">&lt;h1 id=&quot;sistemas-lineares&quot;&gt;Sistemas Lineares&lt;&#x2F;h1&gt;
&lt;p&gt;Resolver $Ax = b$ é o problema computacional mais executado do mundo. Ele aparece dentro de simulação física, ajuste de modelos, otimização, gráficos e praticamente todo método numérico.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;formulacao&quot;&gt;Formulação&lt;&#x2F;h2&gt;
&lt;p&gt;$$\begin{cases} a_{11}x_1 + \cdots + a_{1n}x_n = b_1 \ \vdots \ a_{m1}x_1 + \cdots + a_{mn}x_n = b_m \end{cases} \iff Ax = b$$&lt;&#x2F;p&gt;
&lt;p&gt;Três leituras do mesmo objeto, e cada uma ilumina uma coisa:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Por linhas&lt;&#x2F;strong&gt;: cada equação é um hiperplano; a solução é a interseção.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Por colunas&lt;&#x2F;strong&gt;: $b$ é combinação linear das colunas de $A$; existe solução se e somente se $b$ está no espaço coluna.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Por transformação&lt;&#x2F;strong&gt;: procura-se o vetor que $A$ leva em $b$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A leitura por colunas é a mais útil, porque responde de imediato à pergunta da existência.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;existencia-e-unicidade&quot;&gt;Existência e unicidade&lt;&#x2F;h2&gt;
&lt;p&gt;Seja $r$ o posto de $A$ e $[A|b]$ a matriz aumentada:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Condição&lt;&#x2F;th&gt;&lt;th&gt;Resultado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\operatorname{posto}(A) &amp;lt; \operatorname{posto}([A\vert b])$&lt;&#x2F;td&gt;&lt;td&gt;Sem solução (inconsistente)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\operatorname{posto}(A) = \operatorname{posto}([A\vert b]) = n$&lt;&#x2F;td&gt;&lt;td&gt;Solução única&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\operatorname{posto}(A) = \operatorname{posto}([A\vert b]) &amp;lt; n$&lt;&#x2F;td&gt;&lt;td&gt;Infinitas soluções&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Quando há infinitas soluções, o conjunto é $x_p + \mathcal{N}(A)$: uma solução particular mais o espaço nulo. O número de variáveis livres é $n - r$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;eliminacao-gaussiana&quot;&gt;Eliminação gaussiana&lt;&#x2F;h2&gt;
&lt;p&gt;O método padrão transforma o sistema em triangular por operações que preservam o conjunto de soluções: trocar linhas, multiplicar linha por escalar não nulo, somar múltiplo de uma linha a outra.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; eliminacao&lt;&#x2F;span&gt;&lt;span&gt;(A, b):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(A)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;        # pivoteamento parcial: escolhe o maior pivô em módulo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; max&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(k, n),&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; key&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=lambda&lt;&#x2F;span&gt;&lt;span&gt; i:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span&gt;(A[i][k]))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        A[k], A[p]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; A[p], A[k]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        b[k], b[p]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; b[p], b[k]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span&gt;(A[k][k])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e-12&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;matriz singular ou quase singular&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;, n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; A[i][k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; A[k][k]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(k, n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                A[i][j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; A[k][j]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            b[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; b[k]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # substituição regressiva&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; reversed&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;range&lt;&#x2F;span&gt;&lt;span&gt;(n)):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (b[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; sum&lt;&#x2F;span&gt;&lt;span&gt;(A[i][j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; x[j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;, n)))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; A[i][i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Custo: $\frac{2}{3}n^3$ operações, dominado pela eliminação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pivoteamento-por-que-e-obrigatorio&quot;&gt;Pivoteamento: por que é obrigatório&lt;&#x2F;h2&gt;
&lt;p&gt;Sem pivoteamento, o algoritmo falha ao encontrar pivô nulo — e, pior, produz resultado ruim com pivô &lt;strong&gt;pequeno&lt;&#x2F;strong&gt;. Considere:&lt;&#x2F;p&gt;
&lt;p&gt;$$\begin{pmatrix} 10^{-20} &amp;amp; 1 \ 1 &amp;amp; 1 \end{pmatrix}\begin{pmatrix}x_1\x_2\end{pmatrix} = \begin{pmatrix}1\2\end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Sem trocar linhas, o multiplicador é $10^{20}$, e ao subtrair, o valor $1$ da segunda linha é engolido pelo arredondamento. O resultado sai completamente errado, sem nenhum aviso.&lt;&#x2F;p&gt;
&lt;p&gt;Com &lt;strong&gt;pivoteamento parcial&lt;&#x2F;strong&gt; — trocar para que o maior elemento em módulo da coluna vire pivô — os multiplicadores ficam com módulo $\le 1$ e a amplificação de erro é controlada. É por isso que toda implementação séria pivoteia, e por isso que escrever eliminação &quot;do jeito do livro&quot; sem pivoteamento é um defeito latente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sistemas-sobredeterminados-e-minimos-quadrados&quot;&gt;Sistemas sobredeterminados e mínimos quadrados&lt;&#x2F;h2&gt;
&lt;p&gt;Com mais equações que incógnitas ($m &amp;gt; n$), em geral não há solução exata. Busca-se então o $x$ que minimiza o resíduo:&lt;&#x2F;p&gt;
&lt;p&gt;$$\min_x |Ax - b|_2$$&lt;&#x2F;p&gt;
&lt;p&gt;A condição de otimalidade dá as &lt;strong&gt;equações normais&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$A^TA,x = A^Tb$$&lt;&#x2F;p&gt;
&lt;p&gt;Elas resolvem o problema, mas têm um defeito numérico sério: o número de condição de $A^TA$ é o &lt;strong&gt;quadrado&lt;&#x2F;strong&gt; do de $A$, o que pode destruir a precisão. A prática recomendada é usar a &lt;strong&gt;fatoração QR&lt;&#x2F;strong&gt; ou a &lt;strong&gt;SVD&lt;&#x2F;strong&gt;, que resolvem o mesmo problema sem elevar o condicionamento ao quadrado.&lt;&#x2F;p&gt;
&lt;p&gt;Mínimos quadrados é exatamente a regressão linear: ajustar um modelo a dados com ruído.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x, residuos, posto, sv&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.lstsq(A, b,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; rcond&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;condicionamento&quot;&gt;Condicionamento&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;número de condição&lt;&#x2F;strong&gt; mede a sensibilidade da solução a perturbações:&lt;&#x2F;p&gt;
&lt;p&gt;$$\kappa(A) = |A| \cdot |A^{-1}|$$&lt;&#x2F;p&gt;
&lt;p&gt;Interpretação prática: com $\kappa(A) \approx 10^k$, perdem-se cerca de $k$ dígitos de precisão. Em precisão dupla (cerca de 16 dígitos), $\kappa = 10^{14}$ deixa apenas dois dígitos confiáveis.&lt;&#x2F;p&gt;
&lt;p&gt;Uma matriz &lt;strong&gt;mal condicionada&lt;&#x2F;strong&gt; é quase singular: pequenas mudanças em $b$ produzem grandes mudanças em $x$. Verifique sempre com &lt;code&gt;numpy.linalg.cond&lt;&#x2F;code&gt; antes de confiar num resultado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$\begin{cases} 2x + y = 5 \ 4x + 3y = 11 \end{cases}$$&lt;&#x2F;p&gt;
&lt;p&gt;Eliminando: $L_2 \leftarrow L_2 - 2L_1$ dá $y = 1$. Substituindo na primeira: $2x + 1 = 5$, logo $x = 2$.&lt;&#x2F;p&gt;
&lt;p&gt;Verificando na segunda: $4(2) + 3(1) = 11$. Correto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Regressão.&lt;&#x2F;strong&gt; Todo ajuste de mínimos quadrados é um sistema linear.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Simulação.&lt;&#x2F;strong&gt; Métodos implícitos para equações diferenciais exigem resolver um sistema esparso a cada passo de tempo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gráficos.&lt;&#x2F;strong&gt; Coordenadas baricêntricas, deformação de malhas e iluminação global recaem em sistemas lineares.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Otimização.&lt;&#x2F;strong&gt; O passo de Newton resolve um sistema com a hessiana a cada iteração.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Redes.&lt;&#x2F;strong&gt; Análise de circuitos e fluxo em redes por leis de conservação produzem sistemas lineares.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Não pivotear.&lt;&#x2F;strong&gt; Perda catastrófica de precisão.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar equações normais&lt;&#x2F;strong&gt; em problema mal condicionado, em vez de QR ou SVD.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Comparar com zero exato&lt;&#x2F;strong&gt; ao testar singularidade; use tolerância relativa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar a estrutura.&lt;&#x2F;strong&gt; Sistemas esparsos, simétricos ou de banda têm métodos muito mais rápidos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular a inversa.&lt;&#x2F;strong&gt; Sempre mais lento e menos estável que fatorar.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Trefethen e Bau, &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt; — as 40 lições são a melhor introdução moderna ao assunto; condicionamento e estabilidade tratados com clareza rara.&lt;&#x2F;li&gt;
&lt;li&gt;Golub e Van Loan — a referência completa sobre algoritmos matriciais.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do SciPy &lt;code&gt;scipy.linalg&lt;&#x2F;code&gt; — rotinas especializadas para matrizes de banda, simétricas e esparsas.&lt;&#x2F;li&gt;
&lt;li&gt;Higham, &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt; — para quem quer entender profundamente o que dá errado e por quê.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-golub2013&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gene H. Golub and Charles F. Van Loan&lt;&#x2F;strong&gt; (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.56021&amp;#x2F;9781421407944&quot; rel=&quot;noopener&quot;&gt;10.56021&amp;#x2F;9781421407944&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-higham2002&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Nicholas J. Higham&lt;&#x2F;strong&gt; (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898718027&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898718027&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Gene H. Golub; Charles F. Van Loan (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Nicholas J. Higham (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Decomposição em Valores Singulares</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/svd/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/svd/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/svd/">&lt;h1 id=&quot;decomposicao-em-valores-singulares&quot;&gt;Decomposição em Valores Singulares&lt;&#x2F;h1&gt;
&lt;p&gt;A SVD é a fatoração mais informativa da álgebra linear. Ela existe para &lt;strong&gt;toda&lt;&#x2F;strong&gt; matriz — quadrada ou não, singular ou não — e revela posto, condicionamento, subespaços fundamentais e a melhor aproximação de posto baixo.&lt;&#x2F;p&gt;
&lt;p&gt;Se você só puder aprender uma decomposição, aprenda esta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enunciado&quot;&gt;Enunciado&lt;&#x2F;h2&gt;
&lt;p&gt;Toda $A \in \mathbb{R}^{m\times n}$ se fatora como&lt;&#x2F;p&gt;
&lt;p&gt;$$A = U\Sigma V^T$$&lt;&#x2F;p&gt;
&lt;p&gt;com:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$U \in \mathbb{R}^{m\times m}$ ortogonal — vetores singulares à esquerda;&lt;&#x2F;li&gt;
&lt;li&gt;$\Sigma \in \mathbb{R}^{m\times n}$ diagonal com $\sigma_1 \ge \sigma_2 \ge \cdots \ge 0$ — valores singulares;&lt;&#x2F;li&gt;
&lt;li&gt;$V \in \mathbb{R}^{n\times n}$ ortogonal — vetores singulares à direita.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Os valores singulares são as raízes quadradas dos autovalores de $A^TA$, e são sempre reais e não negativos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interpretacao-geometrica&quot;&gt;Interpretação geométrica&lt;&#x2F;h2&gt;
&lt;p&gt;Toda transformação linear é a composição de três etapas: &lt;strong&gt;uma rotação, um escalonamento ao longo dos eixos, outra rotação&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;$V^T$ gira o espaço de entrada até alinhar com as direções principais; $\Sigma$ estica cada eixo pelo respectivo $\sigma_i$; $U$ gira o resultado para o espaço de saída. A imagem da esfera unitária por $A$ é sempre um elipsoide cujos semieixos têm comprimentos $\sigma_i$.&lt;&#x2F;p&gt;
&lt;p&gt;Essa é a razão de a SVD revelar tanto: ela separa &quot;o quanto&quot; a transformação estica de &quot;para onde&quot; ela aponta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-que-a-svd-revela&quot;&gt;O que a SVD revela&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Quantidade&lt;&#x2F;th&gt;&lt;th&gt;Leitura na SVD&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Posto&lt;&#x2F;td&gt;&lt;td&gt;Número de $\sigma_i &amp;gt; 0$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$|A|_2$&lt;&#x2F;td&gt;&lt;td&gt;$\sigma_1$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$|A|_F$&lt;&#x2F;td&gt;&lt;td&gt;$\sqrt{\sum \sigma_i^2}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\kappa_2(A)$&lt;&#x2F;td&gt;&lt;td&gt;$\sigma_1&#x2F;\sigma_r$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Espaço coluna&lt;&#x2F;td&gt;&lt;td&gt;Primeiras $r$ colunas de $U$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Espaço nulo&lt;&#x2F;td&gt;&lt;td&gt;Últimas $n-r$ colunas de $V$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Determinar posto numericamente é justamente onde a SVD é insubstituível: em vez de perguntar quais $\sigma_i$ são exatamente zero, conta-se quantos estão acima de uma tolerância. Isso dá o &lt;strong&gt;posto numérico&lt;&#x2F;strong&gt;, que é a única noção utilizável em ponto flutuante.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aproximacao-de-posto-baixo&quot;&gt;Aproximação de posto baixo&lt;&#x2F;h2&gt;
&lt;p&gt;Escrevendo a SVD como soma de matrizes de posto 1:&lt;&#x2F;p&gt;
&lt;p&gt;$$A = \sum_{i=1}^{r} \sigma_i u_i v_i^T$$&lt;&#x2F;p&gt;
&lt;p&gt;e truncando nos $k$ primeiros termos obtém-se $A_k$. O &lt;strong&gt;teorema de Eckart-Young&lt;&#x2F;strong&gt; garante que $A_k$ é a &lt;strong&gt;melhor&lt;&#x2F;strong&gt; aproximação de posto $k$, tanto na norma 2 quanto na de Frobenius:&lt;&#x2F;p&gt;
&lt;p&gt;$$|A - A_k|&lt;em&gt;2 = \sigma&lt;&#x2F;em&gt;{k+1}$$&lt;&#x2F;p&gt;
&lt;p&gt;Este é um dos resultados mais úteis da matemática aplicada: ele diz não apenas que existe boa aproximação, mas que a SVD &lt;strong&gt;a encontra&lt;&#x2F;strong&gt;, e quanto erro ela comete.&lt;&#x2F;p&gt;
&lt;p&gt;O ganho de armazenamento é direto: em vez de $mn$ números, guardam-se $k(m+n+1)$.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;U, s, Vt&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.svd(A,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; full_matrices&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;False&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 50&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;A_k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (U[:, :k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; s[:k])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt; Vt[:k, :]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;erro_relativo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; s[k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; s[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;pseudoinversa&quot;&gt;Pseudoinversa&lt;&#x2F;h2&gt;
&lt;p&gt;$$A^+ = V\Sigma^+U^T$$&lt;&#x2F;p&gt;
&lt;p&gt;com $\Sigma^+$ obtida invertendo os valores singulares não nulos e transpondo.&lt;&#x2F;p&gt;
&lt;p&gt;A pseudoinversa dá a solução de &lt;strong&gt;norma mínima&lt;&#x2F;strong&gt; entre as que minimizam $|Ax-b|$ — resolvendo simultaneamente os casos sobredeterminado e subdeterminado, e funcionando mesmo com $A$ singular.&lt;&#x2F;p&gt;
&lt;p&gt;Na prática, valores singulares muito pequenos são zerados antes da inversão (o parâmetro &lt;code&gt;rcond&lt;&#x2F;code&gt;), evitando que ruído seja amplificado por $1&#x2F;\sigma$ com $\sigma$ minúsculo. Essa &lt;strong&gt;regularização por truncamento&lt;&#x2F;strong&gt; é a forma mais simples de lidar com problemas mal-postos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;relacao-com-pca&quot;&gt;Relação com PCA&lt;&#x2F;h2&gt;
&lt;p&gt;Centralize os dados na matriz $X$ (amostras nas linhas). Então:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A matriz de covariância é $\frac{1}{n-1}X^TX$.&lt;&#x2F;li&gt;
&lt;li&gt;Os componentes principais são as colunas de $V$.&lt;&#x2F;li&gt;
&lt;li&gt;A variância explicada pelo $i$-ésimo componente é $\sigma_i^2&#x2F;(n-1)$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Calcular PCA pela SVD de $X$ é &lt;strong&gt;preferível&lt;&#x2F;strong&gt; a calcular autovalores de $X^TX$: evita formar o produto, que eleva o condicionamento ao quadrado, e é mais estável.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Compressão de imagens.&lt;&#x2F;strong&gt; Aplicar SVD a uma imagem e reter poucos termos produz compressão com degradação previsível. Não compete com JPEG na prática, mas é a demonstração mais clara do teorema de Eckart-Young.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de recomendação.&lt;&#x2F;strong&gt; A fatoração da matriz usuário-item em fatores latentes é a base da filtragem colaborativa. Como a matriz real é esparsa e incompleta, usa-se SVD truncada com otimização (mínimos quadrados alternados) em vez da SVD exata.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise semântica latente.&lt;&#x2F;strong&gt; Aplicar SVD à matriz termo-documento revela tópicos como direções no espaço reduzido, agrupando sinônimos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Remoção de ruído.&lt;&#x2F;strong&gt; Se o sinal está num subespaço de dimensão baixa e o ruído é espalhado, truncar a SVD limpa o dado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Visão computacional.&lt;&#x2F;strong&gt; Estimativa de matriz fundamental, alinhamento de nuvens de pontos (algoritmo de Kabsch) e reconstrução 3D usam SVD para resolver sistemas homogêneos: a solução é o vetor singular associado ao menor valor singular.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Diagnóstico numérico.&lt;&#x2F;strong&gt; Antes de confiar em qualquer resultado de sistema linear, olhe o espectro de valores singulares. Uma queda abrupta indica posto deficiente; um decaimento suave até valores minúsculos indica mau condicionamento.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 3 &amp;amp; 0 \ 0 &amp;amp; 2 \ 0 &amp;amp; 0 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Já está em forma diagonal, então $\sigma_1 = 3$, $\sigma_2 = 2$, com $U$ e $V$ essencialmente identidades.&lt;&#x2F;p&gt;
&lt;p&gt;Daí: posto $2$, $|A|_2 = 3$, $|A|_F = \sqrt{13}$, $\kappa_2 = 3&#x2F;2$. A melhor aproximação de posto 1 é a matriz com apenas o $3$, cometendo erro $|A - A_1|_2 = \sigma_2 = 2$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar &lt;code&gt;full_matrices=True&lt;&#x2F;code&gt; sem necessidade&lt;&#x2F;strong&gt;, alocando uma $U$ de $m\times m$ com $m$ enorme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Não centralizar os dados&lt;&#x2F;strong&gt; antes de aplicar SVD para PCA — o primeiro componente vira a média.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular SVD completa&lt;&#x2F;strong&gt; quando só se quer os maiores valores singulares; use métodos truncados (&lt;code&gt;scipy.sparse.linalg.svds&lt;&#x2F;code&gt;) ou aleatorizados.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir vetores singulares com autovetores.&lt;&#x2F;strong&gt; Coincidem apenas para matrizes simétricas definidas positivas.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer o sinal.&lt;&#x2F;strong&gt; Vetores singulares são definidos a menos de sinal, e resultados podem diferir entre bibliotecas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Trefethen e Bau, lições 4 a 5 — a melhor introdução curta à SVD, com a interpretação geométrica bem construída.&lt;&#x2F;li&gt;
&lt;li&gt;Strang, capítulo 7 — SVD com aplicações e muita intuição.&lt;&#x2F;li&gt;
&lt;li&gt;Golub e Van Loan, capítulo 8 — algoritmos de cálculo da SVD.&lt;&#x2F;li&gt;
&lt;li&gt;Halko, Martinsson e Tropp, &quot;Finding Structure with Randomness&quot; — SVD aleatorizada, o método prático para matrizes muito grandes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-strang2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gilbert Strang&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780980232776&quot; rel=&quot;noopener&quot;&gt;9780980232776&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-golub2013&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Gene H. Golub and Charles F. Van Loan&lt;&#x2F;strong&gt; (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.56021&amp;#x2F;9781421407944&quot; rel=&quot;noopener&quot;&gt;10.56021&amp;#x2F;9781421407944&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Gilbert Strang (2016). &lt;em&gt;Introduction to Linear Algebra&lt;&#x2F;em&gt;. Wellesley-Cambridge Press.&lt;&#x2F;li&gt;
&lt;li&gt;Gene H. Golub; Charles F. Van Loan (2013). &lt;em&gt;Matrix Computations&lt;&#x2F;em&gt;. Johns Hopkins University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Análise Assintótica</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/analise-assintotica/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/analise-assintotica/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/analise-assintotica/">&lt;h1 id=&quot;analise-assintotica&quot;&gt;Análise Assintótica&lt;&#x2F;h1&gt;
&lt;p&gt;Análise assintótica descreve como o custo de um algoritmo cresce quando a entrada cresce, ignorando constantes e termos de menor ordem. É a linguagem padrão para comparar algoritmos — e também a fonte de várias conclusões erradas quando aplicada sem cuidado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;as-cinco-notacoes&quot;&gt;As cinco notações&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Notação&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;th&gt;Analogia&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$f = O(g)$&lt;&#x2F;td&gt;&lt;td&gt;$f$ cresce no máximo como $g$&lt;&#x2F;td&gt;&lt;td&gt;$\le$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f = \Omega(g)$&lt;&#x2F;td&gt;&lt;td&gt;$f$ cresce pelo menos como $g$&lt;&#x2F;td&gt;&lt;td&gt;$\ge$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f = \Theta(g)$&lt;&#x2F;td&gt;&lt;td&gt;Mesma ordem&lt;&#x2F;td&gt;&lt;td&gt;$=$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f = o(g)$&lt;&#x2F;td&gt;&lt;td&gt;Estritamente menor&lt;&#x2F;td&gt;&lt;td&gt;$&amp;lt;$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$f = \omega(g)$&lt;&#x2F;td&gt;&lt;td&gt;Estritamente maior&lt;&#x2F;td&gt;&lt;td&gt;$&amp;gt;$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Formalmente, $f = O(g)$ quando existem $c &amp;gt; 0$ e $n_0$ tais que $0 \le f(n) \le c,g(n)$ para todo $n \ge n_0$.&lt;&#x2F;p&gt;
&lt;p&gt;Pela via dos limites, quando o limite existe:&lt;&#x2F;p&gt;
&lt;p&gt;$$\lim_{n\to\infty}\frac{f(n)}{g(n)} = \begin{cases} 0 &amp;amp; \Rightarrow f = o(g) \ c \in (0,\infty) &amp;amp; \Rightarrow f = \Theta(g) \ \infty &amp;amp; \Rightarrow f = \omega(g) \end{cases}$$&lt;&#x2F;p&gt;
&lt;p&gt;Um esclarecimento importante: $O$ é um &lt;strong&gt;limite superior&lt;&#x2F;strong&gt;, não uma descrição exata. Dizer que a busca binária é $O(n^3)$ é tecnicamente verdadeiro e praticamente inútil. Quando se quer precisão, a notação correta é $\Theta$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hierarquia-de-crescimento&quot;&gt;Hierarquia de crescimento&lt;&#x2F;h2&gt;
&lt;p&gt;$$1 \prec \log\log n \prec \log n \prec \sqrt n \prec n \prec n\log n \prec n^2 \prec n^3 \prec 2^n \prec n! \prec n^n$$&lt;&#x2F;p&gt;
&lt;p&gt;Vale ter uma noção concreta das escalas. Supondo $10^9$ operações por segundo:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;$n$&lt;&#x2F;th&gt;&lt;th&gt;$n\log n$&lt;&#x2F;th&gt;&lt;th&gt;$n^2$&lt;&#x2F;th&gt;&lt;th&gt;$2^n$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$10^3$&lt;&#x2F;td&gt;&lt;td&gt;$10,\mu$s&lt;&#x2F;td&gt;&lt;td&gt;$1$ ms&lt;&#x2F;td&gt;&lt;td&gt;inviável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$10^6$&lt;&#x2F;td&gt;&lt;td&gt;$20$ ms&lt;&#x2F;td&gt;&lt;td&gt;$17$ min&lt;&#x2F;td&gt;&lt;td&gt;inviável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$10^9$&lt;&#x2F;td&gt;&lt;td&gt;$30$ s&lt;&#x2F;td&gt;&lt;td&gt;$30$ anos&lt;&#x2F;td&gt;&lt;td&gt;inviável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A fronteira prática costuma estar entre $n^2$ e $n^3$: $n = 10^4$ ainda é tratável em $O(n^2)$, mas $n = 10^6$ não é.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;regras-de-manipulacao&quot;&gt;Regras de manipulação&lt;&#x2F;h2&gt;
&lt;p&gt;$$O(f) + O(g) = O(\max(f,g))$$
$$O(f)\cdot O(g) = O(fg)$$
$$O(cf) = O(f)$$
$$\log_a n = \Theta(\log_b n)$$&lt;&#x2F;p&gt;
&lt;p&gt;A última justifica escrever $O(\log n)$ sem base: mudar de base multiplica por constante. Já em $2^n$ versus $3^n$ a base &lt;strong&gt;importa&lt;&#x2F;strong&gt; — não são da mesma ordem.&lt;&#x2F;p&gt;
&lt;p&gt;Algumas simplificações frequentes:&lt;&#x2F;p&gt;
&lt;p&gt;$$3n^2 + 5n + 100 = \Theta(n^2), \qquad \log(n!) = \Theta(n\log n)$$&lt;&#x2F;p&gt;
&lt;p&gt;A segunda vem da aproximação de Stirling e é o que dá o limite inferior $\Omega(n\log n)$ para ordenação por comparação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;melhor-medio-e-pior-caso&quot;&gt;Melhor, médio e pior caso&lt;&#x2F;h2&gt;
&lt;p&gt;São dimensões &lt;strong&gt;independentes&lt;&#x2F;strong&gt; da notação assintótica, e confundi-las é o erro conceitual mais comum da área.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Algoritmo&lt;&#x2F;th&gt;&lt;th&gt;Melhor&lt;&#x2F;th&gt;&lt;th&gt;Médio&lt;&#x2F;th&gt;&lt;th&gt;Pior&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Busca linear&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(1)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Quicksort&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n\log n)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n\log n)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n^2)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Merge sort&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n\log n)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n\log n)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n\log n)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Busca em hash&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(1)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(1)$&lt;&#x2F;td&gt;&lt;td&gt;$\Theta(n)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;É perfeitamente correto dizer &quot;o pior caso do quicksort é $\Theta(n^2)$&quot; e &quot;o caso médio é $\Theta(n\log n)$&quot; — são afirmações sobre funções diferentes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;analise-amortizada&quot;&gt;Análise amortizada&lt;&#x2F;h2&gt;
&lt;p&gt;Mede o custo &lt;strong&gt;médio por operação numa sequência&lt;&#x2F;strong&gt;, o que é diferente do caso médio probabilístico: a amortização é uma garantia determinística sobre a sequência inteira.&lt;&#x2F;p&gt;
&lt;p&gt;O exemplo canônico é o vetor dinâmico. Uma inserção individual pode custar $O(n)$ (quando realoca), mas $n$ inserções custam $O(n)$ no total, porque as realocações formam progressão geométrica $1 + 2 + 4 + \cdots + n &amp;lt; 2n$. Logo o custo amortizado é $O(1)$.&lt;&#x2F;p&gt;
&lt;p&gt;O método do potencial formaliza: define-se uma função de potencial sobre o estado da estrutura, e o custo amortizado é o custo real mais a variação de potencial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;os-limites-da-analise-assintotica&quot;&gt;Os limites da análise assintótica&lt;&#x2F;h2&gt;
&lt;p&gt;Esta seção é a mais importante da página, porque é o que separa quem usa a ferramenta de quem a idolatra.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Constantes importam.&lt;&#x2F;strong&gt; Um algoritmo $O(n\log n)$ com constante 1000 perde para um $O(n^2)$ com constante 1 em toda entrada com $n &amp;lt; 10^4$. É por isso que implementações reais de ordenação trocam para inserção em subvetores pequenos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;A hierarquia de memória não aparece.&lt;&#x2F;strong&gt; Dois algoritmos $\Theta(n)$ podem diferir em uma ordem de grandeza conforme o padrão de acesso. Percorrer um vetor sequencialmente é muito mais rápido que percorrer uma lista ligada de mesmo tamanho, apesar de ambos serem lineares.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;$n$ é finito.&lt;&#x2F;strong&gt; Se a entrada real nunca passa de mil elementos, o comportamento assintótico é irrelevante — meça.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;O modelo pode não valer.&lt;&#x2F;strong&gt; O modelo de custo uniforme supõe operações aritméticas de custo constante, o que deixa de valer com inteiros de precisão arbitrária.&lt;&#x2F;p&gt;
&lt;p&gt;A conclusão prática: use análise assintótica para &lt;strong&gt;descartar&lt;&#x2F;strong&gt; algoritmos claramente inadequados e para entender escalabilidade; use medição para escolher entre candidatos plausíveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Analisar:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; f&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    total&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;          # n iterações&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(i, n):&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # n - i iterações&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            total&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; total&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O total de iterações é $\sum_{i=0}^{n-1}(n-i) = n + (n-1) + \cdots + 1 = \frac{n(n+1)}{2}$.&lt;&#x2F;p&gt;
&lt;p&gt;Logo $\Theta(n^2)$. Note que o laço interno não roda $n$ vezes sempre — mas a soma continua sendo quadrática, e o fator $\frac12$ desaparece na notação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar $O$ quando se quer dizer $\Theta$.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir pior caso com caso médio.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar complexidades de laços aninhados&lt;&#x2F;strong&gt; em vez de multiplicar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar o custo de operações &quot;simples&quot;&lt;&#x2F;strong&gt; — concatenar cadeias imutáveis num laço é o clássico $O(n^2)$ acidental.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Otimizar assintoticamente sem medir&lt;&#x2F;strong&gt;, trocando um algoritmo simples e rápido por um sofisticado e lento na faixa de uso real.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a complexidade de espaço&lt;&#x2F;strong&gt;, que às vezes é o gargalo real.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cormen et al., capítulo 3 — as definições formais das cinco notações com exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Graham, Knuth e Patashnik, capítulo 9 — assintótica em profundidade, incluindo expansões e a notação $O$ com rigor.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 1, seção 1.2.11 — a origem do uso rigoroso dessas notações em computação.&lt;&#x2F;li&gt;
&lt;li&gt;Bentley, &lt;em&gt;Programming Pearls&lt;&#x2F;em&gt; — o contraponto empírico: quando a medição contradiz a análise.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-graham1994&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ronald L. Graham and Donald E. Knuth and Oren Patashnik&lt;&#x2F;strong&gt; (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780134389967&quot; rel=&quot;noopener&quot;&gt;9780134389967&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-knuth1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Donald E. Knuth&lt;&#x2F;strong&gt; (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www-cs-faculty.stanford.edu&amp;#x2F;~knuth&amp;#x2F;taocp.html&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Ronald L. Graham; Donald E. Knuth; Oren Patashnik (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;li&gt;Donald E. Knuth (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Derivadas</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/derivadas/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/derivadas/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/derivadas/">&lt;h1 id=&quot;derivadas&quot;&gt;Derivadas&lt;&#x2F;h1&gt;
&lt;p&gt;Derivada é a taxa instantânea de variação — e, mais util ainda, o &lt;strong&gt;melhor modelo linear local&lt;&#x2F;strong&gt; de uma função. Essa segunda leitura é a que explica por que derivadas dominam a otimização e o aprendizado de máquina.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;$$f&#x27;(a) = \lim_{h\to 0}\frac{f(a+h)-f(a)}{h}$$&lt;&#x2F;p&gt;
&lt;p&gt;Equivalentemente, $f&#x27;(a)$ é o único número tal que&lt;&#x2F;p&gt;
&lt;p&gt;$$f(a+h) = f(a) + f&#x27;(a)h + o(h)$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou seja: perto de $a$, a função se comporta como uma reta de inclinação $f&#x27;(a)$. Todo método de otimização baseado em gradiente explora exatamente essa aproximação — dá um passo confiando que o modelo linear vale numa vizinhança.&lt;&#x2F;p&gt;
&lt;p&gt;Diferenciável implica contínua; a recíproca é falsa ($|x|$ em zero).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;regras&quot;&gt;Regras&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Regra&lt;&#x2F;th&gt;&lt;th&gt;Fórmula&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Potência&lt;&#x2F;td&gt;&lt;td&gt;$(x^n)&#x27; = nx^{n-1}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Produto&lt;&#x2F;td&gt;&lt;td&gt;$(fg)&#x27; = f&#x27;g + fg&#x27;$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Quociente&lt;&#x2F;td&gt;&lt;td&gt;$(f&#x2F;g)&#x27; = \dfrac{f&#x27;g - fg&#x27;}{g^2}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Cadeia&lt;&#x2F;td&gt;&lt;td&gt;$(f\circ g)&#x27;(x) = f&#x27;(g(x)),g&#x27;(x)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Exponencial&lt;&#x2F;td&gt;&lt;td&gt;$(e^x)&#x27; = e^x$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Logaritmo&lt;&#x2F;td&gt;&lt;td&gt;$(\ln x)&#x27; = 1&#x2F;x$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A &lt;strong&gt;regra da cadeia&lt;&#x2F;strong&gt; é a mais importante para computação: ela é literalmente o algoritmo de retropropagação. Uma rede neural é uma composição de funções, e o gradiente da perda em relação a um peso profundo é o produto das derivadas ao longo do caminho.&lt;&#x2F;p&gt;
&lt;p&gt;É também a origem do &lt;strong&gt;desaparecimento do gradiente&lt;&#x2F;strong&gt;: um produto de muitos fatores menores que 1 tende a zero exponencialmente com a profundidade. Conexões residuais existem para criar caminhos em que esse produto não encolhe.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gradiente-e-derivadas-parciais&quot;&gt;Gradiente e derivadas parciais&lt;&#x2F;h2&gt;
&lt;p&gt;Para $f: \mathbb{R}^n \to \mathbb{R}$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\nabla f = \left(\frac{\partial f}{\partial x_1}, \dots, \frac{\partial f}{\partial x_n}\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;Dois fatos que orientam toda otimização:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;O gradiente aponta na direção de &lt;strong&gt;maior crescimento&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Ele é &lt;strong&gt;ortogonal&lt;&#x2F;strong&gt; às curvas de nível.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Daí o método do gradiente descendente:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_{k+1} = x_k - \alpha\nabla f(x_k)$$&lt;&#x2F;p&gt;
&lt;p&gt;Em pontos de mínimo interior, $\nabla f = 0$ — condição necessária, não suficiente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hessiana&quot;&gt;Hessiana&lt;&#x2F;h2&gt;
&lt;p&gt;A matriz das segundas derivadas:&lt;&#x2F;p&gt;
&lt;p&gt;$$H_{ij} = \frac{\partial^2 f}{\partial x_i \partial x_j}$$&lt;&#x2F;p&gt;
&lt;p&gt;Para $f$ suficientemente regular, $H$ é &lt;strong&gt;simétrica&lt;&#x2F;strong&gt; (teorema de Schwarz), o que permite usar todo o maquinário de matrizes simétricas.&lt;&#x2F;p&gt;
&lt;p&gt;A hessiana classifica pontos críticos:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Hessiana&lt;&#x2F;th&gt;&lt;th&gt;Ponto&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Definida positiva&lt;&#x2F;td&gt;&lt;td&gt;Mínimo local&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Definida negativa&lt;&#x2F;td&gt;&lt;td&gt;Máximo local&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Indefinida&lt;&#x2F;td&gt;&lt;td&gt;Sela&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Semidefinida&lt;&#x2F;td&gt;&lt;td&gt;Inconclusivo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Em dimensão alta, &lt;strong&gt;selas são muito mais comuns que mínimos locais&lt;&#x2F;strong&gt; — a chance de todos os $n$ autovalores terem o mesmo sinal cai rapidamente com $n$. Esse fato mudou a compreensão de por que o treinamento de redes profundas funciona: o obstáculo prático são as regiões de sela, não mínimos locais ruins.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;diferenciacao-automatica&quot;&gt;Diferenciação automática&lt;&#x2F;h2&gt;
&lt;p&gt;Três formas de obter derivadas em código:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Numérica.&lt;&#x2F;strong&gt; $f&#x27;(x) \approx \frac{f(x+h)-f(x)}{h}$. Simples, mas sofre com o dilema do passo: $h$ grande dá erro de truncamento, $h$ pequeno dá cancelamento catastrófico. O melhor $h$ fica em torno de $\sqrt{\epsilon_{\text{máq}}}$, dando só metade dos dígitos. A diferença centrada $\frac{f(x+h)-f(x-h)}{2h}$ é bem melhor.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Simbólica.&lt;&#x2F;strong&gt; Manipula expressões e dá fórmula exata, mas sofre com explosão de tamanho.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Automática.&lt;&#x2F;strong&gt; Aplica a regra da cadeia sobre as operações elementares do programa, com precisão de máquina. É o que PyTorch, JAX e TensorFlow fazem.&lt;&#x2F;p&gt;
&lt;p&gt;O modo &lt;strong&gt;reverso&lt;&#x2F;strong&gt; (retropropagação) calcula o gradiente de uma saída escalar em relação a todas as entradas com custo comparável ao de uma avaliação da função — o que é exatamente o caso do treino de redes, com milhões de parâmetros e uma única perda. O modo &lt;strong&gt;direto&lt;&#x2F;strong&gt; é preferível na situação oposta: poucas entradas, muitas saídas.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; torch&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; torch.tensor([&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;2.0&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; requires_grad&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;True&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;**&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;3&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;y.backward()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(x.grad)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;      # 3x² + 2 = 14&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;teorema-do-valor-medio&quot;&gt;Teorema do valor médio&lt;&#x2F;h2&gt;
&lt;p&gt;Se $f$ é contínua em $[a,b]$ e diferenciável em $(a,b)$, existe $c$ com&lt;&#x2F;p&gt;
&lt;p&gt;$$f&#x27;(c) = \frac{f(b)-f(a)}{b-a}$$&lt;&#x2F;p&gt;
&lt;p&gt;É a ferramenta que converte informação sobre a derivada em informação sobre a função — a base das estimativas de erro em análise numérica e da prova de que derivada nula em um intervalo implica função constante.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Minimizar $f(x) = x^2 - 4x + 7$.&lt;&#x2F;p&gt;
&lt;p&gt;$f&#x27;(x) = 2x - 4 = 0$ dá $x = 2$. Como $f&#x27;&#x27;(x) = 2 &amp;gt; 0$, é mínimo. O valor mínimo é $f(2) = 3$.&lt;&#x2F;p&gt;
&lt;p&gt;Com gradiente descendente a partir de $x_0 = 0$ e $\alpha = 0{,}1$:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_1 = 0 - 0{,}1(-4) = 0{,}4, \quad x_2 = 0{,}4 - 0{,}1(-3{,}2) = 0{,}72, \quad \dots$$&lt;&#x2F;p&gt;
&lt;p&gt;convergindo para $2$. Note que $\alpha$ grande demais (aqui, $\alpha &amp;gt; 1$) faz a iteração divergir — o limite é $2&#x2F;L$ com $L$ a constante de Lipschitz do gradiente, que neste caso é 2.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; Todo treino por gradiente; a retropropagação é a regra da cadeia aplicada com memoização.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; Normais de superfície são gradientes; renderização diferenciável permite otimizar cenas a partir de imagens.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Física.&lt;&#x2F;strong&gt; Forças são gradientes de potencial; integradores numéricos avançam o estado com base em derivadas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise de sensibilidade.&lt;&#x2F;strong&gt; Derivadas medem quanto uma saída depende de cada entrada — usado em finanças e em interpretabilidade de modelos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Passo grande demais&lt;&#x2F;strong&gt; no gradiente descendente, causando divergência.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir mínimo local com global.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar derivada numérica&lt;&#x2F;strong&gt; quando a automática está disponível.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que ReLU não é diferenciável em zero&lt;&#x2F;strong&gt; — na prática usa-se subgradiente, com convenção arbitrária.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Acumular gradiente sem zerar&lt;&#x2F;strong&gt; entre iterações (o &lt;code&gt;optimizer.zero_grad()&lt;&#x2F;code&gt; esquecido).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Spivak, &lt;em&gt;Calculus&lt;&#x2F;em&gt; — derivadas com rigor e ótimos exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Nocedal e Wright, &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;, capítulos 1 a 3 — derivadas do ponto de vista de quem otimiza.&lt;&#x2F;li&gt;
&lt;li&gt;Goodfellow, Bengio e Courville, capítulo 6 — retropropagação explicada como grafo computacional; o livro é gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do JAX sobre &lt;code&gt;grad&lt;&#x2F;code&gt;, &lt;code&gt;jacfwd&lt;&#x2F;code&gt; e &lt;code&gt;jacrev&lt;&#x2F;code&gt; — modo direto e reverso na prática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-spivak2008&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Spivak&lt;&#x2F;strong&gt; (2008). &lt;em&gt;Calculus&lt;&#x2F;em&gt;. Publish or Perish. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780914098911&quot; rel=&quot;noopener&quot;&gt;9780914098911&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-nocedal2006&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Jorge Nocedal and Stephen J. Wright&lt;&#x2F;strong&gt; (2006). &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-0-387-40065-5&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-0-387-40065-5&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-goodfellow2016&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ian Goodfellow and Yoshua Bengio and Aaron Courville&lt;&#x2F;strong&gt; (2016). &lt;em&gt;Deep Learning&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262337373&quot; rel=&quot;noopener&quot;&gt;9780262337373&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Spivak (2008). &lt;em&gt;Calculus&lt;&#x2F;em&gt;. Publish or Perish.&lt;&#x2F;li&gt;
&lt;li&gt;Jorge Nocedal; Stephen J. Wright (2006). &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Ian Goodfellow; Yoshua Bengio; Aaron Courville (2016). &lt;em&gt;Deep Learning&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Integrais</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/integrais/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/integrais/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/integrais/">&lt;h1 id=&quot;integrais&quot;&gt;Integrais&lt;&#x2F;h1&gt;
&lt;p&gt;Integral é acumulação: soma de infinitas contribuições infinitesimais. Em computação, ela aparece sobretudo em probabilidade contínua (onde probabilidade é área sob a densidade) e em métodos numéricos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;integral-de-riemann&quot;&gt;Integral de Riemann&lt;&#x2F;h2&gt;
&lt;p&gt;Divida $[a,b]$ em $n$ subintervalos e some as áreas dos retângulos:&lt;&#x2F;p&gt;
&lt;p&gt;$$\int_a^b f(x),dx = \lim_{n\to\infty}\sum_{i=1}^{n} f(x_i^*),\Delta x$$&lt;&#x2F;p&gt;
&lt;p&gt;Quando o limite existe independentemente da escolha dos pontos, $f$ é integrável. Toda função contínua num intervalo fechado é integrável.&lt;&#x2F;p&gt;
&lt;p&gt;A soma de Riemann é literalmente o algoritmo de integração numérica mais simples — o que torna a definição imediatamente implementável.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-fundamental-do-calculo&quot;&gt;Teorema fundamental do cálculo&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Primeira parte.&lt;&#x2F;strong&gt; Se $F(x) = \int_a^x f(t),dt$ com $f$ contínua, então $F&#x27;(x) = f(x)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Segunda parte.&lt;&#x2F;strong&gt; Se $F&#x27; = f$, então&lt;&#x2F;p&gt;
&lt;p&gt;$$\int_a^b f(x),dx = F(b) - F(a)$$&lt;&#x2F;p&gt;
&lt;p&gt;Este é um dos grandes resultados da matemática: ele conecta as duas operações centrais do cálculo — derivar e acumular — mostrando que são inversas. Na prática, transforma um limite de somas num cálculo de diferença.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tecnicas&quot;&gt;Técnicas&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Substituição&lt;&#x2F;strong&gt; (a regra da cadeia ao contrário):&lt;&#x2F;p&gt;
&lt;p&gt;$$\int f(g(x))g&#x27;(x),dx = \int f(u),du$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Por partes&lt;&#x2F;strong&gt; (a regra do produto ao contrário):&lt;&#x2F;p&gt;
&lt;p&gt;$$\int u,dv = uv - \int v,du$$&lt;&#x2F;p&gt;
&lt;p&gt;Vale registrar um fato prático importante: &lt;strong&gt;a maioria das funções não tem primitiva elementar&lt;&#x2F;strong&gt;. $e^{-x^2}$, central em estatística, é o exemplo canônico — não existe fórmula fechada em funções elementares para sua integral. É por isso que a distribuição normal usa a função erro e por isso que integração numérica é indispensável.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;integrais-improprias&quot;&gt;Integrais impróprias&lt;&#x2F;h2&gt;
&lt;p&gt;Quando o intervalo é infinito ou a função é ilimitada:&lt;&#x2F;p&gt;
&lt;p&gt;$$\int_1^\infty \frac{dx}{x^p} \quad \text{converge} \iff p &amp;gt; 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Compare com a série $\sum 1&#x2F;n^p$: a condição é a mesma. Isso não é coincidência — é o &lt;strong&gt;teste da integral&lt;&#x2F;strong&gt;, que relaciona convergência de séries com convergência de integrais e é uma das ferramentas mais úteis para estimar somas.&lt;&#x2F;p&gt;
&lt;p&gt;De fato, a aproximação&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{k=1}^{n} f(k) \approx \int_1^n f(x),dx$$&lt;&#x2F;p&gt;
&lt;p&gt;é o que dá $\sum_{k=1}^n 1&#x2F;k \approx \ln n$ — o logaritmo que aparece na análise do quicksort e das tabelas hash.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;probabilidade-continua&quot;&gt;Probabilidade contínua&lt;&#x2F;h2&gt;
&lt;p&gt;Uma variável aleatória contínua tem &lt;strong&gt;densidade&lt;&#x2F;strong&gt; $f$ com&lt;&#x2F;p&gt;
&lt;p&gt;$$P(a \le X \le b) = \int_a^b f(x),dx, \qquad \int_{-\infty}^{\infty} f(x),dx = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;E o valor esperado:&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X] = \int_{-\infty}^{\infty} x f(x),dx$$&lt;&#x2F;p&gt;
&lt;p&gt;Note que $P(X = a) = 0$ para qualquer ponto isolado — em distribuição contínua, a probabilidade de um valor exato é zero. É por isso que se fala em intervalos, e por isso que comparar um número aleatório contínuo com igualdade exata nunca dispara.&lt;&#x2F;p&gt;
&lt;p&gt;A &lt;strong&gt;função de distribuição acumulada&lt;&#x2F;strong&gt; $F(x) = \int_{-\infty}^x f(t),dt$ é o que a maioria das bibliotecas realmente calcula, e sua inversa é o que permite gerar amostras de uma distribuição arbitrária a partir de uma uniforme (o método da transformada inversa).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;integracao-numerica&quot;&gt;Integração numérica&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Método&lt;&#x2F;th&gt;&lt;th&gt;Erro&lt;&#x2F;th&gt;&lt;th&gt;Observação&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Retângulos&lt;&#x2F;td&gt;&lt;td&gt;$O(h)$&lt;&#x2F;td&gt;&lt;td&gt;Só didático&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Trapézios&lt;&#x2F;td&gt;&lt;td&gt;$O(h^2)$&lt;&#x2F;td&gt;&lt;td&gt;Simples e razoável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Simpson&lt;&#x2F;td&gt;&lt;td&gt;$O(h^4)$&lt;&#x2F;td&gt;&lt;td&gt;Excelente custo-benefício&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Gauss-Legendre&lt;&#x2F;td&gt;&lt;td&gt;Exato para polinômios de grau $2n-1$&lt;&#x2F;td&gt;&lt;td&gt;Melhor para funções suaves&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Monte Carlo&lt;&#x2F;td&gt;&lt;td&gt;$O(1&#x2F;\sqrt{N})$&lt;&#x2F;td&gt;&lt;td&gt;Independente da dimensão&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O último merece destaque. Métodos determinísticos sofrem da &lt;strong&gt;maldição da dimensionalidade&lt;&#x2F;strong&gt;: uma grade com $m$ pontos por eixo tem $m^d$ pontos, o que é inviável para $d$ grande. Monte Carlo converge a $O(1&#x2F;\sqrt N)$ &lt;strong&gt;independentemente da dimensão&lt;&#x2F;strong&gt;, e por isso domina integração em dimensão alta.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; monte_carlo&lt;&#x2F;span&gt;&lt;span&gt;(f, a, b, n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1_000_000&lt;&#x2F;span&gt;&lt;span&gt;, rng&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    rng&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rng&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span&gt; np.random.default_rng()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rng.uniform(a, b, n)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; a)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; np.mean(f(x))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;É exatamente por isso que Monte Carlo é a base de renderização por traçado de caminhos (integral sobre todos os caminhos de luz), de inferência bayesiana (integrais sobre espaços de parâmetros) e de precificação de derivativos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$\int_0^1 x^2,dx = \left[\frac{x^3}{3}\right]_0^1 = \frac13$$&lt;&#x2F;p&gt;
&lt;p&gt;Pela regra do trapézio com $n = 4$ ($h = 0{,}25$):&lt;&#x2F;p&gt;
&lt;p&gt;$$\frac{h}{2}\left[f(0) + 2f(0{,}25) + 2f(0{,}5) + 2f(0{,}75) + f(1)\right] = \frac{0{,}25}{2}[0 + 0{,}125 + 0{,}5 + 1{,}125 + 1] = 0{,}34375$$&lt;&#x2F;p&gt;
&lt;p&gt;Erro de cerca de $0{,}0104$. Com Simpson e os mesmos pontos o resultado é exato, porque Simpson integra polinômios de grau até 3 sem erro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Renderização.&lt;&#x2F;strong&gt; A equação de renderização é uma integral sobre direções de luz; traçado de caminhos é sua estimativa por Monte Carlo, e o ruído da imagem é a variância do estimador.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado bayesiano.&lt;&#x2F;strong&gt; A distribuição a posteriori exige integrais que raramente têm forma fechada; daí MCMC e inferência variacional.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Processamento de sinais.&lt;&#x2F;strong&gt; A transformada de Fourier contínua é uma integral; a versão discreta é sua aproximação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Física.&lt;&#x2F;strong&gt; Integradores numéricos avançam simulações no tempo acumulando forças.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Procurar primitiva elementar&lt;&#x2F;strong&gt; de funções que não têm.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar singularidades&lt;&#x2F;strong&gt; ao integrar numericamente — perto de uma assíntota os métodos padrão falham.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar grade regular em dimensão alta.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer o jacobiano&lt;&#x2F;strong&gt; na mudança de variáveis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir densidade com probabilidade.&lt;&#x2F;strong&gt; A densidade pode ser maior que 1; a probabilidade não.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Stewart, &lt;em&gt;Calculus&lt;&#x2F;em&gt; — técnicas de integração com muitos exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Rudin, capítulo 6 — a integral de Riemann-Stieltjes com rigor.&lt;&#x2F;li&gt;
&lt;li&gt;Burden e Faires, capítulo 4 — integração numérica com análise de erro.&lt;&#x2F;li&gt;
&lt;li&gt;Pharr, Jakob e Humphreys, &lt;em&gt;Physically Based Rendering&lt;&#x2F;em&gt; — Monte Carlo aplicado a integrais de renderização; gratuito online.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-stewart2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;James Stewart&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Calculus: Early Transcendentals&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781285740621&quot; rel=&quot;noopener&quot;&gt;9781285740621&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-rudin1976&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Walter Rudin&lt;&#x2F;strong&gt; (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780070856134&quot; rel=&quot;noopener&quot;&gt;9780070856134&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-burden2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Richard L. Burden and J. Douglas Faires and Annette M. Burden&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781305253667&quot; rel=&quot;noopener&quot;&gt;9781305253667&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;James Stewart (2015). &lt;em&gt;Calculus: Early Transcendentals&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;Walter Rudin (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Richard L. Burden; J. Douglas Faires; Annette M. Burden (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Limites e Continuidade</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/limites-e-continuidade/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/limites-e-continuidade/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/limites-e-continuidade/">&lt;h1 id=&quot;limites-e-continuidade&quot;&gt;Limites e Continuidade&lt;&#x2F;h1&gt;
&lt;p&gt;Limite é o conceito que dá sentido a &quot;aproximar-se sem necessariamente alcançar&quot;. É a base de derivada, integral, série e de toda a análise assintótica.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao-epsilon-delta&quot;&gt;Definição épsilon-delta&lt;&#x2F;h2&gt;
&lt;p&gt;$$\lim_{x \to a} f(x) = L \iff \forall \varepsilon &amp;gt; 0; \exists \delta &amp;gt; 0: 0 &amp;lt; |x-a| &amp;lt; \delta \implies |f(x)-L| &amp;lt; \varepsilon$$&lt;&#x2F;p&gt;
&lt;p&gt;A leitura como jogo ajuda: alguém escolhe uma tolerância $\varepsilon$ na saída; você precisa exibir uma tolerância $\delta$ na entrada que a garanta. Se consegue responder a qualquer $\varepsilon$, o limite existe.&lt;&#x2F;p&gt;
&lt;p&gt;Note a condição $0 &amp;lt; |x-a|$: o valor de $f$ &lt;strong&gt;em&lt;&#x2F;strong&gt; $a$ é irrelevante para o limite. Essa é a razão de o limite conseguir descrever buracos e descontinuidades.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limites-laterais-e-infinitos&quot;&gt;Limites laterais e infinitos&lt;&#x2F;h2&gt;
&lt;p&gt;$\lim_{x\to a^-}$ e $\lim_{x\to a^+}$ aproximam-se pela esquerda e pela direita. O limite existe se e somente se os dois existem e coincidem.&lt;&#x2F;p&gt;
&lt;p&gt;Limites no infinito descrevem comportamento assintótico, e são exatamente os que aparecem em análise de algoritmos:&lt;&#x2F;p&gt;
&lt;p&gt;$$\lim_{n \to \infty} \frac{3n^2 + 5n}{n^2} = 3$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;continuidade&quot;&gt;Continuidade&lt;&#x2F;h2&gt;
&lt;p&gt;$f$ é &lt;strong&gt;contínua em $a$&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$\lim_{x\to a} f(x) = f(a)$$&lt;&#x2F;p&gt;
&lt;p&gt;o que exige três coisas: o limite existe, $f(a)$ existe, e são iguais.&lt;&#x2F;p&gt;
&lt;p&gt;Intuitivamente, o gráfico não tem saltos nem buracos. Somas, produtos, quocientes (com denominador não nulo) e composições de contínuas são contínuas — o que permite concluir continuidade sem voltar à definição.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-do-valor-intermediario&quot;&gt;Teorema do valor intermediário&lt;&#x2F;h2&gt;
&lt;p&gt;Se $f$ é contínua em $[a,b]$ e $y$ está entre $f(a)$ e $f(b)$, então existe $c \in [a,b]$ com $f(c) = y$.&lt;&#x2F;p&gt;
&lt;p&gt;O caso $y = 0$ é o mais usado: se $f(a)$ e $f(b)$ têm sinais opostos, existe raiz no intervalo. Esse é exatamente o fundamento do &lt;strong&gt;método da bisseção&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; bissecao&lt;&#x2F;span&gt;&lt;span&gt;(f, a, b, tol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e-10&lt;&#x2F;span&gt;&lt;span&gt;, max_iter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;200&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fa, fb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; f(a), f(b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; fa&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; fb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;f(a) e f(b) precisam ter sinais opostos&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(max_iter):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;          # evita estouro melhor que (a+b)&#x2F;2 em inteiros&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; f(m)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span&gt; (b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; a)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; tol:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; fa&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; fm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            b, fb&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; m, fm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            a, fa&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; m, fm&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; (a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A bisseção converge &lt;strong&gt;sempre&lt;&#x2F;strong&gt;, desde que a hipótese de sinais opostos valha. O intervalo cai pela metade a cada passo, então são necessárias $\log_2((b-a)&#x2F;\text{tol})$ iterações — cerca de 50 para precisão de máquina em precisão dupla. É lenta comparada a Newton, mas é a única que não pode falhar.&lt;&#x2F;p&gt;
&lt;p&gt;A mesma ideia é a busca binária: nela, a função &quot;está à esquerda do alvo&quot; é monótona, e o teorema garante que o ponto de virada existe.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-de-weierstrass&quot;&gt;Teorema de Weierstrass&lt;&#x2F;h2&gt;
&lt;p&gt;Uma função contínua num intervalo &lt;strong&gt;fechado e limitado&lt;&#x2F;strong&gt; atinge máximo e mínimo.&lt;&#x2F;p&gt;
&lt;p&gt;As duas hipóteses são essenciais. Em $(0,1)$, $f(x) = 1&#x2F;x$ é contínua e não tem máximo. Em otimização, é este teorema que garante que um mínimo existe antes de qualquer algoritmo sair procurando por ele — e é por isso que restringir o domínio a um conjunto compacto costuma ser o primeiro passo de uma formulação bem posta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;continuidade-uniforme-e-a-lipschitziana&quot;&gt;Continuidade uniforme e a lipschitziana&lt;&#x2F;h2&gt;
&lt;p&gt;$f$ é &lt;strong&gt;uniformemente contínua&lt;&#x2F;strong&gt; quando o mesmo $\delta$ serve para todo o domínio, e &lt;strong&gt;lipschitziana&lt;&#x2F;strong&gt; com constante $L$ quando&lt;&#x2F;p&gt;
&lt;p&gt;$$|f(x) - f(y)| \le L|x-y|$$&lt;&#x2F;p&gt;
&lt;p&gt;A condição de Lipschitz é a que mais aparece em computação. Ela limita quanto a saída pode variar em resposta à entrada, e é hipótese de:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Convergência de gradiente descendente&lt;&#x2F;strong&gt;, cuja taxa de passo admissível é $1&#x2F;L$ com $L$ a constante de Lipschitz do gradiente;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Teorema do ponto fixo de Banach&lt;&#x2F;strong&gt;, que garante convergência de iterações contrativas;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Robustez de redes neurais&lt;&#x2F;strong&gt;, em que limitar a constante de Lipschitz limita a sensibilidade a perturbações adversariais.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;descontinuidades&quot;&gt;Descontinuidades&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;&#x2F;th&gt;&lt;th&gt;Descrição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Removível&lt;&#x2F;td&gt;&lt;td&gt;O limite existe mas difere de $f(a)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Salto&lt;&#x2F;td&gt;&lt;td&gt;Limites laterais existem e diferem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Essencial&lt;&#x2F;td&gt;&lt;td&gt;Algum limite lateral não existe&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Funções de arredondamento, &lt;code&gt;floor&lt;&#x2F;code&gt; e &lt;code&gt;ceil&lt;&#x2F;code&gt; têm descontinuidades de salto nos inteiros — o que explica por que otimização com variáveis inteiras não pode usar métodos baseados em derivada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Provar que $\lim_{x\to 2}(3x+1) = 7$.&lt;&#x2F;p&gt;
&lt;p&gt;Dado $\varepsilon &amp;gt; 0$, queremos $|3x+1-7| &amp;lt; \varepsilon$, ou seja, $3|x-2| &amp;lt; \varepsilon$. Basta tomar $\delta = \varepsilon&#x2F;3$: se $|x-2| &amp;lt; \delta$, então $|3x-6| = 3|x-2| &amp;lt; 3\delta = \varepsilon$. $\blacksquare$&lt;&#x2F;p&gt;
&lt;p&gt;Para funções lineares o $\delta$ sai diretamente do coeficiente angular — que é justamente a constante de Lipschitz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Métodos numéricos.&lt;&#x2F;strong&gt; Convergência de qualquer iteração é um enunciado sobre limites.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise assintótica.&lt;&#x2F;strong&gt; $O$, $\Omega$ e $\Theta$ se definem por limites de razões.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Otimização.&lt;&#x2F;strong&gt; Continuidade e diferenciabilidade decidem que família de método é aplicável.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gráficos.&lt;&#x2F;strong&gt; Interpolação contínua entre quadros-chave; descontinuidade aparece como artefato visível.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ponto flutuante.&lt;&#x2F;strong&gt; A aritmética de máquina é descontínua em relação aos reais — pequenas mudanças na entrada podem produzir saltos por arredondamento, e é por isso que testar igualdade exata de floats é um erro.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supor que $\lim_{x\to a} f(x) = f(a)$&lt;&#x2F;strong&gt; sem verificar continuidade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Concluir existência do limite&lt;&#x2F;strong&gt; sem checar os dois limites laterais.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar Weierstrass em intervalo aberto ou ilimitado.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir contínua com diferenciável.&lt;&#x2F;strong&gt; $|x|$ é contínua e não diferenciável em zero — motivo pelo qual ReLU exige subgradiente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar bisseção sem verificar a troca de sinal.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rudin, &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;, capítulo 4 — continuidade com rigor total; o livro é famoso pela concisão.&lt;&#x2F;li&gt;
&lt;li&gt;Spivak, &lt;em&gt;Calculus&lt;&#x2F;em&gt; — a melhor ponte entre cálculo operacional e análise rigorosa.&lt;&#x2F;li&gt;
&lt;li&gt;Burden e Faires, capítulo 2 — bisseção, ponto fixo e Newton com análise de erro.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rudin1976&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Walter Rudin&lt;&#x2F;strong&gt; (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780070856134&quot; rel=&quot;noopener&quot;&gt;9780070856134&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-spivak2008&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Spivak&lt;&#x2F;strong&gt; (2008). &lt;em&gt;Calculus&lt;&#x2F;em&gt;. Publish or Perish. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780914098911&quot; rel=&quot;noopener&quot;&gt;9780914098911&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Walter Rudin (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Spivak (2008). &lt;em&gt;Calculus&lt;&#x2F;em&gt;. Publish or Perish.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Séries de Taylor</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/series-de-taylor/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/series-de-taylor/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/series-de-taylor/">&lt;h1 id=&quot;series-de-taylor&quot;&gt;Séries de Taylor&lt;&#x2F;h1&gt;
&lt;p&gt;Taylor é a ideia de aproximar uma função complicada por um polinômio, usando as derivadas num ponto. É a ferramenta que sustenta praticamente todo método numérico e que explica como bibliotecas matemáticas calculam seno, exponencial e logaritmo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;polinomio-de-taylor&quot;&gt;Polinômio de Taylor&lt;&#x2F;h2&gt;
&lt;p&gt;$$P_n(x) = \sum_{k=0}^{n} \frac{f^{(k)}(a)}{k!}(x-a)^k$$&lt;&#x2F;p&gt;
&lt;p&gt;Ele é o único polinômio de grau $n$ que coincide com $f$ em $a$ &lt;strong&gt;e&lt;&#x2F;strong&gt; tem as mesmas $n$ primeiras derivadas ali. Quanto maior o grau, melhor a aproximação perto de $a$ — e não necessariamente longe.&lt;&#x2F;p&gt;
&lt;p&gt;Os casos de ordem baixa já são muito usados:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$n=1$: $f(a) + f&#x27;(a)(x-a)$ — a reta tangente, base do método de Newton e do gradiente descendente.&lt;&#x2F;li&gt;
&lt;li&gt;$n=2$: acrescenta $\frac{f&#x27;&#x27;(a)}{2}(x-a)^2$ — a parábola osculadora, base dos métodos de segunda ordem.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;resto&quot;&gt;Resto&lt;&#x2F;h2&gt;
&lt;p&gt;$$f(x) = P_n(x) + R_n(x), \qquad R_n(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}$$&lt;&#x2F;p&gt;
&lt;p&gt;para algum $\xi$ entre $a$ e $x$ (forma de Lagrange).&lt;&#x2F;p&gt;
&lt;p&gt;O resto é o que transforma Taylor de aproximação informal em ferramenta rigorosa: ele &lt;strong&gt;limita o erro&lt;&#x2F;strong&gt;. Toda estimativa de erro em análise numérica — de diferenças finitas, de Simpson, de métodos de Runge-Kutta — sai de um termo de resto de Taylor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;series-importantes&quot;&gt;Séries importantes&lt;&#x2F;h2&gt;
&lt;p&gt;$$e^x = \sum_{k=0}^{\infty}\frac{x^k}{k!}, \qquad x \in \mathbb{R}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\frac{1}{1-x} = \sum_{k=0}^{\infty}x^k, \qquad |x|&amp;lt;1$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\ln(1+x) = x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots, \qquad |x| \le 1,, x \ne -1$$&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;raio de convergência&lt;&#x2F;strong&gt; importa: a série de $\frac{1}{1-x}$ diverge para $|x| \ge 1$ mesmo a função estando definida ali. Usar uma série fora do seu raio é um erro que produz lixo silenciosamente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aproximacoes-de-primeira-ordem&quot;&gt;Aproximações de primeira ordem&lt;&#x2F;h2&gt;
&lt;p&gt;Para $|x| \ll 1$:&lt;&#x2F;p&gt;
&lt;p&gt;$$e^x \approx 1+x, \qquad \sin x \approx x, \qquad \ln(1+x) \approx x, \qquad (1+x)^n \approx 1+nx$$&lt;&#x2F;p&gt;
&lt;p&gt;Essas aproximações aparecem o tempo todo em análise de desempenho e em estimativas rápidas. &quot;Se a probabilidade de falha por requisição é $p$ e há $n$ requisições, a probabilidade de alguma falhar é $1-(1-p)^n \approx np$&quot; é exatamente a última.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;precisao-numerica&quot;&gt;Precisão numérica&lt;&#x2F;h2&gt;
&lt;p&gt;Aqui Taylor deixa de ser teoria e vira engenharia. Considere calcular $e^x - 1$ para $x$ muito pequeno: em ponto flutuante, $e^x$ arredonda para $1$ e a subtração devolve zero — perdendo toda a informação. A série resolve:&lt;&#x2F;p&gt;
&lt;p&gt;$$e^x - 1 = x + \frac{x^2}{2} + \frac{x^3}{6} + \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;que para $x$ pequeno é essencialmente $x$, sem cancelamento. É por isso que bibliotecas oferecem &lt;code&gt;expm1(x)&lt;&#x2F;code&gt; e &lt;code&gt;log1p(x)&lt;&#x2F;code&gt; — funções cuja existência só se justifica por esse fenômeno.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; math&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e-16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(math.exp(x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # 0.0  — errado&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;print&lt;&#x2F;span&gt;&lt;span&gt;(math.expm1(x))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;     # 1e-16 — correto&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bibliotecas matemáticas raramente usam Taylor puro: preferem &lt;strong&gt;aproximações minimax&lt;&#x2F;strong&gt; (Remez) ou aproximantes de Padé, que distribuem o erro uniformemente pelo intervalo em vez de concentrá-lo longe do ponto de expansão. Mas a redução de argumento que precede essas aproximações se justifica com Taylor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;taylor-em-varias-variaveis&quot;&gt;Taylor em várias variáveis&lt;&#x2F;h2&gt;
&lt;p&gt;$$f(x + \Delta) \approx f(x) + \nabla f(x)^T\Delta + \frac12\Delta^TH(x)\Delta$$&lt;&#x2F;p&gt;
&lt;p&gt;Esta expressão é a base de toda a otimização de segunda ordem. Minimizar o lado direito em $\Delta$ dá o &lt;strong&gt;passo de Newton&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$\Delta = -H^{-1}\nabla f$$&lt;&#x2F;p&gt;
&lt;p&gt;que converge quadraticamente perto do mínimo, contra a convergência linear do gradiente descendente. O custo é resolver um sistema com a hessiana a cada passo — daí os métodos quase-Newton (BFGS, L-BFGS), que aproximam $H^{-1}$ a partir do histórico de gradientes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Aproximar $\sqrt{4{,}1}$ com Taylor de primeira ordem em $a = 4$.&lt;&#x2F;p&gt;
&lt;p&gt;Com $f(x) = \sqrt{x}$, temos $f&#x27;(x) = \frac{1}{2\sqrt x}$, logo $f&#x27;(4) = 0{,}25$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\sqrt{4{,}1} \approx 2 + 0{,}25 \cdot 0{,}1 = 2{,}025$$&lt;&#x2F;p&gt;
&lt;p&gt;O valor real é $2{,}024845\ldots$, erro de cerca de $1{,}5\times10^{-4}$.&lt;&#x2F;p&gt;
&lt;p&gt;O termo de resto prevê isso: $f&#x27;&#x27;(x) = -\frac{1}{4x^{3&#x2F;2}}$, e $|R_1| \le \frac{|f&#x27;&#x27;(4)|}{2}(0{,}1)^2 = \frac{0{,}03125}{2}\cdot0{,}01 \approx 1{,}6\times10^{-4}$. A previsão bate com o erro observado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Métodos numéricos.&lt;&#x2F;strong&gt; Diferenças finitas, Runge-Kutta e regras de quadratura são todos derivados de expansões de Taylor, e suas ordens de erro vêm do primeiro termo desprezado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Otimização.&lt;&#x2F;strong&gt; Newton, quase-Newton e região de confiança são modelos de Taylor de segunda ordem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bibliotecas matemáticas.&lt;&#x2F;strong&gt; Redução de argumento seguida de aproximação polinomial.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Física em jogos.&lt;&#x2F;strong&gt; Integradores como Verlet vêm de expandir a posição em Taylor e cancelar termos ímpares, o que dá precisão de segunda ordem com o mesmo custo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise de erro.&lt;&#x2F;strong&gt; Propagação de incerteza usa a expansão de primeira ordem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar a série fora do raio de convergência.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Truncar sem estimar o resto.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir aproximação local com global.&lt;&#x2F;strong&gt; Taylor é bom perto de $a$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esperar convergência de série de Taylor para toda função suave.&lt;&#x2F;strong&gt; Existem funções infinitamente diferenciáveis cuja série de Taylor converge para outra coisa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar termos alternados de módulo grande&lt;&#x2F;strong&gt;, sofrendo cancelamento.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rudin, capítulo 5 — teorema de Taylor com o resto demonstrado.&lt;&#x2F;li&gt;
&lt;li&gt;Burden e Faires, capítulo 1 — Taylor como ferramenta central de análise numérica.&lt;&#x2F;li&gt;
&lt;li&gt;Goldberg, &quot;What Every Computer Scientist Should Know About Floating-Point Arithmetic&quot; — por que &lt;code&gt;expm1&lt;&#x2F;code&gt; e &lt;code&gt;log1p&lt;&#x2F;code&gt; existem.&lt;&#x2F;li&gt;
&lt;li&gt;Muller, &lt;em&gt;Elementary Functions&lt;&#x2F;em&gt; — como bibliotecas realmente implementam funções transcendentes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rudin1976&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Walter Rudin&lt;&#x2F;strong&gt; (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780070856134&quot; rel=&quot;noopener&quot;&gt;9780070856134&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-burden2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Richard L. Burden and J. Douglas Faires and Annette M. Burden&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781305253667&quot; rel=&quot;noopener&quot;&gt;9781305253667&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-goldberg1991&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;David Goldberg&lt;&#x2F;strong&gt; (1991). &lt;em&gt;What Every Computer Scientist Should Know About Floating-Point Arithmetic&lt;&#x2F;em&gt;. ACM Computing Surveys 23(1), 5-48. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&amp;#x2F;103162.103163&quot; rel=&quot;noopener&quot;&gt;10.1145&amp;#x2F;103162.103163&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Walter Rudin (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Richard L. Burden; J. Douglas Faires; Annette M. Burden (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;David Goldberg (1991). &lt;em&gt;What Every Computer Scientist Should Know About Floating-Point Arithmetic&lt;&#x2F;em&gt;. ACM Computing Surveys 23(1), 5-48.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Autômatos e Linguagens Formais</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/automatos-e-linguagens/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/automatos-e-linguagens/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/automatos-e-linguagens/">&lt;h1 id=&quot;automatos-e-linguagens-formais&quot;&gt;Autômatos e Linguagens Formais&lt;&#x2F;h1&gt;
&lt;p&gt;Um autômato finito é o modelo de computação mais simples que existe: memória constante, uma passada pela entrada. Apesar da limitação, ele descreve exatamente o poder das expressões regulares e é a base de analisadores léxicos, validadores de protocolo e busca de padrões.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;alfabetos-e-linguagens&quot;&gt;Alfabetos e linguagens&lt;&#x2F;h2&gt;
&lt;p&gt;Um &lt;strong&gt;alfabeto&lt;&#x2F;strong&gt; $\Sigma$ é um conjunto finito de símbolos; uma &lt;strong&gt;cadeia&lt;&#x2F;strong&gt; é uma sequência finita deles; uma &lt;strong&gt;linguagem&lt;&#x2F;strong&gt; é um conjunto de cadeias.&lt;&#x2F;p&gt;
&lt;p&gt;$\Sigma^*$ denota todas as cadeias sobre $\Sigma$, incluindo a vazia $\varepsilon$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;automato-finito-deterministico&quot;&gt;Autômato finito determinístico&lt;&#x2F;h2&gt;
&lt;p&gt;Uma quíntupla $(Q, \Sigma, \delta, q_0, F)$: estados, alfabeto, função de transição, estado inicial e estados de aceitação.&lt;&#x2F;p&gt;
&lt;p&gt;O autômato lê a entrada símbolo a símbolo e aceita se termina em estado de $F$. Note o que ele &lt;strong&gt;não&lt;&#x2F;strong&gt; tem: nenhuma memória além do estado atual. Com $|Q|$ estados, ele distingue no máximo $|Q|$ situações diferentes.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; aceita&lt;&#x2F;span&gt;&lt;span&gt;(delta, q0, finais, cadeia):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; q0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; cadeia:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; delta.get((q, c))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; finais&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Custo: $O(n)$ em tempo e $O(1)$ em espaço. É por isso que autômatos são usados em processamento de fluxo — validar um bilhão de linhas não exige memória crescente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nao-determinismo&quot;&gt;Não determinismo&lt;&#x2F;h2&gt;
&lt;p&gt;Um AFN pode ter várias transições para o mesmo símbolo e transições vazias. Ele aceita se &lt;strong&gt;algum&lt;&#x2F;strong&gt; caminho leva a estado final.&lt;&#x2F;p&gt;
&lt;p&gt;O resultado central: &lt;strong&gt;AFD e AFN reconhecem exatamente as mesmas linguagens&lt;&#x2F;strong&gt;. A construção de subconjuntos converte um AFN de $n$ estados num AFD de até $2^n$ estados.&lt;&#x2F;p&gt;
&lt;p&gt;O não determinismo não acrescenta poder, mas acrescenta &lt;strong&gt;concisão&lt;&#x2F;strong&gt; — e essa explosão exponencial é exatamente a razão de algumas expressões regulares causarem lentidão catastrófica.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;expressoes-regulares&quot;&gt;Expressões regulares&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;teorema de Kleene&lt;&#x2F;strong&gt; garante a equivalência: uma linguagem é reconhecida por autômato finito se e somente se é descrita por expressão regular.&lt;&#x2F;p&gt;
&lt;p&gt;Operações: união, concatenação e fecho de Kleene.&lt;&#x2F;p&gt;
&lt;p&gt;Um alerta prático importante: as &quot;expressões regulares&quot; da maioria das linguagens de programação &lt;strong&gt;não são regulares&lt;&#x2F;strong&gt;. Retrovisores (&lt;code&gt;\1&lt;&#x2F;code&gt;) e lookahead acrescentam poder além dos autômatos finitos, e são implementados por retrocesso — o que abre a porta para &lt;strong&gt;ReDoS&lt;&#x2F;strong&gt;, negação de serviço por expressão regular. Um padrão como &lt;code&gt;(a+)+b&lt;&#x2F;code&gt; sobre uma entrada de 30 letras &lt;code&gt;a&lt;&#x2F;code&gt; pode levar horas.&lt;&#x2F;p&gt;
&lt;p&gt;Motores baseados em autômatos (RE2, o motor de regex do Rust, &lt;code&gt;grep&lt;&#x2F;code&gt;) garantem tempo linear ao custo de não suportar retrovisores. Em código que processa entrada não confiável, essa é a escolha certa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lema-do-bombeamento&quot;&gt;Lema do bombeamento&lt;&#x2F;h2&gt;
&lt;p&gt;Para provar que uma linguagem &lt;strong&gt;não&lt;&#x2F;strong&gt; é regular. Se $L$ é regular, existe $p$ tal que toda cadeia $s \in L$ com $|s| \ge p$ se decompõe em $s = xyz$ com $|y| &amp;gt; 0$, $|xy| \le p$ e $xy^iz \in L$ para todo $i \ge 0$.&lt;&#x2F;p&gt;
&lt;p&gt;A intuição é a casa dos pombos: com mais símbolos que estados, algum estado se repete, e o trecho entre as repetições pode ser bombeado.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplo: $L = {a^nb^n}$ não é regular. Tomando $s = a^pb^p$, o trecho $y$ está inteiramente nos $a$; bombeando, desequilibra-se a contagem.&lt;&#x2F;p&gt;
&lt;p&gt;Este resultado explica por que &lt;strong&gt;não se deve analisar HTML ou linguagens balanceadas com expressão regular&lt;&#x2F;strong&gt;. Balanceamento exige contagem ilimitada, e autômatos finitos não contam.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hierarquia-de-chomsky&quot;&gt;Hierarquia de Chomsky&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;&#x2F;th&gt;&lt;th&gt;Linguagem&lt;&#x2F;th&gt;&lt;th&gt;Reconhecedor&lt;&#x2F;th&gt;&lt;th&gt;Exemplo&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;Regular&lt;&#x2F;td&gt;&lt;td&gt;Autômato finito&lt;&#x2F;td&gt;&lt;td&gt;Identificadores, números&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;Livre de contexto&lt;&#x2F;td&gt;&lt;td&gt;Autômato com pilha&lt;&#x2F;td&gt;&lt;td&gt;Expressões aninhadas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;Sensível ao contexto&lt;&#x2F;td&gt;&lt;td&gt;Autômato linearmente limitado&lt;&#x2F;td&gt;&lt;td&gt;$a^nb^nc^n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;Recursivamente enumerável&lt;&#x2F;td&gt;&lt;td&gt;Máquina de Turing&lt;&#x2F;td&gt;&lt;td&gt;Tudo computável&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A hierarquia é &lt;strong&gt;estrita&lt;&#x2F;strong&gt;: cada nível é estritamente mais poderoso.&lt;&#x2F;p&gt;
&lt;p&gt;Em compiladores, a divisão é direta: o analisador léxico usa linguagens regulares (identificadores, números, operadores) e o sintático usa livres de contexto (estrutura aninhada). Verificações que exigem contexto — como &quot;a variável foi declarada&quot; — ficam para a análise semântica, porque estão além do que a gramática expressa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;propriedades-de-fechamento&quot;&gt;Propriedades de fechamento&lt;&#x2F;h2&gt;
&lt;p&gt;Linguagens regulares são fechadas para união, interseção, complemento, concatenação, fecho e reverso.&lt;&#x2F;p&gt;
&lt;p&gt;O fechamento por &lt;strong&gt;complemento&lt;&#x2F;strong&gt; é útil na prática: para verificar se um autômato aceita algo que não deveria, complementa-se e testa-se vaziedade. É a base de várias ferramentas de verificação de protocolo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;minimizacao&quot;&gt;Minimização&lt;&#x2F;h2&gt;
&lt;p&gt;Todo AFD tem um AFD mínimo &lt;strong&gt;único&lt;&#x2F;strong&gt; (a menos de renomeação), obtido fundindo estados indistinguíveis. O algoritmo de Hopcroft roda em $O(n\log n)$.&lt;&#x2F;p&gt;
&lt;p&gt;A relação &quot;ser indistinguível&quot; é uma relação de equivalência, e a minimização é o cálculo de suas classes — uma aplicação direta do conceito de partição.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Autômato que aceita cadeias sobre ${0,1}$ com número par de zeros.&lt;&#x2F;p&gt;
&lt;p&gt;Dois estados: $q_0$ (par, aceitação) e $q_1$ (ímpar).&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Estado&lt;&#x2F;th&gt;&lt;th&gt;0&lt;&#x2F;th&gt;&lt;th&gt;1&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$q_0$&lt;&#x2F;td&gt;&lt;td&gt;$q_1$&lt;&#x2F;td&gt;&lt;td&gt;$q_0$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$q_1$&lt;&#x2F;td&gt;&lt;td&gt;$q_0$&lt;&#x2F;td&gt;&lt;td&gt;$q_1$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O símbolo 1 não altera o estado; o 0 alterna. Note que dois estados bastam para uma propriedade sobre cadeias de comprimento ilimitado — o autômato guarda apenas a &lt;strong&gt;paridade&lt;&#x2F;strong&gt;, não a contagem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Análise léxica.&lt;&#x2F;strong&gt; Ferramentas como lex e flex geram autômatos a partir de expressões regulares.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Busca em texto.&lt;&#x2F;strong&gt; Knuth-Morris-Pratt e Aho-Corasick constroem autômatos para busca em tempo linear.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Validação de protocolo.&lt;&#x2F;strong&gt; Máquinas de estado descrevem estados válidos de TCP, de uma conexão TLS ou de um fluxo de pedido.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Verificação de modelos.&lt;&#x2F;strong&gt; Propriedades temporais viram autômatos sobre palavras infinitas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Interfaces.&lt;&#x2F;strong&gt; Fluxos de navegação e estados de componente são máquinas de estado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Analisar linguagens aninhadas com regex.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Expor regex com retrocesso&lt;&#x2F;strong&gt; a entrada não confiável (ReDoS).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que a regex da linguagem é regular.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir não determinismo com aleatoriedade.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer o caso da cadeia vazia&lt;&#x2F;strong&gt; ao projetar autômatos.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Sipser, &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;, capítulo 1 — a melhor introdução; clara e rigorosa.&lt;&#x2F;li&gt;
&lt;li&gt;Hopcroft, Motwani e Ullman — cobertura mais ampla, com muitos algoritmos.&lt;&#x2F;li&gt;
&lt;li&gt;Russ Cox, &quot;Regular Expression Matching Can Be Simple And Fast&quot; — por que autômatos vencem retrocesso; leitura essencial.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do RE2 e do crate &lt;code&gt;regex&lt;&#x2F;code&gt; do Rust — garantias de tempo linear na prática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-sipser2012&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Sipser&lt;&#x2F;strong&gt; (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781133187790&quot; rel=&quot;noopener&quot;&gt;9781133187790&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-hopcroft2006&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;John E. Hopcroft and Rajeev Motwani and Jeffrey D. Ullman&lt;&#x2F;strong&gt; (2006). &lt;em&gt;Introduction to Automata Theory, Languages, and Computation&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780321455369&quot; rel=&quot;noopener&quot;&gt;9780321455369&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;John E. Hopcroft; Rajeev Motwani; Jeffrey D. Ullman (2006). &lt;em&gt;Introduction to Automata Theory, Languages, and Computation&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Classes P, NP e Reduções</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/classes-p-np-e-reducoes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/classes-p-np-e-reducoes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/classes-p-np-e-reducoes/">&lt;h1 id=&quot;classes-p-np-e-reducoes&quot;&gt;Classes P, NP e Reduções&lt;&#x2F;h1&gt;
&lt;p&gt;Saber que um problema é NP-completo é uma das informações mais úteis que se pode ter sobre ele — não porque resolve, mas porque &lt;strong&gt;redireciona o esforço&lt;&#x2F;strong&gt;. Deixa-se de procurar algoritmo exato eficiente e passa-se a buscar aproximação, heurística ou restrição do caso de uso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;as-classes&quot;&gt;As classes&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;P&lt;&#x2F;strong&gt;: problemas de decisão resolvíveis em tempo polinomial por máquina determinística.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;NP&lt;&#x2F;strong&gt;: problemas cuja solução pode ser &lt;strong&gt;verificada&lt;&#x2F;strong&gt; em tempo polinomial. Equivalentemente, resolvíveis em tempo polinomial por máquina não determinística.&lt;&#x2F;p&gt;
&lt;p&gt;A leitura por verificação é a mais útil. Um problema está em NP quando, dado um certificado, é fácil conferir. Fatorar está em NP: verificar que $p\cdot q = n$ é uma multiplicação.&lt;&#x2F;p&gt;
&lt;p&gt;$$P \subseteq NP$$&lt;&#x2F;p&gt;
&lt;p&gt;Se dá para resolver rápido, dá para verificar rápido. A questão de um milhão de dólares é se a inclusão é estrita.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;p-versus-np&quot;&gt;P versus NP&lt;&#x2F;h2&gt;
&lt;p&gt;A crença amplamente compartilhada é que $P \ne NP$, mas não há prova. As implicações de $P = NP$ seriam extraordinárias: criptografia de chave pública desabaria, e encontrar demonstrações matemáticas seria tão fácil quanto verificá-las.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;np-completude&quot;&gt;NP-completude&lt;&#x2F;h2&gt;
&lt;p&gt;Um problema é &lt;strong&gt;NP-difícil&lt;&#x2F;strong&gt; quando todo problema de NP se reduz a ele em tempo polinomial. É &lt;strong&gt;NP-completo&lt;&#x2F;strong&gt; quando é NP-difícil &lt;strong&gt;e&lt;&#x2F;strong&gt; pertence a NP.&lt;&#x2F;p&gt;
&lt;p&gt;Os NP-completos são os problemas mais difíceis de NP: resolver um deles em tempo polinomial resolveria todos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Teorema de Cook-Levin (1971).&lt;&#x2F;strong&gt; SAT é NP-completo.&lt;&#x2F;p&gt;
&lt;p&gt;Foi o primeiro, e é a partir dele que todos os outros são provados por redução.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reducoes&quot;&gt;Reduções&lt;&#x2F;h2&gt;
&lt;p&gt;$A \le_p B$ significa que existe transformação polinomial de instâncias de $A$ em instâncias de $B$ preservando a resposta.&lt;&#x2F;p&gt;
&lt;p&gt;O sentido da redução é a fonte do erro mais comum. Para provar que $B$ é NP-difícil, reduz-se um problema &lt;strong&gt;conhecidamente difícil&lt;&#x2F;strong&gt; $A$ &lt;strong&gt;a&lt;&#x2F;strong&gt; $B$ — ou seja, mostra-se que $B$ é pelo menos tão difícil quanto $A$. A direção contrária não prova nada sobre a dificuldade de $B$.&lt;&#x2F;p&gt;
&lt;p&gt;Cadeia clássica de reduções:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{SAT} \le_p \text{3-SAT} \le_p \text{Clique} \le_p \text{Cobertura por vértices} \le_p \text{Conjunto independente}$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;problemas-np-completos-comuns&quot;&gt;Problemas NP-completos comuns&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Problema&lt;&#x2F;th&gt;&lt;th&gt;Descrição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;SAT &#x2F; 3-SAT&lt;&#x2F;td&gt;&lt;td&gt;Satisfatibilidade booleana&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Clique&lt;&#x2F;td&gt;&lt;td&gt;Existe clique de tamanho $k$?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Cobertura por vértices&lt;&#x2F;td&gt;&lt;td&gt;Existe cobertura de tamanho $k$?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ciclo hamiltoniano&lt;&#x2F;td&gt;&lt;td&gt;Existe ciclo que passa por todos os vértices?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Caixeiro viajante (decisão)&lt;&#x2F;td&gt;&lt;td&gt;Existe rota de custo $\le k$?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Mochila&lt;&#x2F;td&gt;&lt;td&gt;Existe subconjunto de valor $\ge v$ e peso $\le w$?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Coloração ($k \ge 3$)&lt;&#x2F;td&gt;&lt;td&gt;O grafo é $k$-colorível?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Partição&lt;&#x2F;td&gt;&lt;td&gt;Dividir em dois conjuntos de soma igual?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Programação inteira&lt;&#x2F;td&gt;&lt;td&gt;Existe solução inteira viável?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Vale notar as fronteiras: 2-SAT está em P, mas 3-SAT é NP-completo; 2-coloração está em P, 3-coloração é NP-completa; ciclo euleriano está em P, hamiltoniano é NP-completo. Diferenças mínimas no enunciado atravessam a fronteira.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-que-fazer-com-um-problema-np-dificil&quot;&gt;O que fazer com um problema NP-difícil&lt;&#x2F;h2&gt;
&lt;p&gt;Esta é a parte prática, e é o motivo de a classificação importar.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Algoritmos de aproximação.&lt;&#x2F;strong&gt; Garantem uma razão em relação ao ótimo. Cobertura por vértices tem aproximação simples de fator 2; o caixeiro viajante métrico tem fator 1,5 (Christofides).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Heurísticas.&lt;&#x2F;strong&gt; Sem garantia, mas boas na prática: busca local, algoritmos genéricos, recozimento simulado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Resolvedores.&lt;&#x2F;strong&gt; Resolvedores SAT e ILP modernos lidam com instâncias industriais de milhões de variáveis. A dificuldade de pior caso não impede eficiência nos casos que aparecem na prática — essa distinção é frequentemente esquecida.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Parametrização.&lt;&#x2F;strong&gt; Complexidade parametrizada isola a explosão num parâmetro pequeno: cobertura por vértices é resolvível em $O(2^k n)$, tratável quando $k$ é pequeno.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Casos especiais.&lt;&#x2F;strong&gt; Muitos problemas NP-difíceis viram polinomiais em grafos de estrutura restrita (planares, cordais, de largura em árvore limitada).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Relaxar o requisito.&lt;&#x2F;strong&gt; Talvez não seja preciso o ótimo. Uma solução 5% pior obtida em segundos costuma valer mais que a ótima em semanas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;outras-classes&quot;&gt;Outras classes&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Classe&lt;&#x2F;th&gt;&lt;th&gt;Descrição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;co-NP&lt;&#x2F;td&gt;&lt;td&gt;Complementos de problemas de NP&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;PSPACE&lt;&#x2F;td&gt;&lt;td&gt;Espaço polinomial; contém NP&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;EXPTIME&lt;&#x2F;td&gt;&lt;td&gt;Tempo exponencial; sabidamente $\ne$ P&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;BPP&lt;&#x2F;td&gt;&lt;td&gt;Polinomial aleatorizado com erro limitado&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;BQP&lt;&#x2F;td&gt;&lt;td&gt;Polinomial quântico&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;#P&lt;&#x2F;td&gt;&lt;td&gt;Contagem de soluções&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Fatoração está em NP e co-NP, e não se acredita que seja NP-completa — o que é relevante, porque significa que quebrar RSA não implicaria $P = NP$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Por que 3-SAT se reduz a Clique?&lt;&#x2F;p&gt;
&lt;p&gt;Dada uma fórmula com $m$ cláusulas de 3 literais, construa um grafo com um vértice para cada literal de cada cláusula. Ligue dois vértices quando estão em cláusulas &lt;strong&gt;diferentes&lt;&#x2F;strong&gt; e não são complementares.&lt;&#x2F;p&gt;
&lt;p&gt;A fórmula é satisfatível se e somente se o grafo tem clique de tamanho $m$: um clique escolhe um literal verdadeiro por cláusula, e a ausência de arestas entre complementares garante consistência da atribuição.&lt;&#x2F;p&gt;
&lt;p&gt;A construção é polinomial, e a equivalência vale nos dois sentidos — é isso que uma redução precisa demonstrar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inverter o sentido da redução.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir NP-difícil com &quot;impossível&quot;.&lt;&#x2F;strong&gt; Instâncias reais podem ser fáceis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chamar de NP-completo&lt;&#x2F;strong&gt; um problema que não está em NP (otimização, por exemplo, é NP-difícil mas não NP-completa).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Concluir que NP significa &quot;não polinomial&quot;.&lt;&#x2F;strong&gt; Significa &quot;não determinístico polinomial&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Desistir cedo demais.&lt;&#x2F;strong&gt; Resolvedores SAT modernos são extraordinariamente eficazes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Sipser, capítulo 7 — P, NP e NP-completude com provas completas.&lt;&#x2F;li&gt;
&lt;li&gt;Garey e Johnson — o catálogo clássico de problemas NP-completos; ainda a referência para saber se um problema já foi classificado.&lt;&#x2F;li&gt;
&lt;li&gt;Arora e Barak, &lt;em&gt;Computational Complexity: A Modern Approach&lt;&#x2F;em&gt; — o tratamento moderno; rascunho gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Biere et al., &lt;em&gt;Handbook of Satisfiability&lt;&#x2F;em&gt; — como resolvedores SAT vencem a teoria na prática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-sipser2012&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Sipser&lt;&#x2F;strong&gt; (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781133187790&quot; rel=&quot;noopener&quot;&gt;9781133187790&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-garey1979&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael R. Garey and David S. Johnson&lt;&#x2F;strong&gt; (1979). &lt;em&gt;Computers and Intractability: A Guide to the Theory of NP-Completeness&lt;&#x2F;em&gt;. W. H. Freeman. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780716710448&quot; rel=&quot;noopener&quot;&gt;9780716710448&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-arora2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sanjeev Arora and Boaz Barak&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Computational Complexity: A Modern Approach&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511804090&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511804090&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-biere2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Armin Biere and Marijn Heule and Hans van Maaren and Toby Walsh&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Handbook of Satisfiability&lt;&#x2F;em&gt;. IOS Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781586039295&quot; rel=&quot;noopener&quot;&gt;9781586039295&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;Michael R. Garey; David S. Johnson (1979). &lt;em&gt;Computers and Intractability: A Guide to the Theory of NP-Completeness&lt;&#x2F;em&gt;. W. H. Freeman.&lt;&#x2F;li&gt;
&lt;li&gt;Sanjeev Arora; Boaz Barak (2009). &lt;em&gt;Computational Complexity: A Modern Approach&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Armin Biere; Marijn Heule; Hans van Maaren; Toby Walsh (2009). &lt;em&gt;Handbook of Satisfiability&lt;&#x2F;em&gt;. IOS Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Máquina de Turing e Decidibilidade</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/maquina-de-turing-e-decidibilidade/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/maquina-de-turing-e-decidibilidade/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/computacao/maquina-de-turing-e-decidibilidade/">&lt;h1 id=&quot;maquina-de-turing-e-decidibilidade&quot;&gt;Máquina de Turing e Decidibilidade&lt;&#x2F;h1&gt;
&lt;p&gt;A máquina de Turing é o modelo que define o que significa &quot;computável&quot;. Sua importância não está na eficiência — é um modelo deliberadamente primitivo — mas em delimitar a fronteira do possível.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-modelo&quot;&gt;O modelo&lt;&#x2F;h2&gt;
&lt;p&gt;Uma fita infinita dividida em células, uma cabeça que lê e escreve, e um controle finito. A cada passo, com base no estado atual e no símbolo lido, a máquina escreve um símbolo, move a cabeça uma célula e muda de estado.&lt;&#x2F;p&gt;
&lt;p&gt;Formalmente, uma 7-upla $(Q,\Sigma,\Gamma,\delta,q_0,q_{\text{aceita}},q_{\text{rejeita}})$.&lt;&#x2F;p&gt;
&lt;p&gt;Três comportamentos possíveis: aceitar, rejeitar ou &lt;strong&gt;não parar&lt;&#x2F;strong&gt;. Esta terceira possibilidade é a fonte de tudo o que se segue.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;decidivel-e-reconhecivel&quot;&gt;Decidível e reconhecível&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Decidível&lt;&#x2F;strong&gt; (recursiva): existe máquina que &lt;strong&gt;sempre para&lt;&#x2F;strong&gt; e responde corretamente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Reconhecível&lt;&#x2F;strong&gt; (recursivamente enumerável): existe máquina que aceita as cadeias da linguagem, mas pode não parar nas demais.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A diferença é decisiva. Uma linguagem é decidível se e somente se ela e seu complemento são reconhecíveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tese-de-church-turing&quot;&gt;Tese de Church-Turing&lt;&#x2F;h2&gt;
&lt;p&gt;Tudo que é &quot;efetivamente calculável&quot; pode ser calculado por uma máquina de Turing.&lt;&#x2F;p&gt;
&lt;p&gt;Não é um teorema — é uma tese sobre a adequação do modelo à noção intuitiva. A evidência é forte: cálculo lambda, funções recursivas, máquinas de registradores e toda linguagem de programação real definem exatamente a mesma classe de funções.&lt;&#x2F;p&gt;
&lt;p&gt;A consequência prática: &lt;strong&gt;a escolha da linguagem de programação não muda o que é computável&lt;&#x2F;strong&gt;. Só muda a conveniência.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-problema-da-parada&quot;&gt;O problema da parada&lt;&#x2F;h2&gt;
&lt;p&gt;$$\text{PARADA} = {\langle M,w\rangle : M \text{ para com entrada } w}$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Teorema (Turing, 1936).&lt;&#x2F;strong&gt; PARADA é indecidível.&lt;&#x2F;p&gt;
&lt;p&gt;A prova é por diagonalização. Suponha que exista $H$ que decida a parada. Construa $D$ que, ao receber $\langle M\rangle$, roda $H(\langle M\rangle,\langle M\rangle)$ e faz o &lt;strong&gt;oposto&lt;&#x2F;strong&gt;: entra em laço se $H$ diz que para, e para se $H$ diz que não para.&lt;&#x2F;p&gt;
&lt;p&gt;Agora pergunte: $D$ para com entrada $\langle D\rangle$?&lt;&#x2F;p&gt;
&lt;p&gt;Se para, então $H$ disse que não para — contradição. Se não para, $H$ disse que para — contradição. Logo $H$ não existe. $\blacksquare$&lt;&#x2F;p&gt;
&lt;p&gt;O argumento é o mesmo do paradoxo do barbeiro e da diagonal de Cantor: autorreferência produzindo contradição.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reducao&quot;&gt;Redução&lt;&#x2F;h2&gt;
&lt;p&gt;A técnica padrão para provar indecidibilidade de outros problemas: se $A$ é indecidível e $A$ se reduz a $B$, então $B$ é indecidível.&lt;&#x2F;p&gt;
&lt;p&gt;A leitura intuitiva: &quot;se eu soubesse resolver $B$, saberia resolver $A$; como não sei resolver $A$, não posso saber resolver $B$&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-de-rice&quot;&gt;Teorema de Rice&lt;&#x2F;h2&gt;
&lt;p&gt;Um resultado devastador e pouco conhecido fora da área: &lt;strong&gt;toda propriedade não trivial do comportamento de programas é indecidível&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Não trivial&quot; significa que alguma máquina tem a propriedade e alguma não tem. &quot;Do comportamento&quot; significa que depende da função computada, não do texto do programa.&lt;&#x2F;p&gt;
&lt;p&gt;Consequências diretas, todas indecidíveis em geral:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Este programa termina?&lt;&#x2F;li&gt;
&lt;li&gt;Estes dois programas calculam a mesma coisa?&lt;&#x2F;li&gt;
&lt;li&gt;Este programa acessa memória inválida?&lt;&#x2F;li&gt;
&lt;li&gt;Este trecho de código é alcançável?&lt;&#x2F;li&gt;
&lt;li&gt;Este programa tem vazamento de memória?&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;como-a-pratica-convive-com-isso&quot;&gt;Como a prática convive com isso&lt;&#x2F;h2&gt;
&lt;p&gt;Este é o ponto mais importante da página. A indecidibilidade &lt;strong&gt;não&lt;&#x2F;strong&gt; impede ferramentas úteis — impede ferramentas simultaneamente &lt;strong&gt;completas, corretas e sempre terminantes&lt;&#x2F;strong&gt;. Abre-se mão de uma das três:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aproximação conservadora.&lt;&#x2F;strong&gt; Analisadores estáticos e sistemas de tipos rejeitam alguns programas corretos, mas nunca aceitam um errado. Um verificador de tipos que recusa código que funcionaria é o preço da decidibilidade.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Incompletude.&lt;&#x2F;strong&gt; Ferramentas que podem responder &quot;não sei&quot;. A maioria dos analisadores modernos faz isso.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Não terminação.&lt;&#x2F;strong&gt; Provadores de teoremas que podem rodar indefinidamente, com limite de tempo imposto de fora.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Restrição do domínio.&lt;&#x2F;strong&gt; Linguagens totais (Coq, Agda) garantem terminação restringindo a recursão ao que se pode provar decrescente. Em troca, não são Turing-completas.&lt;&#x2F;p&gt;
&lt;p&gt;Compreender essa negociação evita duas ilusões opostas: esperar que o compilador detecte todos os defeitos, e concluir que análise estática não serve para nada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;contagem-por-que-quase-tudo-e-incomputavel&quot;&gt;Contagem: por que quase tudo é incomputável&lt;&#x2F;h2&gt;
&lt;p&gt;Um argumento simples e esclarecedor. Programas são cadeias finitas sobre alfabeto finito, logo o conjunto de programas é &lt;strong&gt;enumerável&lt;&#x2F;strong&gt;. Já o conjunto de funções $\mathbb{N}\to{0,1}$ tem a cardinalidade dos reais — &lt;strong&gt;não enumerável&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Portanto &lt;strong&gt;quase toda função é incomputável&lt;&#x2F;strong&gt;. As funções que sabemos calcular são uma parcela infinitesimal do que existe. A surpresa não é que haja problemas indecidíveis; é que tantos problemas úteis sejam decidíveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Por que não é possível escrever um detector universal de laços infinitos?&lt;&#x2F;p&gt;
&lt;p&gt;Se &lt;code&gt;para(prog, entrada)&lt;&#x2F;code&gt; existisse, poderíamos escrever:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; diagonal&lt;&#x2F;span&gt;&lt;span&gt;(prog):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; para(prog, prog):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;      # entra em laço&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            pass&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    else&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;           # termina&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aplicando &lt;code&gt;diagonal&lt;&#x2F;code&gt; a si mesma, ambas as respostas de &lt;code&gt;para&lt;&#x2F;code&gt; levam a contradição. Portanto &lt;code&gt;para&lt;&#x2F;code&gt; não pode existir.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Compiladores.&lt;&#x2F;strong&gt; Otimizações são sempre aproximações conservadoras; eliminação de código morto detecta só o que consegue provar.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de tipos.&lt;&#x2F;strong&gt; A negociação entre expressividade e decidibilidade define o desenho da linguagem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Verificação formal.&lt;&#x2F;strong&gt; Model checking restringe o espaço de estados a finito, tornando o problema decidível.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Segurança.&lt;&#x2F;strong&gt; Detectar malware por comportamento é indecidível em geral — daí heurísticas e assinaturas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ferramentas de análise.&lt;&#x2F;strong&gt; Falsos positivos são inerentes ao problema, não defeitos de implementação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concluir que análise estática é inútil&lt;&#x2F;strong&gt; por causa da indecidibilidade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir indecidível com difícil.&lt;&#x2F;strong&gt; NP-completo é difícil; indecidível é impossível.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que instâncias particulares podem ser decidíveis.&lt;&#x2F;strong&gt; É o caso geral que não é.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Achar que a tese de Church-Turing é teorema.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Sipser, capítulos 3 a 5 — máquinas de Turing, decidibilidade e redução, com provas acessíveis.&lt;&#x2F;li&gt;
&lt;li&gt;Turing, &quot;On Computable Numbers&quot; (1936) — o artigo original, surpreendentemente legível.&lt;&#x2F;li&gt;
&lt;li&gt;Hopcroft, Motwani e Ullman, capítulos 8 e 9.&lt;&#x2F;li&gt;
&lt;li&gt;Rice (1953) — o teorema que generaliza a indecidibilidade a toda propriedade semântica.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-sipser2012&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Sipser&lt;&#x2F;strong&gt; (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781133187790&quot; rel=&quot;noopener&quot;&gt;9781133187790&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-hopcroft2006&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;John E. Hopcroft and Rajeev Motwani and Jeffrey D. Ullman&lt;&#x2F;strong&gt; (2006). &lt;em&gt;Introduction to Automata Theory, Languages, and Computation&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780321455369&quot; rel=&quot;noopener&quot;&gt;9780321455369&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Sipser (2012). &lt;em&gt;Introduction to the Theory of Computation&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;John E. Hopcroft; Rajeev Motwani; Jeffrey D. Ullman (2006). &lt;em&gt;Introduction to Automata Theory, Languages, and Computation&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Árvores</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/arvores/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/arvores/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/arvores/">&lt;h1 id=&quot;arvores&quot;&gt;Árvores&lt;&#x2F;h1&gt;
&lt;p&gt;Árvore é o grafo mais importante da computação. Sistemas de arquivos, índices de banco, árvores sintáticas, hierarquias de herança, o DOM — todos são árvores. A razão é sua propriedade central: &lt;strong&gt;caminho único entre quaisquer dois vértices&lt;&#x2F;strong&gt;, o que elimina ambiguidade de navegação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao-e-caracterizacoes&quot;&gt;Definição e caracterizações&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;árvore&lt;&#x2F;strong&gt; é um grafo conexo e acíclico. Para um grafo $G$ com $n$ vértices, as afirmações abaixo são &lt;strong&gt;todas equivalentes&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;$G$ é conexo e acíclico.&lt;&#x2F;li&gt;
&lt;li&gt;$G$ é conexo e tem exatamente $n-1$ arestas.&lt;&#x2F;li&gt;
&lt;li&gt;$G$ é acíclico e tem exatamente $n-1$ arestas.&lt;&#x2F;li&gt;
&lt;li&gt;Existe caminho único entre quaisquer dois vértices.&lt;&#x2F;li&gt;
&lt;li&gt;$G$ é conexo, e remover qualquer aresta o desconecta.&lt;&#x2F;li&gt;
&lt;li&gt;$G$ é acíclico, e acrescentar qualquer aresta cria um ciclo.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Ter seis caracterizações equivalentes é o que torna árvores tão fáceis de trabalhar: para provar que algo é árvore, escolha a condição mais conveniente.&lt;&#x2F;p&gt;
&lt;p&gt;Um grafo acíclico não necessariamente conexo é uma &lt;strong&gt;floresta&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;arvores-enraizadas&quot;&gt;Árvores enraizadas&lt;&#x2F;h2&gt;
&lt;p&gt;Escolher um vértice como &lt;strong&gt;raiz&lt;&#x2F;strong&gt; induz orientação: cada vértice ganha um pai (exceto a raiz) e zero ou mais filhos.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Termo&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Folha&lt;&#x2F;td&gt;&lt;td&gt;Vértice sem filhos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Nó interno&lt;&#x2F;td&gt;&lt;td&gt;Vértice com pelo menos um filho&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Profundidade&lt;&#x2F;td&gt;&lt;td&gt;Distância da raiz até o nó&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Altura&lt;&#x2F;td&gt;&lt;td&gt;Maior profundidade da árvore&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ancestral&lt;&#x2F;td&gt;&lt;td&gt;Qualquer nó no caminho até a raiz&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Uma árvore binária de altura $h$ tem no máximo $2^{h+1}-1$ nós, logo uma árvore com $n$ nós tem altura &lt;strong&gt;mínima&lt;&#x2F;strong&gt; $\lceil \log_2(n+1) \rceil - 1$.&lt;&#x2F;p&gt;
&lt;p&gt;Essa desigualdade é o que fundamenta as estruturas balanceadas: manter a altura em $\Theta(\log n)$ garante busca logarítmica. Uma árvore de busca degenerada — inserções em ordem crescente sem balanceamento — vira uma lista ligada com altura $n$, e a busca cai para $O(n)$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;percursos&quot;&gt;Percursos&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; em_ordem&lt;&#x2F;span&gt;&lt;span&gt;(no):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; no:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        em_ordem(no.esq)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        visita(no)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        em_ordem(no.dir)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Percurso&lt;&#x2F;th&gt;&lt;th&gt;Ordem&lt;&#x2F;th&gt;&lt;th&gt;Uso típico&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Pré-ordem&lt;&#x2F;td&gt;&lt;td&gt;raiz, esquerda, direita&lt;&#x2F;td&gt;&lt;td&gt;Copiar a árvore, serializar&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Em ordem&lt;&#x2F;td&gt;&lt;td&gt;esquerda, raiz, direita&lt;&#x2F;td&gt;&lt;td&gt;Listar em ordem crescente numa BST&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Pós-ordem&lt;&#x2F;td&gt;&lt;td&gt;esquerda, direita, raiz&lt;&#x2F;td&gt;&lt;td&gt;Liberar memória, avaliar expressão&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Em largura&lt;&#x2F;td&gt;&lt;td&gt;por nível&lt;&#x2F;td&gt;&lt;td&gt;Achar o nó mais raso, imprimir níveis&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Numa árvore de expressão, pré-ordem produz notação prefixa (polonesa) e pós-ordem produz notação pós-fixa (polonesa reversa) — que é exatamente o que uma máquina de pilha executa. É por isso que compiladores geram código percorrendo a árvore sintática em pós-ordem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;arvore-geradora-minima&quot;&gt;Árvore geradora mínima&lt;&#x2F;h2&gt;
&lt;p&gt;Dado um grafo conexo ponderado, a &lt;strong&gt;árvore geradora mínima&lt;&#x2F;strong&gt; (AGM) é a árvore que conecta todos os vértices com peso total mínimo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Kruskal.&lt;&#x2F;strong&gt; Ordene as arestas por peso e acrescente cada uma que não forme ciclo, usando union-find para o teste. Custo $O(E \log E)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Prim.&lt;&#x2F;strong&gt; Cresça a árvore a partir de um vértice, sempre pegando a aresta mais leve que sai do conjunto atual. Com heap de Fibonacci, $O(E + V \log V)$.&lt;&#x2F;p&gt;
&lt;p&gt;Ambos são algoritmos gulosos, e ambos funcionam pela &lt;strong&gt;propriedade do corte&lt;&#x2F;strong&gt;: para qualquer partição dos vértices em dois conjuntos, a aresta mais leve que cruza a partição pertence a alguma AGM.&lt;&#x2F;p&gt;
&lt;p&gt;Aplicações: projeto de redes com custo mínimo de cabeamento, agrupamento hierárquico (cortar as $k-1$ arestas mais pesadas da AGM dá $k$ grupos) e aproximações para o caixeiro viajante.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;estruturas-de-dados-derivadas&quot;&gt;Estruturas de dados derivadas&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Árvore binária de busca.&lt;&#x2F;strong&gt; Invariante: tudo à esquerda é menor, tudo à direita é maior. Busca, inserção e remoção em $O(h)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;AVL e rubro-negra.&lt;&#x2F;strong&gt; Mantêm $h = O(\log n)$ por rotações. AVL é mais rigidamente balanceada (busca ligeiramente mais rápida); rubro-negra faz menos rotações (inserção e remoção mais rápidas). &lt;code&gt;std::map&lt;&#x2F;code&gt; do C++ e &lt;code&gt;TreeMap&lt;&#x2F;code&gt; do Java usam rubro-negra.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Árvore B e B+.&lt;&#x2F;strong&gt; Alta aridade para minimizar acessos a disco. Um nó ocupa uma página, e com aridade de algumas centenas a altura fica em 3 ou 4 mesmo com bilhões de chaves. É a estrutura de praticamente todo índice de banco de dados e de vários sistemas de arquivos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Heap binário.&lt;&#x2F;strong&gt; Árvore quase completa com a propriedade de que o pai domina os filhos. Armazenado em vetor, sem ponteiros: os filhos de $i$ são $2i+1$ e $2i+2$. Base de filas de prioridade e do heapsort.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Trie.&lt;&#x2F;strong&gt; Árvore indexada por prefixos de cadeia. Busca em $O(m)$ com $m$ o comprimento da chave, independente do número de chaves armazenadas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Árvore de Merkle.&lt;&#x2F;strong&gt; Cada nó guarda o resumo criptográfico dos filhos. Permite verificar a integridade de um item com $O(\log n)$ resumos — a base de Git, blockchains e sistemas de arquivos verificáveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Uma árvore binária completa de altura $3$ tem quantos nós e quantas folhas?&lt;&#x2F;p&gt;
&lt;p&gt;Nós: $2^{3+1} - 1 = 15$. Folhas: $2^3 = 8$. Nós internos: $15 - 8 = 7$ — confirmando que numa árvore binária completa o número de folhas é o de internos mais um.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Não balancear uma árvore de busca&lt;&#x2F;strong&gt; e obter $O(n)$ em dados ordenados.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir altura com profundidade.&lt;&#x2F;strong&gt; Altura é da árvore; profundidade é de um nó.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Recursão profunda&lt;&#x2F;strong&gt; estourando a pilha em árvores degeneradas.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Modificar a chave de um nó já inserido&lt;&#x2F;strong&gt;, quebrando o invariante da estrutura.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar árvore onde uma tabela hash serve.&lt;&#x2F;strong&gt; Se a ordem não importa, hash é mais rápido.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cormen et al., capítulos 12 e 13 — árvores de busca e rubro-negras, com todas as provas de balanceamento.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 3 — o tratamento clássico e exaustivo de árvores de busca e ordenação.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do PostgreSQL sobre índices B-tree — como a teoria aparece num sistema real de produção.&lt;&#x2F;li&gt;
&lt;li&gt;Diestel, capítulo 1 — as caracterizações equivalentes de árvore, com provas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-knuth1997b&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Donald E. Knuth&lt;&#x2F;strong&gt; (1998). &lt;em&gt;The Art of Computer Programming, Volume 3: Sorting and Searching&lt;&#x2F;em&gt;. Addison-Wesley. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www-cs-faculty.stanford.edu&amp;#x2F;~knuth&amp;#x2F;taocp.html&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-diestel2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Reinhard Diestel&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-662-53622-3&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-662-53622-3&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Donald E. Knuth (1998). &lt;em&gt;The Art of Computer Programming, Volume 3: Sorting and Searching&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;li&gt;Reinhard Diestel (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Caminhos Mínimos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-minimos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-minimos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-minimos/">&lt;h1 id=&quot;caminhos-minimos&quot;&gt;Caminhos Mínimos&lt;&#x2F;h1&gt;
&lt;p&gt;Encontrar o caminho de menor custo entre dois pontos é um dos problemas mais aplicados da computação. A escolha do algoritmo depende de três perguntas: os pesos podem ser negativos? Preciso de uma origem ou de todos os pares? O grafo é denso ou esparso?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-problema&quot;&gt;O problema&lt;&#x2F;h2&gt;
&lt;p&gt;Dado $G = (V, E)$ com pesos $w: E \to \mathbb{R}$, o custo de um caminho é a soma dos pesos das arestas. Busca-se o caminho de custo mínimo.&lt;&#x2F;p&gt;
&lt;p&gt;Três variantes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Origem única&lt;&#x2F;strong&gt;: de um vértice a todos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Todos os pares&lt;&#x2F;strong&gt;: entre quaisquer dois.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Par único&lt;&#x2F;strong&gt;: entre dois vértices dados. Na prática resolve-se com o algoritmo de origem única, possivelmente com parada antecipada.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Se houver &lt;strong&gt;ciclo de peso negativo&lt;&#x2F;strong&gt; alcançável, não existe caminho mínimo: dar voltas no ciclo reduz o custo indefinidamente. Detectar esses ciclos é parte do problema.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-operacao-de-relaxamento&quot;&gt;A operação de relaxamento&lt;&#x2F;h2&gt;
&lt;p&gt;Todos os algoritmos compartilham uma única operação. Mantendo uma estimativa $d[v]$ do custo até $v$:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; relaxa&lt;&#x2F;span&gt;&lt;span&gt;(u, v, w, d, pai):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; d[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; w[u][v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; d[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        d[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; d[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; w[u][v]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        pai[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Os algoritmos diferem apenas na &lt;strong&gt;ordem&lt;&#x2F;strong&gt; em que relaxam as arestas. Entender isso simplifica muito: não são três ideias diferentes, é uma ideia com três estratégias de ordenação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dijkstra&quot;&gt;Dijkstra&lt;&#x2F;h2&gt;
&lt;p&gt;Estratégia gulosa: sempre expandir o vértice não visitado de menor distância estimada.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; heapq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; dijkstra&lt;&#x2F;span&gt;&lt;span&gt;(grafo, origem):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {v:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; float&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;inf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; grafo}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dist[origem]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fila&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;, origem)]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    visto&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; set&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; fila:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        d, u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; heapq.heappop(fila)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; visto:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        visto.add(u)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; v, peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; grafo[u]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; dist[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                dist[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; peso&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                heapq.heappush(fila, (dist[v], v))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; dist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Exige pesos não negativos.&lt;&#x2F;strong&gt; A prova de correção depende de que, ao extrair o vértice de menor estimativa, essa estimativa já seja definitiva — e um peso negativo mais adiante poderia reduzi-la depois, quebrando o argumento.&lt;&#x2F;p&gt;
&lt;p&gt;Complexidade: $O((V+E)\log V)$ com heap binário; $O(E + V\log V)$ com heap de Fibonacci.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bellman-ford&quot;&gt;Bellman-Ford&lt;&#x2F;h2&gt;
&lt;p&gt;Relaxa &lt;strong&gt;todas&lt;&#x2F;strong&gt; as arestas $|V|-1$ vezes.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; bellman_ford&lt;&#x2F;span&gt;&lt;span&gt;(vertices, arestas, origem):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {v:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; float&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;inf&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; vertices}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dist[origem]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;len&lt;&#x2F;span&gt;&lt;span&gt;(vertices)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; u, v, peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; arestas:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; dist[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                dist[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; peso&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # uma passada extra detecta ciclo negativo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; u, v, peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; arestas:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; peso&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; dist[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;ciclo de peso negativo alcançável&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; dist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Aceita &lt;strong&gt;pesos negativos&lt;&#x2F;strong&gt; e &lt;strong&gt;detecta ciclos negativos&lt;&#x2F;strong&gt;. O número de iterações vem do fato de que um caminho mínimo tem no máximo $|V|-1$ arestas; se ainda houver melhoria na passada extra, existe ciclo negativo.&lt;&#x2F;p&gt;
&lt;p&gt;Complexidade: $O(VE)$ — mais lento, em troca de generalidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;floyd-warshall&quot;&gt;Floyd-Warshall&lt;&#x2F;h2&gt;
&lt;p&gt;Programação dinâmica para todos os pares:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; floyd_warshall&lt;&#x2F;span&gt;&lt;span&gt;(dist, n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                if&lt;&#x2F;span&gt;&lt;span&gt; dist[i][k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; dist[k][j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; dist[i][j]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    dist[i][j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; dist[i][k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; dist[k][j]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; dist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A ideia: $k$ percorre os vértices permitidos como intermediários. Após a iteração $k$, &lt;code&gt;dist[i][j]&lt;&#x2F;code&gt; é o mínimo usando apenas ${0,\dots,k}$ como intermediários.&lt;&#x2F;p&gt;
&lt;p&gt;Complexidade $\Theta(V^3)$, espaço $\Theta(V^2)$. Vale a pena em grafos densos e pequenos. Valor negativo na diagonal indica ciclo negativo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparacao&quot;&gt;Comparação&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Algoritmo&lt;&#x2F;th&gt;&lt;th&gt;Alcance&lt;&#x2F;th&gt;&lt;th&gt;Pesos negativos&lt;&#x2F;th&gt;&lt;th&gt;Complexidade&lt;&#x2F;th&gt;&lt;th&gt;Quando usar&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;BFS&lt;&#x2F;td&gt;&lt;td&gt;Origem única&lt;&#x2F;td&gt;&lt;td&gt;Sem pesos&lt;&#x2F;td&gt;&lt;td&gt;$O(V+E)$&lt;&#x2F;td&gt;&lt;td&gt;Grafo não ponderado&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Dijkstra&lt;&#x2F;td&gt;&lt;td&gt;Origem única&lt;&#x2F;td&gt;&lt;td&gt;Não&lt;&#x2F;td&gt;&lt;td&gt;$O(E \log V)$&lt;&#x2F;td&gt;&lt;td&gt;Padrão para pesos positivos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bellman-Ford&lt;&#x2F;td&gt;&lt;td&gt;Origem única&lt;&#x2F;td&gt;&lt;td&gt;Sim&lt;&#x2F;td&gt;&lt;td&gt;$O(VE)$&lt;&#x2F;td&gt;&lt;td&gt;Há pesos negativos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Floyd-Warshall&lt;&#x2F;td&gt;&lt;td&gt;Todos os pares&lt;&#x2F;td&gt;&lt;td&gt;Sim&lt;&#x2F;td&gt;&lt;td&gt;$O(V^3)$&lt;&#x2F;td&gt;&lt;td&gt;Grafo denso e pequeno&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;A*&lt;&#x2F;td&gt;&lt;td&gt;Par único&lt;&#x2F;td&gt;&lt;td&gt;Não&lt;&#x2F;td&gt;&lt;td&gt;Depende da heurística&lt;&#x2F;td&gt;&lt;td&gt;Há boa estimativa de distância&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Se o grafo não é ponderado, &lt;strong&gt;use BFS&lt;&#x2F;strong&gt;: ela resolve em tempo linear o que Dijkstra resolveria com um fator logarítmico a mais.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-dijkstra-com-heuristica&quot;&gt;A*: Dijkstra com heurística&lt;&#x2F;h2&gt;
&lt;p&gt;A* ordena a fila por $f(v) = d[v] + h(v)$, com $h$ uma estimativa do custo restante até o destino.&lt;&#x2F;p&gt;
&lt;p&gt;Para garantir otimalidade, $h$ precisa ser &lt;strong&gt;admissível&lt;&#x2F;strong&gt; (nunca superestimar) e, para a versão com conjunto fechado, &lt;strong&gt;consistente&lt;&#x2F;strong&gt; ($h(u) \le w(u,v) + h(v)$).&lt;&#x2F;p&gt;
&lt;p&gt;Com $h \equiv 0$, A* é exatamente Dijkstra. Quanto melhor a heurística, menos nós são expandidos. Em mapas, a distância em linha reta é admissível e reduz drasticamente a exploração — é o que torna viável o roteamento em grafos rodoviários continentais.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Grafo dirigido: $A \to B$ (peso 4), $A \to C$ (2), $C \to B$ (1), $B \to D$ (5), $C \to D$ (8).&lt;&#x2F;p&gt;
&lt;p&gt;Dijkstra a partir de $A$:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Extrai $A$ ($d=0$). Relaxa: $d[B]=4$, $d[C]=2$.&lt;&#x2F;li&gt;
&lt;li&gt;Extrai $C$ ($d=2$, menor). Relaxa: $d[B] = \min(4, 2+1) = 3$; $d[D] = 10$.&lt;&#x2F;li&gt;
&lt;li&gt;Extrai $B$ ($d=3$). Relaxa: $d[D] = \min(10, 3+5) = 8$.&lt;&#x2F;li&gt;
&lt;li&gt;Extrai $D$ ($d=8$).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Resultado: $A \to C \to B \to D$ com custo $8$. Note que o caminho ótimo passa por $C$ mesmo a aresta direta $A \to B$ existindo — é exatamente o tipo de situação que o relaxamento captura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Roteamento.&lt;&#x2F;strong&gt; OSPF usa Dijkstra; RIP e BGP usam variantes de vetor de distância aparentadas com Bellman-Ford.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Navegação.&lt;&#x2F;strong&gt; Mapas usam A* com pré-processamento (rotulagem de atalhos, hierarquias de contração) para responder em milissegundos sobre grafos com milhões de vértices.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Arbitragem.&lt;&#x2F;strong&gt; Um ciclo de peso negativo sobre $-\log(\text{taxa de câmbio})$ é uma oportunidade de arbitragem — Bellman-Ford detecta.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Jogos.&lt;&#x2F;strong&gt; Busca de caminho de unidades em mapa de grade, tipicamente A* com heurística de Manhattan ou octil.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Escalonamento.&lt;&#x2F;strong&gt; Restrições de diferença ($x_j - x_i \le c$) formam um sistema resolvido por caminhos mínimos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar Dijkstra com pesos negativos.&lt;&#x2F;strong&gt; O resultado pode estar errado sem nenhum aviso.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a passada extra do Bellman-Ford&lt;&#x2F;strong&gt;, perdendo a detecção de ciclo negativo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Não verificar se o vértice já foi visitado&lt;&#x2F;strong&gt; ao desempilhar em Dijkstra, degradando o desempenho.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Heurística inadmissível em A&lt;&#x2F;strong&gt;*, que produz caminho subótimo silenciosamente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Floyd-Warshall com $V$ grande.&lt;&#x2F;strong&gt; $V = 10^4$ já significa $10^{12}$ operações.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cormen et al., capítulos 24 e 25 — caminhos mínimos com provas de correção completas.&lt;&#x2F;li&gt;
&lt;li&gt;Kleinberg e Tardos, capítulo 6 — Bellman-Ford apresentado como programação dinâmica.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do NetworkX e do igraph — implementações de referência e escolha de algoritmo por caso.&lt;&#x2F;li&gt;
&lt;li&gt;Artigos sobre hierarquias de contração — como o roteamento em mapas reais fica rápido o suficiente.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-kleinberg2005&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Jon Kleinberg and Eva Tardos&lt;&#x2F;strong&gt; (2005). &lt;em&gt;Algorithm Design&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780321295354&quot; rel=&quot;noopener&quot;&gt;9780321295354&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Jon Kleinberg; Eva Tardos (2005). &lt;em&gt;Algorithm Design&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Coloração de Grafos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/coloracao-de-grafos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/coloracao-de-grafos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/coloracao-de-grafos/">&lt;h1 id=&quot;coloracao-de-grafos&quot;&gt;Coloração de Grafos&lt;&#x2F;h1&gt;
&lt;p&gt;Colorir um grafo é atribuir rótulos aos vértices de forma que vértices adjacentes recebam rótulos distintos. É a formulação abstrata de todo problema de &lt;strong&gt;alocação sob conflito&lt;&#x2F;strong&gt;: dois recursos que não podem coexistir viram vértices adjacentes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicoes&quot;&gt;Definições&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;coloração própria&lt;&#x2F;strong&gt; com $k$ cores é uma função $c: V \to {1,\dots,k}$ tal que $c(u) \ne c(v)$ para toda aresta ${u,v}$.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;número cromático&lt;&#x2F;strong&gt; $\chi(G)$ é o menor $k$ para o qual existe coloração própria.&lt;&#x2F;p&gt;
&lt;p&gt;Determinar $\chi(G)$ é NP-difícil; até decidir se $\chi(G) \le 3$ é NP-completo. Na prática usam-se heurísticas e limites.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limites&quot;&gt;Limites&lt;&#x2F;h2&gt;
&lt;p&gt;$$\chi(G) \le \Delta(G) + 1$$&lt;&#x2F;p&gt;
&lt;p&gt;com $\Delta(G)$ o grau máximo. A prova é o próprio algoritmo guloso: ao colorir um vértice, seus vizinhos ocupam no máximo $\Delta$ cores, então sempre sobra uma.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;teorema de Brooks&lt;&#x2F;strong&gt; refina: para grafo conexo que não seja completo nem ciclo ímpar, $\chi(G) \le \Delta(G)$.&lt;&#x2F;p&gt;
&lt;p&gt;Por baixo, $\chi(G) \ge \omega(G)$, o tamanho da maior clique — um conjunto de vértices mutuamente adjacentes precisa de uma cor cada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;casos-especiais&quot;&gt;Casos especiais&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Grafo&lt;&#x2F;th&gt;&lt;th&gt;$\chi$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Completo $K_n$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bipartido (com aresta)&lt;&#x2F;td&gt;&lt;td&gt;$2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ciclo par&lt;&#x2F;td&gt;&lt;td&gt;$2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Ciclo ímpar&lt;&#x2F;td&gt;&lt;td&gt;$3$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Árvore (com aresta)&lt;&#x2F;td&gt;&lt;td&gt;$2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Planar&lt;&#x2F;td&gt;&lt;td&gt;$\le 4$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;$\chi(G) \le 2$ equivale a ser bipartido, o que se testa em tempo linear com BFS de duas cores. A partir de 3 cores o problema já é NP-completo — um salto de dificuldade abrupto.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;teorema das quatro cores&lt;&#x2F;strong&gt; (Appel e Haken, 1976) afirma que todo grafo planar é 4-colorível. Foi o primeiro teorema importante cuja prova dependeu essencialmente de verificação por computador, o que gerou um debate duradouro sobre o que conta como demonstração matemática.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algoritmo-guloso&quot;&gt;Algoritmo guloso&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; coloracao_gulosa&lt;&#x2F;span&gt;&lt;span&gt;(grafo, ordem):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    cor&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; ordem:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        usadas&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {cor[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; grafo[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; cor}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        while&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; usadas:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        cor[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; cor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O guloso usa no máximo $\Delta + 1$ cores, mas o resultado &lt;strong&gt;depende fortemente da ordem&lt;&#x2F;strong&gt;. Existe sempre uma ordem que produz a coloração ótima — e encontrá-la é o problema difícil.&lt;&#x2F;p&gt;
&lt;p&gt;Heurísticas de ordenação que funcionam bem:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Welsh-Powell&lt;&#x2F;strong&gt;: por grau decrescente. Trata primeiro os vértices mais restritos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DSATUR&lt;&#x2F;strong&gt;: a cada passo escolhe o vértice com maior número de cores distintas na vizinhança. Costuma dar resultados bem melhores e é ótima em grafos bipartidos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ordem de eliminação perfeita&lt;&#x2F;strong&gt;: em grafos cordais, produz o ótimo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;alocacao-de-registradores&quot;&gt;Alocação de registradores&lt;&#x2F;h2&gt;
&lt;p&gt;Esta é a aplicação canônica em compiladores, e vale entender em detalhe.&lt;&#x2F;p&gt;
&lt;p&gt;Cada variável do programa vira um vértice. Duas variáveis são adjacentes quando estão &lt;strong&gt;vivas ao mesmo tempo&lt;&#x2F;strong&gt; — o que forma o &lt;em&gt;grafo de interferência&lt;&#x2F;em&gt;. As cores são os registradores da máquina.&lt;&#x2F;p&gt;
&lt;p&gt;Se $\chi(G) \le k$, com $k$ o número de registradores, todas as variáveis cabem em registradores. Caso contrário, alguma precisa ir para memória — o &lt;strong&gt;spill&lt;&#x2F;strong&gt;, cuja escolha o compilador faz por heurística de custo.&lt;&#x2F;p&gt;
&lt;p&gt;O algoritmo clássico de Chaitin remove repetidamente vértices de grau menor que $k$ (que sempre poderão ser coloridos depois), empilhando-os; se travar, escolhe um candidato a spill. A coloração é feita ao desempilhar.&lt;&#x2F;p&gt;
&lt;p&gt;É uma tradução perfeita: um problema aparentemente de engenharia é exatamente um problema de teoria dos grafos, e usar a teoria dá tanto o algoritmo quanto o limite de qualidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;outras-aplicacoes&quot;&gt;Outras aplicações&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Escalonamento de provas.&lt;&#x2F;strong&gt; Disciplinas com alunos em comum viram vértices adjacentes; as cores são horários. O número cromático é a menor quantidade de horários necessária.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Alocação de frequências.&lt;&#x2F;strong&gt; Antenas próximas interferem; frequências são cores. É o problema original que motivou boa parte da teoria.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sudoku.&lt;&#x2F;strong&gt; Um sudoku é uma coloração de grafo com 9 cores, em que células da mesma linha, coluna ou bloco são adjacentes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Paralelismo.&lt;&#x2F;strong&gt; Tarefas que disputam o mesmo recurso não podem rodar juntas; cores são fatias de tempo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compilação de consultas.&lt;&#x2F;strong&gt; Alocação de buffers em planos de execução usa a mesma modelagem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Considere o ciclo $C_5$ (cinco vértices em círculo). Como é ciclo ímpar, $\chi(C_5) = 3$. Tentando com duas cores, a alternância percorre o ciclo e o quinto vértice acaba adjacente a dois vértices que já ocupam as duas cores. O grau máximo é $2$, e o teorema de Brooks não se aplica justamente porque ciclos ímpares são a exceção — coerente com $\chi = 3 = \Delta + 1$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supor que o guloso dá o ótimo.&lt;&#x2F;strong&gt; Ele dá um limite superior, e a qualidade depende da ordem.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir $\chi(G)$ com $\Delta(G)$.&lt;&#x2F;strong&gt; O grau máximo é limite, não valor.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Achar que 2 cores é fácil e 3 é só um pouco mais difícil.&lt;&#x2F;strong&gt; A fronteira entre P e NP-completo está exatamente aí.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar a estrutura do grafo.&lt;&#x2F;strong&gt; Grafos cordais, de intervalo e planares têm algoritmos eficientes que não valem no caso geral.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Diestel, capítulo 5 — coloração com as provas dos teoremas de Brooks e Vizing.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do LLVM sobre alocação de registradores — a teoria aplicada num compilador de produção.&lt;&#x2F;li&gt;
&lt;li&gt;Garey e Johnson — a referência sobre NP-completude, com a prova para 3-coloração.&lt;&#x2F;li&gt;
&lt;li&gt;West, capítulo 5 — muitos exercícios de coloração.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-diestel2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Reinhard Diestel&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-662-53622-3&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-662-53622-3&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-garey1979&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael R. Garey and David S. Johnson&lt;&#x2F;strong&gt; (1979). &lt;em&gt;Computers and Intractability: A Guide to the Theory of NP-Completeness&lt;&#x2F;em&gt;. W. H. Freeman. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780716710448&quot; rel=&quot;noopener&quot;&gt;9780716710448&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-west2001&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Douglas B. West&lt;&#x2F;strong&gt; (2001). &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;. Prentice Hall. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;dwest.web.illinois.edu&amp;#x2F;igt&amp;#x2F;&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Reinhard Diestel (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Michael R. Garey; David S. Johnson (1979). &lt;em&gt;Computers and Intractability: A Guide to the Theory of NP-Completeness&lt;&#x2F;em&gt;. W. H. Freeman.&lt;&#x2F;li&gt;
&lt;li&gt;Douglas B. West (2001). &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;. Prentice Hall.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Combinatória</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/combinatoria/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/combinatoria/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/combinatoria/">&lt;h1 id=&quot;combinatoria&quot;&gt;Combinatória&lt;&#x2F;h1&gt;
&lt;p&gt;Combinatória é a arte de contar sem enumerar. Em computação ela responde às perguntas que decidem viabilidade: quantas configurações existem, qual o tamanho do espaço de busca, qual a probabilidade de colisão numa tabela hash.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;os-dois-principios&quot;&gt;Os dois princípios&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Princípio aditivo.&lt;&#x2F;strong&gt; Se uma escolha pode ser feita de $m$ formas &lt;strong&gt;ou&lt;&#x2F;strong&gt; de $n$ formas, e as opções são disjuntas, há $m + n$ possibilidades.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Princípio multiplicativo.&lt;&#x2F;strong&gt; Se uma tarefa se decompõe em etapas independentes com $m$ e $n$ opções, há $m \cdot n$ resultados.&lt;&#x2F;p&gt;
&lt;p&gt;Praticamente toda contagem se reduz a combinar esses dois. A dificuldade quase nunca está na aritmética; está em decidir se as escolhas são disjuntas (soma) ou sequenciais (produto), e em não contar a mesma coisa duas vezes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;permutacoes-arranjos-e-combinacoes&quot;&gt;Permutações, arranjos e combinações&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Conceito&lt;&#x2F;th&gt;&lt;th&gt;Fórmula&lt;&#x2F;th&gt;&lt;th&gt;Pergunta que responde&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Permutação de $n$&lt;&#x2F;td&gt;&lt;td&gt;$n!$&lt;&#x2F;td&gt;&lt;td&gt;De quantas formas ordenar $n$ objetos?&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Arranjo $A(n,k)$&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{n!}{(n-k)!}$&lt;&#x2F;td&gt;&lt;td&gt;Escolher $k$ de $n$, &lt;strong&gt;com&lt;&#x2F;strong&gt; ordem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Combinação $\binom{n}{k}$&lt;&#x2F;td&gt;&lt;td&gt;$\dfrac{n!}{k!(n-k)!}$&lt;&#x2F;td&gt;&lt;td&gt;Escolher $k$ de $n$, &lt;strong&gt;sem&lt;&#x2F;strong&gt; ordem&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A relação entre arranjo e combinação é a chave: cada combinação de $k$ elementos pode ser ordenada de $k!$ formas, logo $A(n,k) = \binom{n}{k} \cdot k!$.&lt;&#x2F;p&gt;
&lt;p&gt;A pergunta que resolve quase todo exercício é simples: &lt;strong&gt;a ordem importa?&lt;&#x2F;strong&gt; Uma senha de 4 dígitos distintos é arranjo; uma mão de 5 cartas é combinação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;propriedades-do-coeficiente-binomial&quot;&gt;Propriedades do coeficiente binomial&lt;&#x2F;h2&gt;
&lt;p&gt;$$\binom{n}{k} = \binom{n}{n-k} \qquad \text{(escolher }k\text{ é o mesmo que descartar }n-k\text{)}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k} \qquad \text{(relação de Pascal)}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{k=0}^{n} \binom{n}{k} = 2^n \qquad \text{(total de subconjuntos)}$$&lt;&#x2F;p&gt;
&lt;p&gt;A relação de Pascal tem interpretação direta: fixe um elemento; ou ele está no subconjunto (e faltam $k-1$ entre os $n-1$ restantes) ou não está (e faltam $k$ entre $n-1$). É também a recorrência que gera o triângulo de Pascal e a base da implementação por programação dinâmica.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; binomial&lt;&#x2F;span&gt;&lt;span&gt;(n, k):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # calcula sem passar por n! — evita estouro e é mais rápido&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; k:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(k):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; i)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; (i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Calcular $\binom{n}{k}$ como $n!&#x2F;(k!(n-k)!)$ é um erro prático: $n!$ estoura muito antes do resultado. A forma iterativa acima mantém os valores intermediários pequenos e a divisão sempre exata.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;binomio-de-newton&quot;&gt;Binômio de Newton&lt;&#x2F;h2&gt;
&lt;p&gt;$$(x + y)^n = \sum_{k=0}^{n} \binom{n}{k} x^{n-k} y^k$$&lt;&#x2F;p&gt;
&lt;p&gt;O coeficiente de $x^{n-k}y^k$ conta de quantas formas escolher $k$ fatores que contribuem com $y$. Fazendo $x = y = 1$ recupera-se $\sum_k \binom{n}{k} = 2^n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;combinacoes-com-repeticao&quot;&gt;Combinações com repetição&lt;&#x2F;h2&gt;
&lt;p&gt;Para escolher $k$ elementos de $n$ tipos, com repetição permitida e sem ordem:&lt;&#x2F;p&gt;
&lt;p&gt;$$\left(!!\binom{n}{k}!!\right) = \binom{n + k - 1}{k}$$&lt;&#x2F;p&gt;
&lt;p&gt;A demonstração é o argumento de &lt;strong&gt;estrelas e barras&lt;&#x2F;strong&gt;: represente a escolha por $k$ estrelas separadas por $n-1$ barras; cada arranjo dos $n+k-1$ símbolos determina uma escolha.&lt;&#x2F;p&gt;
&lt;p&gt;É a fórmula que conta soluções inteiras não negativas de $x_1 + \cdots + x_n = k$ — que aparece em alocação de recursos e em análise de distribuição de carga.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;principio-de-inclusao-exclusao&quot;&gt;Princípio de inclusão-exclusão&lt;&#x2F;h2&gt;
&lt;p&gt;$$\left|\bigcup_{i=1}^{n} A_i\right| = \sum |A_i| - \sum |A_i \cap A_j| + \sum |A_i \cap A_j \cap A_k| - \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;Corrige a contagem dupla alternando sinais. Aplicação clássica: contar &lt;strong&gt;desarranjos&lt;&#x2F;strong&gt; — permutações sem ponto fixo:&lt;&#x2F;p&gt;
&lt;p&gt;$$D_n = n! \sum_{k=0}^{n} \frac{(-1)^k}{k!} \approx \frac{n!}{e}$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou seja, cerca de $37%$ das permutações não deixam nenhum elemento no lugar — um fato que surpreende e que independe de $n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado-o-paradoxo-do-aniversario&quot;&gt;Exemplo trabalhado: o paradoxo do aniversário&lt;&#x2F;h2&gt;
&lt;p&gt;Qual a probabilidade de que, entre $k$ pessoas, duas façam aniversário no mesmo dia?&lt;&#x2F;p&gt;
&lt;p&gt;É mais fácil contar o complemento. O número de formas de $k$ pessoas terem datas &lt;strong&gt;todas distintas&lt;&#x2F;strong&gt; é $A(365, k)$, e o total de configurações é $365^k$:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(\text{todas distintas}) = \frac{365 \cdot 364 \cdots (365-k+1)}{365^k}$$&lt;&#x2F;p&gt;
&lt;p&gt;Para $k = 23$ isso dá aproximadamente $0{,}493$ — logo a probabilidade de colisão passa de $50%$ com apenas 23 pessoas.&lt;&#x2F;p&gt;
&lt;p&gt;Este resultado é o &lt;strong&gt;ataque do aniversário&lt;&#x2F;strong&gt; em criptografia: para uma função de resumo de $n$ bits, espera-se encontrar colisão após cerca de $2^{n&#x2F;2}$ tentativas, e não $2^n$. É por isso que resistência a colisão de 128 bits exige um resumo de 256 bits.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Tabelas hash.&lt;&#x2F;strong&gt; A análise de colisões é combinatória de bolas em urnas. Com $n$ chaves em $m$ posições, o comprimento máximo esperado de uma lista é $\Theta(\log n &#x2F; \log\log n)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Espaço de busca.&lt;&#x2F;strong&gt; Contar configurações decide se busca exaustiva é viável. Um problema com $2^{40}$ estados é tratável; com $2^{80}$, não.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Complexidade de senhas.&lt;&#x2F;strong&gt; Uma senha de comprimento $L$ sobre alfabeto de tamanho $A$ tem $A^L$ possibilidades — a base de todo cálculo de entropia.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; A contagem de hipóteses limita a capacidade de generalização; é o ingrediente combinatório por trás da dimensão VC.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Testes.&lt;&#x2F;strong&gt; Cobertura de pares (&lt;em&gt;pairwise testing&lt;&#x2F;em&gt;) usa desenhos combinatórios para cobrir todas as interações de dois parâmetros com poucas execuções.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir arranjo com combinação.&lt;&#x2F;strong&gt; Pergunte sempre se a ordem importa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Contar duas vezes&lt;&#x2F;strong&gt; ao aplicar o princípio aditivo a casos não disjuntos — é para isso que existe a inclusão-exclusão.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular fatoriais grandes desnecessariamente.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que escolhas podem não ser independentes.&lt;&#x2F;strong&gt; O princípio multiplicativo exige que o número de opções de cada etapa não dependa das escolhas anteriores.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rosen, capítulos de contagem — muitos exercícios e aplicações diretas em computação.&lt;&#x2F;li&gt;
&lt;li&gt;Graham, Knuth e Patashnik, capítulo 5 — coeficientes binomiais em profundidade; é a referência definitiva sobre identidades binomiais.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 4A — geração combinatória: como enumerar permutações, combinações e partições eficientemente.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-graham1994&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ronald L. Graham and Donald E. Knuth and Oren Patashnik&lt;&#x2F;strong&gt; (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780134389967&quot; rel=&quot;noopener&quot;&gt;9780134389967&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Ronald L. Graham; Donald E. Knuth; Oren Patashnik (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Teoria dos Conjuntos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/conjuntos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/conjuntos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/conjuntos/">&lt;h1 id=&quot;teoria-dos-conjuntos&quot;&gt;Teoria dos Conjuntos&lt;&#x2F;h1&gt;
&lt;p&gt;Conjunto é o objeto mais básico da matemática — quase tudo se define a partir dele. Em computação a correspondência é direta: &lt;code&gt;set&lt;&#x2F;code&gt; em Python, &lt;code&gt;HashSet&lt;&#x2F;code&gt; em Java, tabelas em bancos relacionais e tipos algébricos são todos realizações da mesma ideia.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicoes&quot;&gt;Definições&lt;&#x2F;h2&gt;
&lt;p&gt;Um &lt;strong&gt;conjunto&lt;&#x2F;strong&gt; é uma coleção não ordenada de elementos distintos. Escrevemos $x \in A$ para &quot;$x$ pertence a $A$&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;Duas consequências práticas da definição: &lt;strong&gt;não há ordem&lt;&#x2F;strong&gt; (${1,2} = {2,1}$) e &lt;strong&gt;não há repetição&lt;&#x2F;strong&gt; (${1,1,2} = {1,2}$). Estruturas que preservam ordem são sequências; as que permitem repetição são multiconjuntos.&lt;&#x2F;p&gt;
&lt;p&gt;Notações comuns:&lt;&#x2F;p&gt;
&lt;p&gt;$$A = {1, 2, 3} \qquad B = {x \in \mathbb{Z} : x &amp;gt; 0 \wedge x \text{ é par}}$$&lt;&#x2F;p&gt;
&lt;p&gt;A segunda é a &lt;strong&gt;notação por compreensão&lt;&#x2F;strong&gt;, e é exatamente a mesma ideia da list comprehension em Python.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;relacoes-entre-conjuntos&quot;&gt;Relações entre conjuntos&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;$A \subseteq B$ (&lt;strong&gt;subconjunto&lt;&#x2F;strong&gt;): todo elemento de $A$ está em $B$.&lt;&#x2F;li&gt;
&lt;li&gt;$A \subsetneq B$ (&lt;strong&gt;subconjunto próprio&lt;&#x2F;strong&gt;): $A \subseteq B$ e $A \ne B$.&lt;&#x2F;li&gt;
&lt;li&gt;$A = B$ se e somente se $A \subseteq B$ e $B \subseteq A$ — a técnica padrão para provar igualdade de conjuntos.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;O &lt;strong&gt;conjunto vazio&lt;&#x2F;strong&gt; $\emptyset$ é subconjunto de qualquer conjunto, inclusive de si mesmo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;operacoes&quot;&gt;Operações&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Operação&lt;&#x2F;th&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Definição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;União&lt;&#x2F;td&gt;&lt;td&gt;$A \cup B$&lt;&#x2F;td&gt;&lt;td&gt;${x : x \in A \vee x \in B}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Interseção&lt;&#x2F;td&gt;&lt;td&gt;$A \cap B$&lt;&#x2F;td&gt;&lt;td&gt;${x : x \in A \wedge x \in B}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Diferença&lt;&#x2F;td&gt;&lt;td&gt;$A \setminus B$&lt;&#x2F;td&gt;&lt;td&gt;${x : x \in A \wedge x \notin B}$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Diferença simétrica&lt;&#x2F;td&gt;&lt;td&gt;$A \triangle B$&lt;&#x2F;td&gt;&lt;td&gt;$(A \setminus B) \cup (B \setminus A)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Complemento&lt;&#x2F;td&gt;&lt;td&gt;$\overline{A}$&lt;&#x2F;td&gt;&lt;td&gt;$U \setminus A$, com $U$ o universo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Cada operação de conjuntos corresponde a um conectivo lógico — união a $\vee$, interseção a $\wedge$, complemento a $\neg$. É por isso que as leis são as mesmas:&lt;&#x2F;p&gt;
&lt;p&gt;$$\overline{A \cup B} = \overline{A} \cap \overline{B} \qquad \overline{A \cap B} = \overline{A} \cup \overline{B}$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;produto-cartesiano&quot;&gt;Produto cartesiano&lt;&#x2F;h2&gt;
&lt;p&gt;$$A \times B = {(a, b) : a \in A, b \in B}$$&lt;&#x2F;p&gt;
&lt;p&gt;Aqui a &lt;strong&gt;ordem importa&lt;&#x2F;strong&gt;: $(1,2) \ne (2,1)$. E $|A \times B| = |A| \cdot |B|$.&lt;&#x2F;p&gt;
&lt;p&gt;O produto cartesiano é o fundamento do modelo relacional: uma tabela com colunas de tipos $T_1, \dots, T_n$ é um subconjunto de $T_1 \times \cdots \times T_n$. O &lt;code&gt;CROSS JOIN&lt;&#x2F;code&gt; do SQL é literalmente esta operação, e todo outro &lt;code&gt;JOIN&lt;&#x2F;code&gt; é um subconjunto dele filtrado por um predicado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conjunto-potencia&quot;&gt;Conjunto potência&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;conjunto potência&lt;&#x2F;strong&gt; $\mathcal{P}(A)$ é o conjunto de todos os subconjuntos de $A$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\mathcal{P}({1,2}) = {\emptyset, {1}, {2}, {1,2}}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$|\mathcal{P}(A)| = 2^{|A|}$$&lt;&#x2F;p&gt;
&lt;p&gt;A justificativa da fórmula é uma bijeção útil: cada subconjunto corresponde a uma escolha binária por elemento — incluir ou não. É exatamente a representação por &lt;strong&gt;máscara de bits&lt;&#x2F;strong&gt;, em que um conjunto de até 64 elementos cabe num inteiro e as operações viram instruções de uma palavra:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;c&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mascara_a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; mascara_b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   &#x2F;&#x2F; união&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mascara_a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; mascara_b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   &#x2F;&#x2F; interseção&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mascara_a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;amp; ~&lt;&#x2F;span&gt;&lt;span&gt;mascara_b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;  &#x2F;&#x2F; diferença&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;mascara_a &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;^&lt;&#x2F;span&gt;&lt;span&gt; mascara_b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   &#x2F;&#x2F; diferença simétrica&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O crescimento $2^n$ também é o motivo de &quot;enumerar todos os subconjuntos&quot; ser inviável além de umas poucas dezenas de elementos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cardinalidade&quot;&gt;Cardinalidade&lt;&#x2F;h2&gt;
&lt;p&gt;Para conjuntos finitos, $|A|$ é a contagem de elementos. O &lt;strong&gt;princípio da inclusão-exclusão&lt;&#x2F;strong&gt; corrige a contagem dupla:&lt;&#x2F;p&gt;
&lt;p&gt;$$|A \cup B| = |A| + |B| - |A \cap B|$$&lt;&#x2F;p&gt;
&lt;p&gt;$$|A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C|$$&lt;&#x2F;p&gt;
&lt;p&gt;Para conjuntos infinitos, cardinalidade se define por bijeção. $\mathbb{N}$, $\mathbb{Z}$ e $\mathbb{Q}$ têm a mesma cardinalidade — são &lt;strong&gt;enumeráveis&lt;&#x2F;strong&gt;. $\mathbb{R}$ não é, pelo argumento diagonal de Cantor.&lt;&#x2F;p&gt;
&lt;p&gt;Esse resultado tem consequência direta em computação: o conjunto de programas é enumerável (cada um é uma cadeia finita), mas o conjunto de funções $\mathbb{N} \to {0,1}$ não é. Logo &lt;strong&gt;existem funções que nenhum programa computa&lt;&#x2F;strong&gt; — e a indecidibilidade do problema da parada é uma instância concreta disso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Numa turma de 100 alunos, 60 cursam álgebra, 45 cursam análise e 25 cursam ambas. Quantos não cursam nenhuma?&lt;&#x2F;p&gt;
&lt;p&gt;$$|A \cup B| = 60 + 45 - 25 = 80$$&lt;&#x2F;p&gt;
&lt;p&gt;Logo $100 - 80 = 20$ alunos não cursam nenhuma das duas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Estruturas de dados.&lt;&#x2F;strong&gt; Tabelas hash e árvores de busca implementam conjuntos com pertinência em $O(1)$ ou $O(\log n)$. A escolha entre elas é a escolha entre pertinência rápida e iteração ordenada.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bancos de dados.&lt;&#x2F;strong&gt; &lt;code&gt;UNION&lt;&#x2F;code&gt;, &lt;code&gt;INTERSECT&lt;&#x2F;code&gt; e &lt;code&gt;EXCEPT&lt;&#x2F;code&gt; são as operações de conjunto diretamente. A álgebra relacional inteira é construída sobre elas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Filtros de Bloom.&lt;&#x2F;strong&gt; Uma estrutura probabilística que responde pertinência com falsos positivos mas nunca falsos negativos, trocando exatidão por espaço.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise estática.&lt;&#x2F;strong&gt; Compiladores propagam conjuntos de variáveis vivas ou definições alcançáveis pelo grafo de fluxo, usando união e interseção a cada nó.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tipos.&lt;&#x2F;strong&gt; Tipos soma são uniões disjuntas; tipos produto são produtos cartesianos. O sistema de tipos é uma teoria de conjuntos aplicada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir $\in$ com $\subseteq$.&lt;&#x2F;strong&gt; ${1} \subseteq {1,2}$ é verdadeiro; ${1} \in {1,2}$ é falso.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que $\emptyset \ne {\emptyset}$.&lt;&#x2F;strong&gt; O primeiro é vazio; o segundo tem um elemento.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar cardinalidades sem descontar a interseção.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor ordem em conjuntos.&lt;&#x2F;strong&gt; A ordem de iteração de um &lt;code&gt;set&lt;&#x2F;code&gt; não é garantida; se ela importa, a estrutura certa é outra.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-halmos1974&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Paul R. Halmos&lt;&#x2F;strong&gt; (1974). &lt;em&gt;Naive Set Theory&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-1-4757-1645-0&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-1-4757-1645-0&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Paul R. Halmos (1974). &lt;em&gt;Naive Set Theory&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Funções</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/funcoes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/funcoes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/funcoes/">&lt;h1 id=&quot;funcoes&quot;&gt;Funções&lt;&#x2F;h1&gt;
&lt;p&gt;Função é o conceito que atravessa toda a matemática e toda a computação. A definição matemática é mais restrita do que &quot;função&quot; em programação, e a diferença é justamente o que explica vários comportamentos do dia a dia.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;função&lt;&#x2F;strong&gt; $f: A \to B$ associa a &lt;strong&gt;cada&lt;&#x2F;strong&gt; elemento de $A$ &lt;strong&gt;exatamente um&lt;&#x2F;strong&gt; elemento de $B$. O conjunto $A$ é o &lt;strong&gt;domínio&lt;&#x2F;strong&gt;, $B$ é o &lt;strong&gt;contradomínio&lt;&#x2F;strong&gt;, e&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{Im}(f) = {f(a) : a \in A} \subseteq B$$&lt;&#x2F;p&gt;
&lt;p&gt;é a &lt;strong&gt;imagem&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Duas exigências merecem destaque, porque é onde a noção matemática difere da computacional:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Totalidade&lt;&#x2F;strong&gt; — todo elemento do domínio tem imagem. Uma &quot;função&quot; que lança exceção para certas entradas é, matematicamente, uma função &lt;strong&gt;parcial&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Determinismo&lt;&#x2F;strong&gt; — a mesma entrada sempre produz a mesma saída. &lt;code&gt;random()&lt;&#x2F;code&gt; e &lt;code&gt;now()&lt;&#x2F;code&gt; não são funções nesse sentido.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Programação funcional chama de &lt;strong&gt;pura&lt;&#x2F;strong&gt; exatamente a função que satisfaz as duas condições. É por isso que funções puras podem ser memoizadas, reordenadas e paralelizadas com segurança, e impuras não.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;injetividade-sobrejetividade-bijecao&quot;&gt;Injetividade, sobrejetividade, bijeção&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Propriedade&lt;&#x2F;th&gt;&lt;th&gt;Definição&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Injetora&lt;&#x2F;td&gt;&lt;td&gt;$f(a_1) = f(a_2) \to a_1 = a_2$&lt;&#x2F;td&gt;&lt;td&gt;Não colide: entradas distintas, saídas distintas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Sobrejetora&lt;&#x2F;td&gt;&lt;td&gt;$\forall b \in B, \exists a, f(a) = b$&lt;&#x2F;td&gt;&lt;td&gt;Cobre todo o contradomínio&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bijetora&lt;&#x2F;td&gt;&lt;td&gt;Injetora e sobrejetora&lt;&#x2F;td&gt;&lt;td&gt;Correspondência perfeita&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Só funções &lt;strong&gt;bijetoras&lt;&#x2F;strong&gt; têm inversa $f^{-1}: B \to A$ com $f^{-1}(f(a)) = a$.&lt;&#x2F;p&gt;
&lt;p&gt;Um resultado de contagem que decorre diretamente: se $|A| &amp;gt; |B|$, nenhuma função $A \to B$ pode ser injetora. Este é o princípio da casa dos pombos, e é o que garante que &lt;strong&gt;toda função de hash colide&lt;&#x2F;strong&gt; quando o espaço de entrada é maior que o de saída.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;composicao&quot;&gt;Composição&lt;&#x2F;h2&gt;
&lt;p&gt;$$(g \circ f)(x) = g(f(x))$$&lt;&#x2F;p&gt;
&lt;p&gt;A composição é associativa mas não comutativa. Ela preserva as propriedades acima: composição de injetoras é injetora, de sobrejetoras é sobrejetora, de bijeções é bijeção.&lt;&#x2F;p&gt;
&lt;p&gt;Em código, composição é o encadeamento de transformações — &lt;code&gt;map(g, map(f, xs))&lt;&#x2F;code&gt; equivale a &lt;code&gt;map(g ∘ f, xs)&lt;&#x2F;code&gt;, e é essa igualdade que permite a um compilador ou a uma biblioteca de streams fundir dois laços num só.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Classificar $f: \mathbb{Z} \to \mathbb{Z}$, $f(x) = 2x$.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Injetora?&lt;&#x2F;strong&gt; Sim: $2a = 2b$ implica $a = b$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Sobrejetora?&lt;&#x2F;strong&gt; Não: nenhum inteiro tem imagem $3$.&lt;&#x2F;li&gt;
&lt;li&gt;Logo não é bijetora e não tem inversa em $\mathbb{Z}$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Agora mude o contradomínio para o conjunto dos pares. A mesma regra passa a ser bijeção, com inversa $x \mapsto x&#x2F;2$.&lt;&#x2F;p&gt;
&lt;p&gt;A lição é importante: &lt;strong&gt;injetividade e sobrejetividade dependem dos conjuntos escolhidos&lt;&#x2F;strong&gt;, não só da fórmula. É o mesmo motivo pelo qual mudar o tipo de retorno de uma função muda o que se pode garantir sobre ela.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;funcoes-em-computacao&quot;&gt;Funções em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Hashing.&lt;&#x2F;strong&gt; $h: U \to {0, \dots, m-1}$ com $|U| \gg m$. Nunca injetora, logo colisões são inevitáveis e toda tabela hash precisa de estratégia de resolução. Uma boa função de hash distribui a imagem uniformemente; ela não evita colisões, apenas as espalha.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Criptografia.&lt;&#x2F;strong&gt; Uma função de mão única é fácil de calcular e difícil de inverter, mesmo sendo matematicamente inversível. Já uma cifra é uma bijeção — do contrário decifrar seria ambíguo. Funções de resumo criptográfico não são bijeções, e é aí que entra a resistência a colisões.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Índices de banco.&lt;&#x2F;strong&gt; Um índice único impõe injetividade sobre a coluna. Uma chave estrangeira impõe que a imagem esteja contida no conjunto de chaves da tabela referenciada.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de tipos.&lt;&#x2F;strong&gt; A assinatura &lt;code&gt;A -&amp;gt; B&lt;&#x2F;code&gt; é literalmente uma função. Currificação é a bijeção entre $C^{A \times B}$ e $(C^B)^A$ — isto é, entre funções de dois argumentos e funções que devolvem funções.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Memoização.&lt;&#x2F;strong&gt; Só é correta para funções puras. Guardar resultado de uma função que depende de estado externo produz respostas obsoletas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;funcoes-parciais-e-o-tipo-opcional&quot;&gt;Funções parciais e o tipo opcional&lt;&#x2F;h2&gt;
&lt;p&gt;Divisão não é função total em $\mathbb{R}$: não está definida em zero. Linguagens tratam isso de três formas — exceção, valor sentinela ou tipo opcional (&lt;code&gt;Option&lt;&#x2F;code&gt;, &lt;code&gt;Maybe&lt;&#x2F;code&gt;, &lt;code&gt;Result&lt;&#x2F;code&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;O tipo opcional é a solução que restaura a totalidade: em vez de $f: A \to B$ parcial, define-se $f: A \to B \cup {\text{nada}}$, que é total. Por isso o compilador consegue exigir que o caso ausente seja tratado — a informação passou a estar no tipo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cardinalidade-e-contagem&quot;&gt;Cardinalidade e contagem&lt;&#x2F;h2&gt;
&lt;p&gt;Para conjuntos finitos, o número de funções $A \to B$ é $|B|^{|A|}$ — daí a notação $B^A$. Cada elemento do domínio escolhe independentemente sua imagem.&lt;&#x2F;p&gt;
&lt;p&gt;O número de funções &lt;strong&gt;injetoras&lt;&#x2F;strong&gt; de um conjunto de tamanho $k$ num de tamanho $n$ é $n(n-1)\cdots(n-k+1)$, que é zero quando $k &amp;gt; n$ — reencontrando a casa dos pombos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir contradomínio com imagem.&lt;&#x2F;strong&gt; Sobrejetividade é justamente a afirmação de que os dois coincidem.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chamar de função algo não determinístico.&lt;&#x2F;strong&gt; Isso invalida memoização e otimizações do compilador.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que uma função injetora tem inversa&lt;&#x2F;strong&gt; sem verificar a sobrejetividade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esperar que hashing seja injetor.&lt;&#x2F;strong&gt; Comparar apenas hashes para decidir igualdade é um defeito, não uma otimização.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-halmos1974&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Paul R. Halmos&lt;&#x2F;strong&gt; (1974). &lt;em&gt;Naive Set Theory&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-1-4757-1645-0&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-1-4757-1645-0&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Paul R. Halmos (1974). &lt;em&gt;Naive Set Theory&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Grafos: Fundamentos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/grafos-fundamentos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/grafos-fundamentos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/grafos-fundamentos/">&lt;h1 id=&quot;grafos-fundamentos&quot;&gt;Grafos: Fundamentos&lt;&#x2F;h1&gt;
&lt;p&gt;Grafo é a estrutura matemática mais versátil da computação. Redes sociais, dependências de pacotes, mapas rodoviários, grafos de chamada, autômatos, circuitos, fluxo de controle — todos são grafos. Saber traduzir um problema para grafo é frequentemente o passo que o resolve.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicoes&quot;&gt;Definições&lt;&#x2F;h2&gt;
&lt;p&gt;Um &lt;strong&gt;grafo&lt;&#x2F;strong&gt; é um par $G = (V, E)$ com $V$ um conjunto de &lt;strong&gt;vértices&lt;&#x2F;strong&gt; e $E$ um conjunto de &lt;strong&gt;arestas&lt;&#x2F;strong&gt;. Numa aresta ${u,v}$ dizemos que $u$ e $v$ são adjacentes.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grafo não dirigido&lt;&#x2F;strong&gt;: arestas são pares não ordenados.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Grafo dirigido&lt;&#x2F;strong&gt; (dígrafo): arestas são pares ordenados $(u,v)$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Grafo ponderado&lt;&#x2F;strong&gt;: cada aresta tem um peso $w(u,v)$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multigrafo&lt;&#x2F;strong&gt;: permite arestas paralelas e laços.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;O &lt;strong&gt;grau&lt;&#x2F;strong&gt; $\deg(v)$ é o número de arestas incidentes a $v$. Em dígrafos separa-se grau de entrada e de saída.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lema-do-aperto-de-maos&quot;&gt;Lema do aperto de mãos&lt;&#x2F;h2&gt;
&lt;p&gt;$$\sum_{v \in V} \deg(v) = 2|E|$$&lt;&#x2F;p&gt;
&lt;p&gt;Cada aresta contribui $1$ para o grau de cada extremidade. Consequência imediata: &lt;strong&gt;o número de vértices de grau ímpar é par&lt;&#x2F;strong&gt;. É um argumento de contagem simples que já resolve vários problemas — inclusive a caracterização dos grafos eulerianos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;representacoes&quot;&gt;Representações&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Representação&lt;&#x2F;th&gt;&lt;th&gt;Espaço&lt;&#x2F;th&gt;&lt;th&gt;Testar aresta&lt;&#x2F;th&gt;&lt;th&gt;Iterar vizinhos&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Matriz de adjacência&lt;&#x2F;td&gt;&lt;td&gt;$O(V^2)$&lt;&#x2F;td&gt;&lt;td&gt;$O(1)$&lt;&#x2F;td&gt;&lt;td&gt;$O(V)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Lista de adjacência&lt;&#x2F;td&gt;&lt;td&gt;$O(V+E)$&lt;&#x2F;td&gt;&lt;td&gt;$O(\deg v)$&lt;&#x2F;td&gt;&lt;td&gt;$O(\deg v)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A escolha depende da &lt;strong&gt;densidade&lt;&#x2F;strong&gt;. Um grafo é denso quando $|E| \approx |V|^2$ e esparso quando $|E| \approx |V|$. Grafos do mundo real quase sempre são esparsos: uma rede social com um bilhão de pessoas não tem $10^{18}$ arestas. Por isso a lista de adjacência é o padrão.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# lista de adjacência&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;grafo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    &amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;b&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;c&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    &amp;#39;b&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;d&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    &amp;#39;c&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;a&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;d&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    &amp;#39;d&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;b&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;c&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Usar matriz de adjacência num grafo esparso grande é o erro de modelagem mais caro que existe nesta área: um grafo com $10^6$ vértices exigiria $10^{12}$ células.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;caminhos-ciclos-e-conexidade&quot;&gt;Caminhos, ciclos e conexidade&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Caminho&lt;&#x2F;strong&gt;: sequência de vértices ligados por arestas, sem repetição de vértices.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ciclo&lt;&#x2F;strong&gt;: caminho que retorna ao início.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Grafo conexo&lt;&#x2F;strong&gt;: existe caminho entre quaisquer dois vértices.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Componente conexo&lt;&#x2F;strong&gt;: subgrafo conexo maximal.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Em dígrafos distingue-se &lt;strong&gt;fortemente conexo&lt;&#x2F;strong&gt; (caminho dirigido nos dois sentidos) de &lt;strong&gt;fracamente conexo&lt;&#x2F;strong&gt; (conexo ao ignorar as direções).&lt;&#x2F;p&gt;
&lt;p&gt;Um grafo conexo com $|V|$ vértices tem pelo menos $|V|-1$ arestas; com exatamente $|V|-1$ e sem ciclo, é uma &lt;strong&gt;árvore&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;travessias&quot;&gt;Travessias&lt;&#x2F;h2&gt;
&lt;p&gt;As duas travessias fundamentais diferem apenas na estrutura auxiliar — fila ou pilha — e essa diferença muda tudo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Busca em largura (BFS).&lt;&#x2F;strong&gt; Usa fila. Visita por camadas de distância crescente, o que dá o caminho mínimo em número de arestas.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; collections&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; deque&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; bfs&lt;&#x2F;span&gt;&lt;span&gt;(grafo, inicio):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    visitados&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {inicio}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    dist&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {inicio:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    fila&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; deque([inicio])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; fila:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        v&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; fila.popleft()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; grafo[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; not in&lt;&#x2F;span&gt;&lt;span&gt; visitados:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                visitados.add(u)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                dist[u]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; dist[v]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                fila.append(u)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; dist&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Busca em profundidade (DFS).&lt;&#x2F;strong&gt; Usa pilha (ou recursão). Vai fundo antes de voltar, e é a base de ordenação topológica, detecção de ciclos e componentes fortemente conexos.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; dfs&lt;&#x2F;span&gt;&lt;span&gt;(grafo, v, visitados&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; visitados&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; is&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; None&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        visitados&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; set&lt;&#x2F;span&gt;&lt;span&gt;()&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    visitados.add(v)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; grafo[v]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; not in&lt;&#x2F;span&gt;&lt;span&gt; visitados:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            dfs(grafo, u, visitados)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; visitados&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ambas rodam em $\Theta(V + E)$ com lista de adjacência. Escolha BFS quando a &lt;strong&gt;distância&lt;&#x2F;strong&gt; importa e DFS quando a &lt;strong&gt;estrutura&lt;&#x2F;strong&gt; importa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;classes-especiais&quot;&gt;Classes especiais&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Classe&lt;&#x2F;th&gt;&lt;th&gt;Caracterização&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Completo $K_n$&lt;&#x2F;td&gt;&lt;td&gt;Toda aresta possível; $\binom{n}{2}$ arestas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bipartido&lt;&#x2F;td&gt;&lt;td&gt;$V$ se divide em dois conjuntos sem arestas internas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Árvore&lt;&#x2F;td&gt;&lt;td&gt;Conexo e acíclico; $&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Planar&lt;&#x2F;td&gt;&lt;td&gt;Pode ser desenhado sem cruzamento de arestas&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Regular&lt;&#x2F;td&gt;&lt;td&gt;Todos os vértices com o mesmo grau&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Grafos bipartidos&lt;&#x2F;strong&gt; têm uma caracterização útil: um grafo é bipartido se e somente se não tem ciclo de comprimento ímpar. O teste é uma BFS que colore em duas cores alternadas e falha ao encontrar uma aresta entre vértices da mesma cor.&lt;&#x2F;p&gt;
&lt;p&gt;Para &lt;strong&gt;grafos planares&lt;&#x2F;strong&gt; conexos vale a fórmula de Euler:&lt;&#x2F;p&gt;
&lt;p&gt;$$V - E + F = 2$$&lt;&#x2F;p&gt;
&lt;p&gt;com $F$ o número de faces. Dela decorre que um grafo planar simples tem $E \le 3V - 6$, o que prova que $K_5$ e $K_{3,3}$ não são planares.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Quantas arestas tem $K_{10}$? Cada par de vértices define uma aresta:&lt;&#x2F;p&gt;
&lt;p&gt;$$\binom{10}{2} = \frac{10 \cdot 9}{2} = 45$$&lt;&#x2F;p&gt;
&lt;p&gt;Cada vértice tem grau $9$, e o lema do aperto de mãos confere: $10 \cdot 9 = 90 = 2 \cdot 45$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Redes.&lt;&#x2F;strong&gt; Roteamento é caminho mínimo; detecção de partição é conexidade.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compiladores.&lt;&#x2F;strong&gt; O grafo de fluxo de controle guia otimizações; o grafo de dependências entre variáveis guia alocação de registradores.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de build.&lt;&#x2F;strong&gt; Dependências formam um DAG, e a ordem de compilação é uma ordenação topológica. Um ciclo é um erro de configuração.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Web.&lt;&#x2F;strong&gt; O PageRank é o autovetor dominante da matriz de adjacência normalizada — um problema de grafo resolvido por álgebra linear.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Verificação de modelos.&lt;&#x2F;strong&gt; Estados de um sistema formam um grafo; verificar uma propriedade é explorar alcançabilidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar matriz de adjacência em grafo esparso grande.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir BFS com DFS&lt;&#x2F;strong&gt; ao buscar caminho mínimo: só a BFS garante o mínimo em grafos não ponderados.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DFS recursiva em grafo grande&lt;&#x2F;strong&gt; estourando a pilha — em Python, o limite padrão é cerca de mil níveis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer de marcar visitados&lt;&#x2F;strong&gt; e entrar em laço infinito em grafos com ciclo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Tratar dígrafo como não dirigido&lt;&#x2F;strong&gt; e concluir conexidade que não existe.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cormen et al., parte VI — travessias, caminhos mínimos, fluxo máximo, com pseudocódigo e provas.&lt;&#x2F;li&gt;
&lt;li&gt;Diestel, &lt;em&gt;Graph Theory&lt;&#x2F;em&gt; — a referência teórica moderna; disponível gratuitamente no site do autor.&lt;&#x2F;li&gt;
&lt;li&gt;West, &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt; — bom equilíbrio entre teoria e exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Kleinberg e Tardos, capítulo 3 — grafos do ponto de vista de projeto de algoritmos.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-diestel2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Reinhard Diestel&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-3-662-53622-3&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-3-662-53622-3&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-west2001&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Douglas B. West&lt;&#x2F;strong&gt; (2001). &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;. Prentice Hall. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;dwest.web.illinois.edu&amp;#x2F;igt&amp;#x2F;&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Reinhard Diestel (2017). &lt;em&gt;Graph Theory&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;li&gt;Douglas B. West (2001). &lt;em&gt;Introduction to Graph Theory&lt;&#x2F;em&gt;. Prentice Hall.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Indução Matemática</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/inducao-matematica/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/inducao-matematica/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/inducao-matematica/">&lt;h1 id=&quot;inducao-matematica&quot;&gt;Indução Matemática&lt;&#x2F;h1&gt;
&lt;p&gt;Indução é a técnica que permite provar &lt;strong&gt;infinitas afirmações com um argumento finito&lt;&#x2F;strong&gt;. Para quem programa, ela é a contraparte exata da recursão: provar por indução é escrever a versão em papel do mesmo raciocínio que justifica uma função recursiva.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-principio&quot;&gt;O princípio&lt;&#x2F;h2&gt;
&lt;p&gt;Para provar que $P(n)$ vale para todo $n \ge n_0$:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Base&lt;&#x2F;strong&gt;: mostre que $P(n_0)$ é verdadeiro.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Passo indutivo&lt;&#x2F;strong&gt;: mostre que, para todo $k \ge n_0$, se $P(k)$ vale então $P(k+1)$ vale.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;A metáfora do dominó é boa: a base derruba a primeira peça, o passo garante que cada peça derruba a seguinte, e a conclusão é que todas caem.&lt;&#x2F;p&gt;
&lt;p&gt;A hipótese $P(k)$ usada no passo é a &lt;strong&gt;hipótese de indução&lt;&#x2F;strong&gt;. Ela não é o que se quer provar — é o que se pode supor para provar o caso seguinte.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Provar que $\displaystyle\sum_{i=1}^{n} i = \frac{n(n+1)}{2}$ para todo $n \ge 1$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Base.&lt;&#x2F;strong&gt; Para $n = 1$: o lado esquerdo é $1$ e o direito é $\frac{1 \cdot 2}{2} = 1$. Vale.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Passo.&lt;&#x2F;strong&gt; Suponha $\sum_{i=1}^{k} i = \frac{k(k+1)}{2}$. Então:&lt;&#x2F;p&gt;
&lt;p&gt;$$\sum_{i=1}^{k+1} i = \left(\sum_{i=1}^{k} i\right) + (k+1) = \frac{k(k+1)}{2} + (k+1)$$&lt;&#x2F;p&gt;
&lt;p&gt;$$= (k+1)\left(\frac{k}{2} + 1\right) = \frac{(k+1)(k+2)}{2}$$&lt;&#x2F;p&gt;
&lt;p&gt;que é exatamente a fórmula com $n = k+1$. Pelo princípio da indução, vale para todo $n \ge 1$. $\blacksquare$&lt;&#x2F;p&gt;
&lt;p&gt;Repare na mecânica: destacar o último termo, aplicar a hipótese ao resto e manipular até chegar à forma desejada. Esse é o roteiro da maioria das provas por indução sobre somas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;inducao-forte&quot;&gt;Indução forte&lt;&#x2F;h2&gt;
&lt;p&gt;Às vezes $P(k)$ sozinho não basta e é preciso supor $P(n_0), P(n_0+1), \dots, P(k)$ — todos os casos anteriores. Essa variante é a &lt;strong&gt;indução forte&lt;&#x2F;strong&gt;, e é logicamente equivalente à simples.&lt;&#x2F;p&gt;
&lt;p&gt;Ela é a forma natural quando o passo recursivo não reduz o problema em uma unidade. Exemplo clássico: &lt;strong&gt;todo inteiro $n \ge 2$ tem fator primo&lt;&#x2F;strong&gt;. Se $n$ é primo, pronto. Se não, $n = ab$ com $2 \le a, b &amp;lt; n$, e a hipótese forte se aplica a $a$ — mas $a$ pode ser bem menor que $n-1$, então a indução simples não serviria.&lt;&#x2F;p&gt;
&lt;p&gt;O paralelo com algoritmos é direto: indução simples corresponde a recursão que decrementa em um; indução forte corresponde a dividir e conquistar, em que a chamada recursiva recebe um problema de tamanho arbitrariamente menor.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;inducao-estrutural&quot;&gt;Indução estrutural&lt;&#x2F;h2&gt;
&lt;p&gt;Generaliza a indução dos naturais para qualquer estrutura definida recursivamente — listas, árvores, fórmulas, expressões.&lt;&#x2F;p&gt;
&lt;p&gt;Para provar que uma propriedade vale para toda árvore binária:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Base&lt;&#x2F;strong&gt;: vale para a árvore vazia.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Passo&lt;&#x2F;strong&gt;: se vale para as subárvores esquerda e direita, vale para o nó que as combina.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Exemplo: provar que uma árvore binária com $n$ nós internos tem $n+1$ folhas.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Base: árvore com $0$ nós internos é uma folha; $0 + 1 = 1$. Vale.&lt;&#x2F;li&gt;
&lt;li&gt;Passo: um nó interno com subárvores de $n_1$ e $n_2$ nós internos tem $n_1 + n_2 + 1$ nós internos e, pela hipótese, $(n_1+1) + (n_2+1) = n_1 + n_2 + 2$ folhas — que é o número de nós internos mais um. Vale.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Indução estrutural é a ferramenta padrão para provar propriedades de linguagens de programação: preservação de tipos, correção de um avaliador, terminação de uma normalização.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;correcao-de-algoritmos-recursivos&quot;&gt;Correção de algoritmos recursivos&lt;&#x2F;h2&gt;
&lt;p&gt;A correspondência é exata:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Prova por indução&lt;&#x2F;th&gt;&lt;th&gt;Algoritmo recursivo&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Caso base&lt;&#x2F;td&gt;&lt;td&gt;Caso base da recursão&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Hipótese de indução&lt;&#x2F;td&gt;&lt;td&gt;Confiar que a chamada recursiva funciona&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Passo indutivo&lt;&#x2F;td&gt;&lt;td&gt;Combinar os resultados corretamente&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Boa fundamentação&lt;&#x2F;td&gt;&lt;td&gt;Garantia de terminação&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; soma&lt;&#x2F;span&gt;&lt;span&gt;(lista):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if not&lt;&#x2F;span&gt;&lt;span&gt; lista:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;            # caso base&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; lista[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; soma(lista[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;:])&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # passo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Prova: para lista vazia devolve $0$, correto. Para lista de tamanho $k+1$, suponha que &lt;code&gt;soma&lt;&#x2F;code&gt; está correta em listas de tamanho $k$; então devolve o primeiro elemento mais a soma do resto, que é a soma total.&lt;&#x2F;p&gt;
&lt;p&gt;Este é o motivo pelo qual escrever uma função recursiva parece um ato de fé: você &lt;strong&gt;supõe&lt;&#x2F;strong&gt; que a chamada recursiva funciona, exatamente como a hipótese de indução. A fé é justificada desde que os argumentos decresçam segundo uma ordem bem fundada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;invariantes-de-laco-inducao-disfarcada&quot;&gt;Invariantes de laço: indução disfarçada&lt;&#x2F;h2&gt;
&lt;p&gt;Um laço se prova pelo mesmo mecanismo. O &lt;strong&gt;invariante&lt;&#x2F;strong&gt; é a propriedade $P$ que:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;vale antes da primeira iteração (base),&lt;&#x2F;li&gt;
&lt;li&gt;é preservada por cada iteração (passo),&lt;&#x2F;li&gt;
&lt;li&gt;combinada com a negação da condição de parada, dá a pós-condição.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; maximo&lt;&#x2F;span&gt;&lt;span&gt;(v):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; len&lt;&#x2F;span&gt;&lt;span&gt;(v)):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;        # invariante: m == max(v[0..i-1])&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; v[i]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; m:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; v[i]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O invariante é o que transforma &quot;parece certo&quot; em &quot;está certo&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Esquecer o caso base.&lt;&#x2F;strong&gt; Sem ele nada se prova. O argumento &quot;$n = n+1$ se $n-1 = n$&quot; tem passo indutivo válido e nenhuma base.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Provar a base errada.&lt;&#x2F;strong&gt; Se o enunciado é para $n \ge 2$, a base é $n = 2$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar a tese como hipótese.&lt;&#x2F;strong&gt; Supor $P(k+1)$ para provar $P(k+1)$ é circular.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar indução simples onde é preciso a forte&lt;&#x2F;strong&gt;, especialmente em algoritmos de dividir e conquistar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar a boa fundamentação.&lt;&#x2F;strong&gt; Uma recursão cujos argumentos não decrescem numa ordem bem fundada pode não terminar, e a &quot;prova&quot; por indução não se aplica.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rosen, capítulo sobre indução e recursão — a apresentação mais didática e com mais exercícios resolvidos.&lt;&#x2F;li&gt;
&lt;li&gt;Graham, Knuth e Patashnik, &lt;em&gt;Concrete Mathematics&lt;&#x2F;em&gt;, capítulo 1 — indução aplicada a problemas de contagem, com o problema da Torre de Hanói como fio condutor.&lt;&#x2F;li&gt;
&lt;li&gt;Cormen et al., capítulo 2 — invariantes de laço aplicados à prova de correção do insertion sort.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-graham1994&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ronald L. Graham and Donald E. Knuth and Oren Patashnik&lt;&#x2F;strong&gt; (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780134389967&quot; rel=&quot;noopener&quot;&gt;9780134389967&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Ronald L. Graham; Donald E. Knuth; Oren Patashnik (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Lógica de Predicados</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-predicados/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-predicados/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-predicados/">&lt;h1 id=&quot;logica-de-predicados&quot;&gt;Lógica de Predicados&lt;&#x2F;h1&gt;
&lt;p&gt;A lógica proposicional não consegue expressar &quot;todo elemento da lista é positivo&quot; — ela trata cada proposição como um átomo sem estrutura interna. A &lt;strong&gt;lógica de predicados&lt;&#x2F;strong&gt; (ou de primeira ordem) acrescenta o que falta: variáveis, predicados e quantificadores.&lt;&#x2F;p&gt;
&lt;p&gt;É a linguagem em que se escrevem especificações de programas, invariantes de laço e restrições de banco de dados.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;predicados&quot;&gt;Predicados&lt;&#x2F;h2&gt;
&lt;p&gt;Um &lt;strong&gt;predicado&lt;&#x2F;strong&gt; é uma afirmação com variáveis livres, que só vira proposição quando as variáveis recebem valores. $P(x)$: &quot;$x$ é primo&quot; não tem valor de verdade; $P(7)$ tem.&lt;&#x2F;p&gt;
&lt;p&gt;Predicados podem ter várias variáveis: $D(x, y)$ para &quot;$x$ divide $y$&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quantificadores&quot;&gt;Quantificadores&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Quantificador&lt;&#x2F;th&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Leitura&lt;&#x2F;th&gt;&lt;th&gt;Análogo em código&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Universal&lt;&#x2F;td&gt;&lt;td&gt;$\forall x, P(x)$&lt;&#x2F;td&gt;&lt;td&gt;para todo $x$, $P(x)$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;all(P(x) for x in D)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Existencial&lt;&#x2F;td&gt;&lt;td&gt;$\exists x, P(x)$&lt;&#x2F;td&gt;&lt;td&gt;existe $x$ tal que $P(x)$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;any(P(x) for x in D)&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O quantificador sempre percorre um &lt;strong&gt;domínio&lt;&#x2F;strong&gt;. &quot;$\forall x, (x^2 \ge 0)$&quot; é verdadeiro nos reais e falso nos complexos. Omitir o domínio é a fonte mais comum de ambiguidade numa especificação.&lt;&#x2F;p&gt;
&lt;p&gt;Dois casos-limite valem memorizar: sobre o domínio vazio, &lt;strong&gt;todo&lt;&#x2F;strong&gt; enunciado universal é verdadeiro e &lt;strong&gt;todo&lt;&#x2F;strong&gt; existencial é falso. Isso explica &lt;code&gt;all([]) == True&lt;&#x2F;code&gt; e &lt;code&gt;any([]) == False&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;negacao-de-quantificadores&quot;&gt;Negação de quantificadores&lt;&#x2F;h2&gt;
&lt;p&gt;As regras são o análogo direto de De Morgan, e são as mais usadas na prática:&lt;&#x2F;p&gt;
&lt;div class=&quot;katex-display&quot;&gt;\neg \forall x\, P(x) \;\equiv\; \exists x\, \neg P(x)&lt;&#x2F;div&gt;&lt;div class=&quot;katex-display&quot;&gt;\neg \exists x\, P(x) \;\equiv\; \forall x\, \neg P(x)&lt;&#x2F;div&gt;
&lt;p&gt;Em português: negar &quot;todos são pares&quot; dá &quot;existe um ímpar&quot; — e não &quot;todos são ímpares&quot;. A negação de uma propriedade universal é a existência de um &lt;strong&gt;contraexemplo&lt;&#x2F;strong&gt;, o que é a base de toda refutação matemática e de todo teste que encontra um defeito.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-ordem-dos-quantificadores-importa&quot;&gt;A ordem dos quantificadores importa&lt;&#x2F;h2&gt;
&lt;p&gt;Este é o ponto que mais gera confusão, e vale um exemplo concreto. Seja $A(x, y)$ o predicado &quot;$y$ é maior que $x$&quot; sobre os inteiros:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$\forall x, \exists y, A(x, y)$ — &quot;para todo $x$ existe algum $y$ maior&quot;. &lt;strong&gt;Verdadeiro&lt;&#x2F;strong&gt;: basta tomar $y = x + 1$, e o $y$ pode depender de $x$.&lt;&#x2F;li&gt;
&lt;li&gt;$\exists y, \forall x, A(x, y)$ — &quot;existe um $y$ maior que todos os $x$&quot;. &lt;strong&gt;Falso&lt;&#x2F;strong&gt;: exigiria um inteiro maior que qualquer outro.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Trocar a ordem mudou o valor de verdade. A regra prática: no primeiro caso a escolha de $y$ pode depender de $x$; no segundo, o mesmo $y$ tem de servir para todos.&lt;&#x2F;p&gt;
&lt;p&gt;Essa distinção aparece direto em engenharia. &quot;Toda requisição tem um servidor que a atende&quot; é bem diferente de &quot;existe um servidor que atende todas as requisições&quot; — a primeira descreve um balanceador, a segunda um ponto único de falha.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;escopo-e-variaveis-livres&quot;&gt;Escopo e variáveis livres&lt;&#x2F;h2&gt;
&lt;p&gt;Uma variável é &lt;strong&gt;ligada&lt;&#x2F;strong&gt; quando está sob o alcance de um quantificador, e &lt;strong&gt;livre&lt;&#x2F;strong&gt; caso contrário. Em&lt;&#x2F;p&gt;
&lt;p&gt;$$\forall x, (P(x) \wedge Q(y))$$&lt;&#x2F;p&gt;
&lt;p&gt;$x$ é ligada e $y$ é livre. Uma fórmula sem variáveis livres é uma &lt;strong&gt;sentença&lt;&#x2F;strong&gt; e tem valor de verdade definido; com variáveis livres, ela é um predicado.&lt;&#x2F;p&gt;
&lt;p&gt;A analogia com programação é exata: quantificador está para variável ligada assim como declaração de parâmetro está para variável local. Renomear a variável ligada não muda o significado, como renomear um parâmetro não muda a função.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado-especificando-uma-busca&quot;&gt;Exemplo trabalhado: especificando uma busca&lt;&#x2F;h2&gt;
&lt;p&gt;Especificar &lt;code&gt;indice = busca(lista, alvo)&lt;&#x2F;code&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{Se } \exists i, (0 \le i &amp;lt; n \wedge L[i] = alvo), \text{ então } L[\mathit{indice}] = alvo$$
$$\text{Se } \neg\exists i, (0 \le i &amp;lt; n \wedge L[i] = alvo), \text{ então } \mathit{indice} = -1$$&lt;&#x2F;p&gt;
&lt;p&gt;Aplicando a negação do existencial, a segunda condição vira $\forall i, (0 \le i &amp;lt; n \to L[i] \ne alvo)$ — que é exatamente o invariante que o laço da busca linear mantém a cada iteração.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Invariantes de laço.&lt;&#x2F;strong&gt; A prova de correção de um laço consiste em mostrar que um predicado vale antes da primeira iteração, é preservado por cada iteração e, junto com a negação da condição de parada, implica a pós-condição.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Contratos.&lt;&#x2F;strong&gt; Pré e pós-condições em ferramentas de verificação (Dafny, JML, Frama-C) são fórmulas de primeira ordem sobre o estado do programa.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;SQL.&lt;&#x2F;strong&gt; &lt;code&gt;EXISTS&lt;&#x2F;code&gt; e &lt;code&gt;NOT EXISTS&lt;&#x2F;code&gt; são quantificadores literais; &lt;code&gt;WHERE NOT EXISTS (...)&lt;&#x2F;code&gt; é a tradução direta de $\neg\exists$. A divisão relacional — &quot;clientes que compraram &lt;strong&gt;todos&lt;&#x2F;strong&gt; os produtos&quot; — é um $\forall$ implementado como dupla negação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Prolog e programação lógica.&lt;&#x2F;strong&gt; Um programa é um conjunto de cláusulas de primeira ordem, e a execução é busca por prova.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Resolvedores SMT.&lt;&#x2F;strong&gt; Ferramentas como Z3 decidem satisfatibilidade de fórmulas de primeira ordem sobre teorias (inteiros, vetores de bits, arranjos) e são o motor de muitos verificadores modernos&lt;sup&gt;&lt;a href=&quot;#bibref-huth2004&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Trocar a ordem dos quantificadores&lt;&#x2F;strong&gt; e supor que o significado se mantém.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer o domínio.&lt;&#x2F;strong&gt; &quot;$\forall x, (x &amp;gt; 0 \to \sqrt{x} \text{ está definido})$&quot; depende de estarmos nos reais.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Negar só o predicado.&lt;&#x2F;strong&gt; A negação de $\forall x, P(x)$ não é $\forall x, \neg P(x)$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar $\wedge$ com $\forall$ em vez de $\to$.&lt;&#x2F;strong&gt; &quot;Todo primo maior que 2 é ímpar&quot; é $\forall x,(P(x) \wedge x&amp;gt;2 \to I(x))$; escrever $\forall x,(P(x) \wedge x&amp;gt;2 \wedge I(x))$ afirma que &lt;em&gt;todo&lt;&#x2F;em&gt; objeto do domínio é um primo ímpar maior que 2.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que primeira ordem decide tudo.&lt;&#x2F;strong&gt; Validade em lógica de primeira ordem é indecidível — resolvedores são incompletos ou podem não terminar.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-enderton2001&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Herbert B. Enderton&lt;&#x2F;strong&gt; (2001). &lt;em&gt;A Mathematical Introduction to Logic&lt;&#x2F;em&gt;. Academic Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1016&amp;#x2F;c2009-0-22107-6&quot; rel=&quot;noopener&quot;&gt;10.1016&amp;#x2F;c2009-0-22107-6&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-huth2004&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Huth and Mark Ryan&lt;&#x2F;strong&gt; (2004). &lt;em&gt;Logic in Computer Science: Modelling and Reasoning about Systems&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511810275&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511810275&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Herbert B. Enderton (2001). &lt;em&gt;A Mathematical Introduction to Logic&lt;&#x2F;em&gt;. Academic Press.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Huth; Mark Ryan (2004). &lt;em&gt;Logic in Computer Science: Modelling and Reasoning about Systems&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Lógica Proposicional</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-proposicional/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-proposicional/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/logica-proposicional/">&lt;h1 id=&quot;logica-proposicional&quot;&gt;Lógica Proposicional&lt;&#x2F;h1&gt;
&lt;p&gt;A lógica proposicional é o sistema formal mais simples capaz de expressar raciocínio. Para quem programa, ela não é um tópico abstrato: &lt;strong&gt;é a semântica exata do &lt;code&gt;if&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;. Toda condição de desvio, toda cláusula &lt;code&gt;WHERE&lt;&#x2F;code&gt; de SQL, todo circuito combinacional é uma fórmula proposicional.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;proposicoes-e-conectivos&quot;&gt;Proposições e conectivos&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;proposição&lt;&#x2F;strong&gt; é uma sentença à qual se pode atribuir um único valor de verdade: verdadeiro ($V$) ou falso ($F$). &quot;$2 + 2 = 4$&quot; é proposição; &quot;feche a porta&quot; não é.&lt;&#x2F;p&gt;
&lt;p&gt;Proposições se combinam por &lt;strong&gt;conectivos&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Conectivo&lt;&#x2F;th&gt;&lt;th&gt;Símbolo&lt;&#x2F;th&gt;&lt;th&gt;Leitura&lt;&#x2F;th&gt;&lt;th&gt;Em código&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Negação&lt;&#x2F;td&gt;&lt;td&gt;$\neg p$&lt;&#x2F;td&gt;&lt;td&gt;não $p$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;!p&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Conjunção&lt;&#x2F;td&gt;&lt;td&gt;$p \wedge q$&lt;&#x2F;td&gt;&lt;td&gt;$p$ e $q$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;p &amp;amp;&amp;amp; q&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Disjunção&lt;&#x2F;td&gt;&lt;td&gt;$p \vee q$&lt;&#x2F;td&gt;&lt;td&gt;$p$ ou $q$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;p || q&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Condicional&lt;&#x2F;td&gt;&lt;td&gt;$p \to q$&lt;&#x2F;td&gt;&lt;td&gt;se $p$, então $q$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;!p || q&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Bicondicional&lt;&#x2F;td&gt;&lt;td&gt;$p \leftrightarrow q$&lt;&#x2F;td&gt;&lt;td&gt;$p$ se e somente se $q$&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;p == q&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;tabelas-verdade&quot;&gt;Tabelas-verdade&lt;&#x2F;h2&gt;
&lt;p&gt;A semântica de cada conectivo é dada exaustivamente:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;$p$&lt;&#x2F;th&gt;&lt;th&gt;$q$&lt;&#x2F;th&gt;&lt;th&gt;$\neg p$&lt;&#x2F;th&gt;&lt;th&gt;$p \wedge q$&lt;&#x2F;th&gt;&lt;th&gt;$p \vee q$&lt;&#x2F;th&gt;&lt;th&gt;$p \to q$&lt;&#x2F;th&gt;&lt;th&gt;$p \leftrightarrow q$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;F&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;V&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;F&lt;&#x2F;td&gt;&lt;td&gt;&lt;strong&gt;V&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;V&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A coluna do condicional é a que causa mais estranheza. $p \to q$ só é falso quando a premissa é verdadeira e a conclusão falsa. Se a premissa é falsa, a implicação é &lt;strong&gt;verdadeira por vacuidade&lt;&#x2F;strong&gt; — &quot;se a lista for vazia, todos os seus elementos são positivos&quot; é uma afirmação verdadeira.&lt;&#x2F;p&gt;
&lt;p&gt;Isso não é um capricho: é o que faz &lt;code&gt;all([])&lt;&#x2F;code&gt; retornar &lt;code&gt;True&lt;&#x2F;code&gt; em Python e o que torna um laço &lt;code&gt;for&lt;&#x2F;code&gt; sobre coleção vazia consistente com sua pós-condição.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tautologias-contradicoes-e-satisfatibilidade&quot;&gt;Tautologias, contradições e satisfatibilidade&lt;&#x2F;h2&gt;
&lt;p&gt;Uma fórmula é &lt;strong&gt;tautologia&lt;&#x2F;strong&gt; se é verdadeira sob toda atribuição, &lt;strong&gt;contradição&lt;&#x2F;strong&gt; se é falsa sob todas, e &lt;strong&gt;satisfatível&lt;&#x2F;strong&gt; se existe ao menos uma atribuição que a torna verdadeira.&lt;&#x2F;p&gt;
&lt;p&gt;$$p \vee \neg p \quad \text{(tautologia)} \qquad p \wedge \neg p \quad \text{(contradição)}$$&lt;&#x2F;p&gt;
&lt;p&gt;Decidir se uma fórmula proposicional é satisfatível é o problema &lt;strong&gt;SAT&lt;&#x2F;strong&gt; — o primeiro problema demonstrado NP-completo, e o motor por trás de verificadores de modelo, resolvedores de restrições e otimizadores de compilador.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;equivalencias-fundamentais&quot;&gt;Equivalências fundamentais&lt;&#x2F;h2&gt;
&lt;p&gt;Duas fórmulas são equivalentes ($\equiv$) quando têm a mesma tabela-verdade.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Nome&lt;&#x2F;th&gt;&lt;th&gt;Equivalência&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Dupla negação&lt;&#x2F;td&gt;&lt;td&gt;$\neg\neg p \equiv p$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;De Morgan&lt;&#x2F;td&gt;&lt;td&gt;$\neg(p \wedge q) \equiv \neg p \vee \neg q$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;De Morgan&lt;&#x2F;td&gt;&lt;td&gt;$\neg(p \vee q) \equiv \neg p \wedge \neg q$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Distributiva&lt;&#x2F;td&gt;&lt;td&gt;$p \wedge (q \vee r) \equiv (p \wedge q) \vee (p \wedge r)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Contrapositiva&lt;&#x2F;td&gt;&lt;td&gt;$p \to q \equiv \neg q \to \neg p$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Definição de $\to$&lt;&#x2F;td&gt;&lt;td&gt;$p \to q \equiv \neg p \vee q$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Absorção&lt;&#x2F;td&gt;&lt;td&gt;$p \vee (p \wedge q) \equiv p$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;De Morgan&lt;&#x2F;strong&gt; é a mais usada na prática. Negar uma condição composta troca o conectivo e nega cada parte:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# estas duas condições são a mesma coisa&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if not&lt;&#x2F;span&gt;&lt;span&gt; (idade&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 18&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; tem_documento):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; idade&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 18&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; or not&lt;&#x2F;span&gt;&lt;span&gt; tem_documento:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A &lt;strong&gt;contrapositiva&lt;&#x2F;strong&gt; também aparece o tempo todo: &quot;se o cache está válido, o dado está atualizado&quot; equivale a &quot;se o dado está desatualizado, o cache não está válido&quot;. Trocar a implicação pela contrapositiva costuma ser a forma mais simples de reescrever uma pré-condição difícil de testar.&lt;&#x2F;p&gt;
&lt;div class=&quot;katex-display&quot;&gt;p \to q \;\equiv\; \neg q \to \neg p \;\not\equiv\; q \to p&lt;&#x2F;div&gt;
&lt;p&gt;Note o segundo símbolo: a &lt;strong&gt;recíproca&lt;&#x2F;strong&gt; $q \to p$ &lt;strong&gt;não&lt;&#x2F;strong&gt; é equivalente. Confundir as duas é a falácia lógica mais comum que existe.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;formas-normais&quot;&gt;Formas normais&lt;&#x2F;h2&gt;
&lt;p&gt;Toda fórmula pode ser reescrita em duas formas canônicas:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FNC&lt;&#x2F;strong&gt; (forma normal conjuntiva): conjunção de cláusulas, cada uma uma disjunção de literais — $(p \vee \neg q) \wedge (r \vee q)$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;FND&lt;&#x2F;strong&gt; (forma normal disjuntiva): disjunção de termos conjuntivos — $(p \wedge r) \vee (\neg q \wedge r)$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A FNC é o formato de entrada padrão dos resolvedores SAT. A conversão direta pode explodir exponencialmente em tamanho; na prática usa-se a &lt;strong&gt;transformação de Tseitin&lt;&#x2F;strong&gt;, que introduz variáveis auxiliares e mantém o crescimento linear preservando satisfatibilidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Verificar se $(p \to q) \wedge (q \to r) \to (p \to r)$ é tautologia — a regra do silogismo hipotético.&lt;&#x2F;p&gt;
&lt;p&gt;Em vez da tabela de 8 linhas, use a estratégia de refutação: suponha que a fórmula seja falsa. Então o antecedente é verdadeiro e $p \to r$ é falso. De $p \to r$ falso vem $p = V$ e $r = F$. De $p \to q$ verdadeiro com $p = V$ vem $q = V$. Mas então $q \to r$ é $V \to F$, ou seja, falso — contradizendo a hipótese de que o antecedente inteiro era verdadeiro.&lt;&#x2F;p&gt;
&lt;p&gt;Não há atribuição que falsifique a fórmula, logo ela é tautologia. Esse raciocínio por refutação é exatamente o que um resolvedor SAT automatiza.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Otimização de código.&lt;&#x2F;strong&gt; Compiladores simplificam condições usando as equivalências acima. &lt;code&gt;if (!(a &amp;amp;&amp;amp; b))&lt;&#x2F;code&gt; vira &lt;code&gt;if (!a || !b)&lt;&#x2F;code&gt;, e ramos cuja condição se reduz a contradição são eliminados como código morto.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Avaliação em curto-circuito.&lt;&#x2F;strong&gt; &lt;code&gt;&amp;amp;&amp;amp;&lt;&#x2F;code&gt; e &lt;code&gt;||&lt;&#x2F;code&gt; na maioria das linguagens não avaliam o segundo operando quando o primeiro já decide o resultado. Isso preserva a semântica lógica, mas &lt;strong&gt;não&lt;&#x2F;strong&gt; preserva efeitos colaterais — é por isso que &lt;code&gt;if (init() &amp;amp;&amp;amp; check())&lt;&#x2F;code&gt; pode não chamar &lt;code&gt;check()&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Circuitos digitais.&lt;&#x2F;strong&gt; Uma porta lógica é a realização física de um conectivo. Minimizar uma expressão booleana com mapas de Karnaugh ou o algoritmo de Quine-McCluskey é reduzir literalmente a contagem de transistores.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Verificação formal.&lt;&#x2F;strong&gt; Model checkers traduzem propriedades de programas em fórmulas cuja insatisfatibilidade prova a ausência de um defeito&lt;sup&gt;&lt;a href=&quot;#bibref-huth2004&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Bancos de dados.&lt;&#x2F;strong&gt; O otimizador de consultas reescreve predicados &lt;code&gt;WHERE&lt;&#x2F;code&gt; com as mesmas leis, empurrando filtros para perto da leitura dos dados.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir recíproca com contrapositiva.&lt;&#x2F;strong&gt; De &quot;se chove, a rua molha&quot; não se conclui &quot;se a rua molha, choveu&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Negar mal uma conjunção.&lt;&#x2F;strong&gt; A negação de &quot;$a$ e $b$&quot; é &quot;não $a$ &lt;strong&gt;ou&lt;&#x2F;strong&gt; não $b$&quot;, não &quot;não $a$ e não $b$&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ler o &quot;ou&quot; como exclusivo.&lt;&#x2F;strong&gt; Em lógica, $p \vee q$ é verdadeiro quando ambos são verdadeiros. O ou exclusivo é outro conectivo, $p \oplus q$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Achar que implicação é causalidade.&lt;&#x2F;strong&gt; $p \to q$ é uma relação entre valores de verdade, não uma afirmação de que $p$ causa $q$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-huth2004&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Huth and Mark Ryan&lt;&#x2F;strong&gt; (2004). &lt;em&gt;Logic in Computer Science: Modelling and Reasoning about Systems&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511810275&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511810275&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Huth; Mark Ryan (2004). &lt;em&gt;Logic in Computer Science: Modelling and Reasoning about Systems&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Princípio da Casa dos Pombos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/principio-casa-dos-pombos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/principio-casa-dos-pombos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/principio-casa-dos-pombos/">&lt;h1 id=&quot;principio-da-casa-dos-pombos&quot;&gt;Princípio da Casa dos Pombos&lt;&#x2F;h1&gt;
&lt;p&gt;O enunciado é quase constrangedoramente simples, e as consequências são profundas. É um dos poucos resultados matemáticos que provam &lt;strong&gt;impossibilidade&lt;&#x2F;strong&gt; com um argumento de uma linha.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enunciado&quot;&gt;Enunciado&lt;&#x2F;h2&gt;
&lt;p&gt;Se $n$ objetos são distribuídos em $m$ recipientes e $n &amp;gt; m$, então algum recipiente contém pelo menos dois objetos.&lt;&#x2F;p&gt;
&lt;p&gt;Equivalentemente: &lt;strong&gt;não existe função injetora de um conjunto finito num conjunto estritamente menor&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Forma generalizada.&lt;&#x2F;strong&gt; Se $n$ objetos vão para $m$ recipientes, algum recipiente contém pelo menos $\lceil n&#x2F;m \rceil$ objetos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-imediatas&quot;&gt;Aplicações imediatas&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Toda função de hash colide.&lt;&#x2F;strong&gt; Se o universo de chaves é maior que a tabela — e sempre é —, existem chaves distintas com o mesmo índice. Não há função de hash &quot;perfeita&quot; para entrada arbitrária, e toda tabela precisa de estratégia de resolução de colisão. Esse não é um defeito de implementação: é impossibilidade matemática.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compressão sem perdas não comprime tudo.&lt;&#x2F;strong&gt; Um compressor sem perdas é uma função injetora de cadeias em cadeias. Se ele encurtasse toda entrada de $n$ bits, mapearia $2^n$ entradas em menos de $2^n$ saídas — impossível. Logo, &lt;strong&gt;para todo compressor existe entrada que ele aumenta&lt;&#x2F;strong&gt;. Compressores úteis apostam que as entradas reais são estruturadas, não que vencem a contagem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Endereços IPv4 acabam.&lt;&#x2F;strong&gt; $2^{32}$ endereços para mais dispositivos que isso força compartilhamento — NAT é a resposta de engenharia a um argumento de contagem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Detecção de ciclo.&lt;&#x2F;strong&gt; Uma função $f: S \to S$ sobre conjunto finito, iterada a partir de qualquer ponto, repete um valor em no máximo $|S|+1$ passos — e a partir daí entra em ciclo. É a base do algoritmo de Floyd (a &quot;lebre e a tartaruga&quot;) e do algoritmo rho de Pollard para fatoração.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Geradores pseudoaleatórios têm período.&lt;&#x2F;strong&gt; O estado interno é finito, logo a sequência necessariamente se repete. O tamanho do estado limita o período: um gerador com 32 bits de estado não pode ter período maior que $2^{32}$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplos-trabalhados&quot;&gt;Exemplos trabalhados&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Meias na gaveta.&lt;&#x2F;strong&gt; Numa gaveta com meias pretas e brancas misturadas, quantas tirar no escuro para garantir um par igual? Três: com duas cores e três meias, alguma cor aparece duas vezes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aperto de mãos.&lt;&#x2F;strong&gt; Numa festa com $n \ge 2$ pessoas, sempre há duas que cumprimentaram o mesmo número de pessoas. Cada uma cumprimentou entre $0$ e $n-1$ pessoas — $n$ valores possíveis para $n$ pessoas, o que não bastaria. Mas $0$ e $n-1$ não podem ocorrer simultaneamente: se alguém cumprimentou todos, ninguém cumprimentou zero. Logo há no máximo $n-1$ valores efetivos para $n$ pessoas, e dois coincidem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Subsequência monótona.&lt;&#x2F;strong&gt; Em qualquer sequência de $n^2+1$ números reais distintos existe subsequência monótona de comprimento $n+1$ — o teorema de Erdős-Szekeres, provado associando a cada elemento o par (maior subsequência crescente que termina nele, maior decrescente) e aplicando o princípio.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Soma divisível.&lt;&#x2F;strong&gt; Entre quaisquer $n$ inteiros, existe um subconjunto não vazio cuja soma é divisível por $n$. Considere as $n$ somas parciais $s_1, \dots, s_n$. Se alguma for divisível por $n$, pronto. Senão, seus restos estão em ${1,\dots,n-1}$ — $n$ valores em $n-1$ classes, então dois têm o mesmo resto, e a diferença entre eles é divisível por $n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-ataque-do-aniversario&quot;&gt;O ataque do aniversário&lt;&#x2F;h2&gt;
&lt;p&gt;A versão probabilística é ainda mais útil que a determinística. Com $m$ valores possíveis, a probabilidade de colisão passa de $50%$ após cerca de $1{,}18\sqrt{m}$ amostras — muito antes dos $m+1$ que o princípio determinístico exigiria.&lt;&#x2F;p&gt;
&lt;p&gt;Consequência prática em criptografia: uma função de resumo de $n$ bits oferece apenas $n&#x2F;2$ bits de resistência a colisão. SHA-256 dá 128 bits de resistência a colisão, não 256. É por isso que resumos de 128 bits (como MD5) são considerados quebrados para essa finalidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Cache.&lt;&#x2F;strong&gt; Um cache com $k$ posições atendendo mais de $k$ endereços distintos sofre evicção inevitável. O princípio dá o limite inferior para qualquer política de substituição.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Balanceamento de carga.&lt;&#x2F;strong&gt; Com $n$ requisições e $m$ servidores, algum servidor recebe pelo menos $\lceil n&#x2F;m \rceil$. Nenhum balanceador escapa disso.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Alocação de registradores.&lt;&#x2F;strong&gt; Se o programa tem mais valores vivos simultaneamente do que registradores, algum precisa ir para memória. Isso conecta o princípio à coloração de grafos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Estruturas de dados probabilísticas.&lt;&#x2F;strong&gt; Filtros de Bloom aceitam falsos positivos justamente porque o princípio proíbe representação exata em espaço sublinear.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Achar que o princípio localiza a colisão.&lt;&#x2F;strong&gt; Ele garante existência, não diz onde.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir a garantia determinística com a probabilística.&lt;&#x2F;strong&gt; Colisão &lt;em&gt;garantida&lt;&#x2F;em&gt; exige $m+1$ itens; colisão &lt;em&gt;provável&lt;&#x2F;em&gt; aparece por volta de $\sqrt{m}$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esperar hashing sem colisão.&lt;&#x2F;strong&gt; Hashing perfeito só existe para um conjunto de chaves &lt;strong&gt;conhecido e fixo&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Errar o teto na forma generalizada.&lt;&#x2F;strong&gt; É $\lceil n&#x2F;m \rceil$, não $\lfloor n&#x2F;m \rfloor$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Rosen, seção sobre o princípio da casa dos pombos — vários exercícios com aplicações em computação.&lt;&#x2F;li&gt;
&lt;li&gt;Cormen et al., capítulo sobre tabelas hash — a análise de colisões que decorre diretamente do princípio.&lt;&#x2F;li&gt;
&lt;li&gt;Katz e Lindell, capítulo sobre funções de resumo — o ataque do aniversário e suas consequências no dimensionamento de parâmetros.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-katz2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Jonathan Katz and Yehuda Lindell&lt;&#x2F;strong&gt; (2014). &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt;. CRC Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1201&amp;#x2F;b17668&quot; rel=&quot;noopener&quot;&gt;10.1201&amp;#x2F;b17668&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Jonathan Katz; Yehuda Lindell (2014). &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Recorrências</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/recorrencias/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/recorrencias/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/recorrencias/">&lt;h1 id=&quot;recorrencias&quot;&gt;Recorrências&lt;&#x2F;h1&gt;
&lt;p&gt;Uma &lt;strong&gt;relação de recorrência&lt;&#x2F;strong&gt; define um termo de uma sequência a partir dos anteriores. Em computação, ela é a forma natural de expressar o custo de um algoritmo recursivo — e resolvê-la é obter a complexidade em forma fechada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao-e-exemplos&quot;&gt;Definição e exemplos&lt;&#x2F;h2&gt;
&lt;p&gt;$$T(n) = 2T(n&#x2F;2) + n, \qquad T(1) = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Lê-se: para resolver um problema de tamanho $n$, resolvem-se dois subproblemas de tamanho $n&#x2F;2$ e gasta-se $n$ de trabalho para combinar. É exatamente o merge sort.&lt;&#x2F;p&gt;
&lt;p&gt;Outros exemplos:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Recorrência&lt;&#x2F;th&gt;&lt;th&gt;Origem&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$T(n) = T(n-1) + 1$&lt;&#x2F;td&gt;&lt;td&gt;Busca linear&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$T(n) = T(n&#x2F;2) + 1$&lt;&#x2F;td&gt;&lt;td&gt;Busca binária&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$T(n) = 2T(n&#x2F;2) + n$&lt;&#x2F;td&gt;&lt;td&gt;Merge sort&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$T(n) = T(n-1) + n$&lt;&#x2F;td&gt;&lt;td&gt;Seleção &#x2F; bubble sort&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$T(n) = 2T(n-1) + 1$&lt;&#x2F;td&gt;&lt;td&gt;Torre de Hanói&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$F(n) = F(n-1) + F(n-2)$&lt;&#x2F;td&gt;&lt;td&gt;Fibonacci&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;metodo-da-substituicao&quot;&gt;Método da substituição&lt;&#x2F;h2&gt;
&lt;p&gt;Chute a forma da solução e prove por indução.&lt;&#x2F;p&gt;
&lt;p&gt;Para $T(n) = 2T(n&#x2F;2) + n$, chute $T(n) \le c,n \log_2 n$:&lt;&#x2F;p&gt;
&lt;p&gt;$$T(n) \le 2\left(c \frac{n}{2}\log_2 \frac{n}{2}\right) + n = c,n(\log_2 n - 1) + n = c,n\log_2 n - c,n + n$$&lt;&#x2F;p&gt;
&lt;p&gt;O resultado é $\le c,n\log_2 n$ desde que $c \ge 1$. A indução fecha, logo $T(n) = O(n \log n)$.&lt;&#x2F;p&gt;
&lt;p&gt;O método é rigoroso, mas exige adivinhar a resposta antes. Serve bem para &lt;strong&gt;confirmar&lt;&#x2F;strong&gt; um palpite obtido por outro método.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;arvore-de-recursao&quot;&gt;Árvore de recursão&lt;&#x2F;h2&gt;
&lt;p&gt;Desenhe os níveis e some o trabalho de cada um. Para $T(n) = 2T(n&#x2F;2) + n$:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Nível&lt;&#x2F;th&gt;&lt;th&gt;Subproblemas&lt;&#x2F;th&gt;&lt;th&gt;Tamanho&lt;&#x2F;th&gt;&lt;th&gt;Trabalho no nível&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$0$&lt;&#x2F;td&gt;&lt;td&gt;$1$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$1$&lt;&#x2F;td&gt;&lt;td&gt;$2$&lt;&#x2F;td&gt;&lt;td&gt;$n&#x2F;2$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$2$&lt;&#x2F;td&gt;&lt;td&gt;$4$&lt;&#x2F;td&gt;&lt;td&gt;$n&#x2F;4$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\vdots$&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\log_2 n$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;td&gt;$1$&lt;&#x2F;td&gt;&lt;td&gt;$n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Cada nível custa $n$ e há $\log_2 n + 1$ níveis, logo $T(n) = \Theta(n \log n)$.&lt;&#x2F;p&gt;
&lt;p&gt;A árvore de recursão é o método mais útil na prática porque &lt;strong&gt;mostra onde o custo está&lt;&#x2F;strong&gt;. Três padrões aparecem: custo igual em todos os níveis (o total é o custo do nível vezes a altura), custo dominado pela raiz (progressão geométrica decrescente) ou dominado pelas folhas (geométrica crescente).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-mestre&quot;&gt;Teorema mestre&lt;&#x2F;h2&gt;
&lt;p&gt;Para recorrências da forma&lt;&#x2F;p&gt;
&lt;p&gt;$$T(n) = a,T(n&#x2F;b) + f(n), \qquad a \ge 1,; b &amp;gt; 1$$&lt;&#x2F;p&gt;
&lt;p&gt;compare $f(n)$ com $n^{\log_b a}$:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Caso&lt;&#x2F;th&gt;&lt;th&gt;Condição&lt;&#x2F;th&gt;&lt;th&gt;Resultado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;$f(n) = O(n^{\log_b a - \varepsilon})$&lt;&#x2F;td&gt;&lt;td&gt;$T(n) = \Theta(n^{\log_b a})$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;$f(n) = \Theta(n^{\log_b a})$&lt;&#x2F;td&gt;&lt;td&gt;$T(n) = \Theta(n^{\log_b a} \log n)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;$f(n) = \Omega(n^{\log_b a + \varepsilon})$ e regularidade&lt;&#x2F;td&gt;&lt;td&gt;$T(n) = \Theta(f(n))$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A intuição: $n^{\log_b a}$ é o custo das folhas. O caso 1 é quando as folhas dominam, o 3 é quando a raiz domina, o 2 é o equilíbrio.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aplicações diretas:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Merge sort: $a=2, b=2, f(n)=n$. Como $n^{\log_2 2} = n$, caso 2 → $\Theta(n \log n)$.&lt;&#x2F;li&gt;
&lt;li&gt;Busca binária: $a=1, b=2, f(n)=1$. Como $n^{\log_2 1} = n^0 = 1$, caso 2 → $\Theta(\log n)$.&lt;&#x2F;li&gt;
&lt;li&gt;Multiplicação de Strassen: $a=7, b=2, f(n)=n^2$. Como $n^{\log_2 7} \approx n^{2{,}81}$ domina $n^2$, caso 1 → $\Theta(n^{\log_2 7})$.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;O teorema &lt;strong&gt;não cobre todos os casos&lt;&#x2F;strong&gt;. Ele falha quando $f(n)$ fica entre dois casos — por exemplo $T(n) = 2T(n&#x2F;2) + n \log n$, que exige árvore de recursão e dá $\Theta(n \log^2 n)$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;recorrencias-lineares-homogeneas&quot;&gt;Recorrências lineares homogêneas&lt;&#x2F;h2&gt;
&lt;p&gt;Para $a_n = c_1 a_{n-1} + c_2 a_{n-2}$, monte a &lt;strong&gt;equação característica&lt;&#x2F;strong&gt; $x^2 = c_1 x + c_2$. Se as raízes $r_1 \ne r_2$ são distintas, a solução geral é&lt;&#x2F;p&gt;
&lt;p&gt;$$a_n = \alpha r_1^n + \beta r_2^n$$&lt;&#x2F;p&gt;
&lt;p&gt;com $\alpha, \beta$ determinados pelas condições iniciais.&lt;&#x2F;p&gt;
&lt;p&gt;Para Fibonacci, $x^2 = x + 1$ tem raízes $\varphi = \frac{1+\sqrt5}{2}$ e $\psi = \frac{1-\sqrt5}{2}$, e sai a fórmula de Binet:&lt;&#x2F;p&gt;
&lt;p&gt;$$F_n = \frac{\varphi^n - \psi^n}{\sqrt5}$$&lt;&#x2F;p&gt;
&lt;p&gt;Como $|\psi| &amp;lt; 1$, o segundo termo desaparece rapidamente e $F_n \approx \varphi^n&#x2F;\sqrt5$. O crescimento exponencial explica por que a implementação recursiva ingênua de Fibonacci é inviável: ela faz $\Theta(\varphi^n)$ chamadas.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ingênua: T(n) = T(n-1) + T(n-2) + 1  →  exponencial&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; fib_lenta&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; if&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; else&lt;&#x2F;span&gt;&lt;span&gt; fib_lenta(n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; fib_lenta(n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# programação dinâmica: T(n) = Θ(n)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; fib&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    a, b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        a, b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; b, a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A diferença entre as duas é exatamente a diferença entre resolver a recorrência do custo e não resolvê-la.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado-torre-de-hanoi&quot;&gt;Exemplo trabalhado: Torre de Hanói&lt;&#x2F;h2&gt;
&lt;p&gt;$T(n) = 2T(n-1) + 1$ com $T(1) = 1$. Expandindo:&lt;&#x2F;p&gt;
&lt;p&gt;$$T(n) = 2T(n-1)+1 = 4T(n-2)+2+1 = 8T(n-3)+4+2+1 = \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;$$T(n) = 2^{n-1}T(1) + \sum_{i=0}^{n-2} 2^i = 2^{n-1} + 2^{n-1} - 1 = 2^n - 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Confirmando por indução: base $T(1) = 2^1 - 1 = 1$; passo $T(k+1) = 2(2^k - 1) + 1 = 2^{k+1} - 1$. $\blacksquare$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aplicar o teorema mestre fora das hipóteses&lt;&#x2F;strong&gt;, especialmente com $a$ ou $b$ variáveis ou $f$ não polinomial.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar o caso base&lt;&#x2F;strong&gt; ao resolver por expansão; ele determina a constante.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir $T(n&#x2F;2)$ com $T(n-1)$.&lt;&#x2F;strong&gt; O primeiro dá altura logarítmica; o segundo, linear.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a condição de regularidade&lt;&#x2F;strong&gt; no caso 3 do teorema mestre.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Escrever a recorrência errada.&lt;&#x2F;strong&gt; Antes de resolver, confirme quantas chamadas recursivas há e qual o custo fora delas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Cormen et al., capítulo 4 — tratamento completo de recorrências, incluindo a prova do teorema mestre e o método de substituição.&lt;&#x2F;li&gt;
&lt;li&gt;Graham, Knuth e Patashnik, capítulos 1 e 7 — recorrências e funções geradoras, a ferramenta que resolve os casos que os métodos elementares não alcançam.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 1, seção 1.2 — análise matemática de recorrências com muito rigor.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-graham1994&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Ronald L. Graham and Donald E. Knuth and Oren Patashnik&lt;&#x2F;strong&gt; (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780134389967&quot; rel=&quot;noopener&quot;&gt;9780134389967&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-knuth1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Donald E. Knuth&lt;&#x2F;strong&gt; (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www-cs-faculty.stanford.edu&amp;#x2F;~knuth&amp;#x2F;taocp.html&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Thomas H. Cormen; Charles E. Leiserson; Ronald L. Rivest; Clifford Stein (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press.&lt;&#x2F;li&gt;
&lt;li&gt;Ronald L. Graham; Donald E. Knuth; Oren Patashnik (1994). &lt;em&gt;Concrete Mathematics: A Foundation for Computer Science&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;li&gt;Donald E. Knuth (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Relações</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/relacoes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/relacoes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/relacoes/">&lt;h1 id=&quot;relacoes&quot;&gt;Relações&lt;&#x2F;h1&gt;
&lt;p&gt;Uma relação captura a ideia de que elementos &lt;strong&gt;estão associados&lt;&#x2F;strong&gt; entre si. É a estrutura que aparece por trás de grafos, ordenações, hierarquias de tipos e do modelo relacional de bancos de dados — daí o nome.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;relação binária&lt;&#x2F;strong&gt; de $A$ em $B$ é um subconjunto $R \subseteq A \times B$. Escrevemos $a,R,b$ quando $(a,b) \in R$.&lt;&#x2F;p&gt;
&lt;p&gt;Quando $A = B$, dizemos que $R$ é uma relação &lt;strong&gt;sobre&lt;&#x2F;strong&gt; $A$. Este é o caso mais importante, e o que corresponde a um grafo dirigido: os elementos são vértices e os pares são arestas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;propriedades&quot;&gt;Propriedades&lt;&#x2F;h2&gt;
&lt;p&gt;Seja $R$ uma relação sobre $A$:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Propriedade&lt;&#x2F;th&gt;&lt;th&gt;Definição&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Reflexiva&lt;&#x2F;td&gt;&lt;td&gt;$\forall a, (a,R,a)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Irreflexiva&lt;&#x2F;td&gt;&lt;td&gt;$\forall a, \neg(a,R,a)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Simétrica&lt;&#x2F;td&gt;&lt;td&gt;$\forall a,b, (a,R,b \to b,R,a)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Antissimétrica&lt;&#x2F;td&gt;&lt;td&gt;$\forall a,b, (a,R,b \wedge b,R,a \to a = b)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Transitiva&lt;&#x2F;td&gt;&lt;td&gt;$\forall a,b,c, (a,R,b \wedge b,R,c \to a,R,c)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Um cuidado: antissimétrica &lt;strong&gt;não&lt;&#x2F;strong&gt; é o mesmo que &quot;não simétrica&quot;. A relação $\le$ é antissimétrica; $&amp;lt;$ é antissimétrica e irreflexiva ao mesmo tempo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;relacoes-de-equivalencia&quot;&gt;Relações de equivalência&lt;&#x2F;h2&gt;
&lt;p&gt;Uma relação &lt;strong&gt;reflexiva, simétrica e transitiva&lt;&#x2F;strong&gt; é uma relação de equivalência. Ela captura a ideia de &quot;ser igual para efeitos práticos&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;O resultado central é que &lt;strong&gt;toda relação de equivalência sobre $A$ particiona $A$&lt;&#x2F;strong&gt; em classes disjuntas cuja união é $A$, e reciprocamente toda partição define uma equivalência. Escreve-se $[a]$ para a classe de $a$, e $A&#x2F;{\sim}$ para o conjunto das classes.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplos:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Congruência módulo $n$: $a \equiv b \pmod n$ particiona $\mathbb{Z}$ em $n$ classes.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Ter o mesmo tamanho&quot; sobre um conjunto de cadeias.&lt;&#x2F;li&gt;
&lt;li&gt;&quot;Estar no mesmo componente conexo&quot; sobre os vértices de um grafo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Em computação, uma equivalência é o que legitima usar um &lt;strong&gt;representante&lt;&#x2F;strong&gt; no lugar do objeto. É o que a estrutura union-find calcula, o que a minimização de autômatos explora ao fundir estados indistinguíveis e o que uma função de hash consistente exige: se dois objetos são equivalentes, seus hashes precisam coincidir.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ordens-parciais&quot;&gt;Ordens parciais&lt;&#x2F;h2&gt;
&lt;p&gt;Uma relação &lt;strong&gt;reflexiva, antissimétrica e transitiva&lt;&#x2F;strong&gt; é uma ordem parcial. O par $(A, \preceq)$ é um conjunto parcialmente ordenado.&lt;&#x2F;p&gt;
&lt;p&gt;&quot;Parcial&quot; significa que pode haver elementos &lt;strong&gt;incomparáveis&lt;&#x2F;strong&gt; — nem $a \preceq b$ nem $b \preceq a$. Quando todos os pares são comparáveis, a ordem é &lt;strong&gt;total&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplos de ordem parcial:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$\subseteq$ sobre subconjuntos: ${1}$ e ${2}$ são incomparáveis.&lt;&#x2F;li&gt;
&lt;li&gt;Divisibilidade sobre inteiros positivos: $2$ e $3$ são incomparáveis.&lt;&#x2F;li&gt;
&lt;li&gt;Dependência entre tarefas: duas tarefas independentes não têm ordem entre si.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;A &lt;strong&gt;ordenação topológica&lt;&#x2F;strong&gt; transforma uma ordem parcial numa ordem total compatível com ela. É o que um sistema de build faz para escolher a sequência de compilação, e o que um gerenciador de pacotes faz para ordenar a instalação. Se o grafo de dependências tiver ciclo, não é ordem parcial — e não há ordenação possível.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;composicao-e-fechos&quot;&gt;Composição e fechos&lt;&#x2F;h2&gt;
&lt;p&gt;A &lt;strong&gt;composição&lt;&#x2F;strong&gt; de relações combina passos:&lt;&#x2F;p&gt;
&lt;p&gt;$$R \circ S = {(a,c) : \exists b, (a,S,b \wedge b,R,c)}$$&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;fecho transitivo&lt;&#x2F;strong&gt; $R^+$ é a menor relação transitiva que contém $R$: existe caminho de $a$ a $b$ por uma ou mais arestas. O &lt;strong&gt;fecho reflexivo-transitivo&lt;&#x2F;strong&gt; $R^*$ inclui também os caminhos de comprimento zero.&lt;&#x2F;p&gt;
&lt;p&gt;O algoritmo de Floyd-Warshall calcula o fecho transitivo em $O(n^3)$:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; fecho_transitivo&lt;&#x2F;span&gt;&lt;span&gt;(adj, n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    R&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [linha[:]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; for&lt;&#x2F;span&gt;&lt;span&gt; linha&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; adj]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            for&lt;&#x2F;span&gt;&lt;span&gt; j&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(n):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                if&lt;&#x2F;span&gt;&lt;span&gt; R[i][k]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; and&lt;&#x2F;span&gt;&lt;span&gt; R[k][j]:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                    R[i][j]&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; R&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Fecho transitivo responde a perguntas do tipo &quot;esta tarefa depende, direta ou indiretamente, daquela?&quot; — que é o que um analisador de impacto faz num repositório grande.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Seja $R$ sobre ${1,2,3,4}$ dada por &quot;$a$ divide $b$&quot;. Os pares são $(1,1),(1,2),(1,3),(1,4),(2,2),(2,4),(3,3),(4,4)$.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reflexiva&lt;&#x2F;strong&gt;: sim, todo número divide a si mesmo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Simétrica&lt;&#x2F;strong&gt;: não — $1$ divide $2$, mas $2$ não divide $1$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Antissimétrica&lt;&#x2F;strong&gt;: sim, entre positivos, $a \mid b$ e $b \mid a$ forçam $a = b$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Transitiva&lt;&#x2F;strong&gt;: sim.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Logo $R$ é ordem parcial, mas não total: $2$ e $3$ são incomparáveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Bancos de dados.&lt;&#x2F;strong&gt; Uma tabela é uma relação no sentido literal. Dependências funcionais entre atributos governam a normalização.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Union-find.&lt;&#x2F;strong&gt; Mantém classes de equivalência sob união com custo praticamente constante, e é o núcleo do algoritmo de Kruskal.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas de tipos.&lt;&#x2F;strong&gt; Subtipagem é uma ordem parcial. A transitividade é o que permite passar um &lt;code&gt;Gato&lt;&#x2F;code&gt; onde se espera um &lt;code&gt;Animal&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise de dependências.&lt;&#x2F;strong&gt; Grafos de build, imports de módulos e migrações de banco são ordens parciais processadas por ordenação topológica.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Comparadores.&lt;&#x2F;strong&gt; Um comparador de ordenação precisa ser uma ordem total consistente. Um comparador que viola transitividade pode fazer o algoritmo de ordenação lançar exceção ou entrar em laço, e o defeito é notoriamente difícil de reproduzir.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir antissimetria com ausência de simetria.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor que toda ordem é total&lt;&#x2F;strong&gt; e esquecer os elementos incomparáveis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Escrever um comparador não transitivo&lt;&#x2F;strong&gt;, tipicamente ao comparar por vários critérios de forma inconsistente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que igualdade e hash precisam concordar&lt;&#x2F;strong&gt; com a equivalência usada.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-rosen2007&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Kenneth H. Rosen&lt;&#x2F;strong&gt; (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781259676512&quot; rel=&quot;noopener&quot;&gt;9781259676512&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-gersting2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Judith L. Gersting&lt;&#x2F;strong&gt; (2014). &lt;em&gt;Mathematical Structures for Computer Science&lt;&#x2F;em&gt;. W. H. Freeman. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781429215107&quot; rel=&quot;noopener&quot;&gt;9781429215107&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Kenneth H. Rosen (2019). &lt;em&gt;Discrete Mathematics and Its Applications&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;li&gt;Judith L. Gersting (2014). &lt;em&gt;Mathematical Structures for Computer Science&lt;&#x2F;em&gt;. W. H. Freeman.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Erro e Condicionamento</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/erro-e-condicionamento/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/erro-e-condicionamento/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/erro-e-condicionamento/">&lt;h1 id=&quot;erro-e-condicionamento&quot;&gt;Erro e Condicionamento&lt;&#x2F;h1&gt;
&lt;p&gt;Há duas perguntas independentes diante de um resultado numérico ruim: &lt;strong&gt;o problema é sensível?&lt;&#x2F;strong&gt; e &lt;strong&gt;o algoritmo é bom?&lt;&#x2F;strong&gt; Confundir as duas leva a culpar o código quando a culpa é do problema, ou vice-versa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tipos-de-erro&quot;&gt;Tipos de erro&lt;&#x2F;h2&gt;
&lt;p&gt;$$\text{erro absoluto} = |\hat x - x|, \qquad \text{erro relativo} = \frac{|\hat x - x|}{|x|}$$&lt;&#x2F;p&gt;
&lt;p&gt;O erro relativo é quase sempre o que interessa, porque é adimensional e comparável entre escalas. Um erro absoluto de $1$ metro é irrelevante ao medir a distância à Lua e catastrófico ao usinar uma peça.&lt;&#x2F;p&gt;
&lt;p&gt;Fontes de erro:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Fonte&lt;&#x2F;th&gt;&lt;th&gt;Origem&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Arredondamento&lt;&#x2F;td&gt;&lt;td&gt;Precisão finita da máquina&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Truncamento&lt;&#x2F;td&gt;&lt;td&gt;Substituir um processo infinito por finito&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Dados&lt;&#x2F;td&gt;&lt;td&gt;Medição imprecisa da entrada&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Modelo&lt;&#x2F;td&gt;&lt;td&gt;O modelo não descreve a realidade&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Os dois primeiros são do domínio da análise numérica; os dois últimos, da modelagem — e frequentemente dominam.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;condicionamento&quot;&gt;Condicionamento&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;número de condição&lt;&#x2F;strong&gt; mede quanto o problema amplifica erros da entrada, independentemente do algoritmo:&lt;&#x2F;p&gt;
&lt;p&gt;$$\kappa = \frac{\text{erro relativo na saída}}{\text{erro relativo na entrada}}$$&lt;&#x2F;p&gt;
&lt;p&gt;Para uma função diferenciável:&lt;&#x2F;p&gt;
&lt;p&gt;$$\kappa(x) = \left|\frac{x f&#x27;(x)}{f(x)}\right|$$&lt;&#x2F;p&gt;
&lt;p&gt;Para sistemas lineares:&lt;&#x2F;p&gt;
&lt;p&gt;$$\kappa(A) = |A|,|A^{-1}| = \frac{\sigma_1}{\sigma_n}$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Regra de bolso&lt;&#x2F;strong&gt;: com $\kappa \approx 10^k$, perdem-se cerca de $k$ dígitos. Em &lt;code&gt;float64&lt;&#x2F;code&gt; (16 dígitos), $\kappa = 10^{12}$ deixa quatro dígitos confiáveis; $\kappa = 10^{16}$ não deixa nenhum.&lt;&#x2F;p&gt;
&lt;p&gt;Um problema &lt;strong&gt;mal condicionado&lt;&#x2F;strong&gt; é intrinsecamente difícil: &lt;strong&gt;nenhum&lt;&#x2F;strong&gt; algoritmo o resolve bem em precisão finita. A solução não é procurar código melhor — é reformular o problema, regularizar ou aumentar a precisão.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;estabilidade&quot;&gt;Estabilidade&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Estabilidade&lt;&#x2F;strong&gt; é propriedade do algoritmo, não do problema. Um algoritmo é &lt;strong&gt;estável no sentido regressivo&lt;&#x2F;strong&gt; quando o resultado calculado é a solução exata de um problema ligeiramente perturbado:&lt;&#x2F;p&gt;
&lt;p&gt;$$\hat y = f(\tilde x), \qquad \tilde x \approx x$$&lt;&#x2F;p&gt;
&lt;p&gt;Essa é a formulação mais útil, porque separa claramente as responsabilidades. A relação final é:&lt;&#x2F;p&gt;
&lt;p&gt;$$\text{erro direto} \lesssim \kappa \times \text{erro regressivo}$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou seja: &lt;strong&gt;algoritmo estável + problema bem condicionado = resultado confiável&lt;&#x2F;strong&gt;. Se qualquer um dos dois falhar, o resultado não é.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplos-que-ilustram-a-distincao&quot;&gt;Exemplos que ilustram a distinção&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Problema mal condicionado.&lt;&#x2F;strong&gt; Calcular as raízes do polinômio de Wilkinson $\prod_{k=1}^{20}(x-k)$ a partir dos coeficientes. Uma perturbação de $2^{-23}$ num único coeficiente move as raízes em várias unidades. Não há algoritmo que salve — a informação simplesmente não está nos coeficientes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Algoritmo instável para problema bem condicionado.&lt;&#x2F;strong&gt; Calcular a variância por $E[X^2]-(E[X])^2$ com dados de média grande. O problema é bem condicionado; a fórmula é que cancela. O algoritmo de Welford resolve o mesmo problema de forma estável.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Eliminação sem pivoteamento.&lt;&#x2F;strong&gt; Resolver $Ax=b$ com $A$ bem condicionada mas pivô pequeno. O problema está bom; o algoritmo é que amplifica o erro. Com pivoteamento parcial, o mesmo problema é resolvido corretamente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;diagnostico-pratico&quot;&gt;Diagnóstico prático&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.cond(A)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;if&lt;&#x2F;span&gt;&lt;span&gt; k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e12&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    print&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;atenção: kappa = &lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;:.1e&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;, resultado pouco confiável&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# resíduo pequeno NÃO garante solução precisa&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.solve(A, b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;residuo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.norm(A&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; @&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; np.linalg.norm(b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O último ponto merece ênfase: em problema mal condicionado, um resíduo minúsculo é perfeitamente compatível com uma solução muito errada. Resíduo pequeno indica estabilidade regressiva, não precisão. Verifique o condicionamento antes de confiar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-que-fazer-com-problema-mal-condicionado&quot;&gt;O que fazer com problema mal condicionado&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Reformular.&lt;&#x2F;strong&gt; Muitas vezes existe formulação equivalente e melhor condicionada. Usar QR em vez de equações normais reduz $\kappa^2$ a $\kappa$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Regularizar.&lt;&#x2F;strong&gt; Acrescentar $\lambda I$ (Tikhonov &#x2F; Ridge) limita o condicionamento ao custo de introduzir viés. Truncar valores singulares pequenos na pseudoinversa tem o mesmo efeito.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Escalar.&lt;&#x2F;strong&gt; Colunas com unidades de magnitudes muito diferentes inflam artificialmente o condicionamento. Normalizar atributos costuma resolver — é o mesmo motivo pelo qual padronizar entradas acelera o treino de redes neurais.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aumentar a precisão.&lt;&#x2F;strong&gt; &lt;code&gt;float128&lt;&#x2F;code&gt; ou aritmética arbitrária compram dígitos, ao custo de desempenho.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$$A = \begin{pmatrix} 1 &amp;amp; 1 \ 1 &amp;amp; 1{,}0001 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;As linhas são quase paralelas, então $A$ é quase singular. Seu número de condição é da ordem de $4\times10^4$, o que significa perder cerca de 4 ou 5 dígitos.&lt;&#x2F;p&gt;
&lt;p&gt;Geometricamente: as duas retas do sistema se cruzam num ângulo minúsculo, e mover qualquer uma delas ligeiramente desloca muito o ponto de interseção. Nenhum algoritmo contorna isso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Culpar o algoritmo&lt;&#x2F;strong&gt; por um problema mal condicionado.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confiar em resíduo pequeno&lt;&#x2F;strong&gt; como prova de precisão.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Não escalar os dados&lt;&#x2F;strong&gt; e inflar o condicionamento sem necessidade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Comparar erros absolutos&lt;&#x2F;strong&gt; entre grandezas de escalas diferentes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aumentar a precisão&lt;&#x2F;strong&gt; como primeira resposta, em vez de reformular.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Trefethen e Bau, lições 12 a 15 — condicionamento e estabilidade explicados com clareza excepcional.&lt;&#x2F;li&gt;
&lt;li&gt;Higham, &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt; — a referência definitiva.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do &lt;code&gt;numpy.linalg.cond&lt;&#x2F;code&gt; e do &lt;code&gt;scipy.linalg&lt;&#x2F;code&gt; — diagnósticos disponíveis nas ferramentas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-trefethen1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Lloyd N. Trefethen and David Bau III&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898719574&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898719574&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-higham2002&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Nicholas J. Higham&lt;&#x2F;strong&gt; (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898718027&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898718027&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Lloyd N. Trefethen; David Bau III (1997). &lt;em&gt;Numerical Linear Algebra&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;li&gt;Nicholas J. Higham (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Interpolação e Integração Numérica</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/interpolacao-e-integracao-numerica/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/interpolacao-e-integracao-numerica/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/interpolacao-e-integracao-numerica/">&lt;h1 id=&quot;interpolacao-e-integracao-numerica&quot;&gt;Interpolação e Integração Numérica&lt;&#x2F;h1&gt;
&lt;p&gt;Duas tarefas relacionadas: &lt;strong&gt;interpolar&lt;&#x2F;strong&gt; é construir uma função que passa por pontos dados; &lt;strong&gt;integrar numericamente&lt;&#x2F;strong&gt; é somar áreas usando avaliações em pontos escolhidos. Os métodos de integração saem, em geral, de integrar um interpolador.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;interpolacao-polinomial&quot;&gt;Interpolação polinomial&lt;&#x2F;h2&gt;
&lt;p&gt;Por $n+1$ pontos com abscissas distintas passa &lt;strong&gt;exatamente um&lt;&#x2F;strong&gt; polinômio de grau $\le n$.&lt;&#x2F;p&gt;
&lt;p&gt;A forma de Lagrange é a mais simples de escrever:&lt;&#x2F;p&gt;
&lt;p&gt;$$p(x) = \sum_{i=0}^{n} y_i \prod_{j\ne i}\frac{x-x_j}{x_i-x_j}$$&lt;&#x2F;p&gt;
&lt;p&gt;Elegante e ruim numericamente. A &lt;strong&gt;forma de Newton&lt;&#x2F;strong&gt; com diferenças divididas é preferível para cálculo, porque permite acrescentar pontos sem refazer tudo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-fenomeno-de-runge&quot;&gt;O fenômeno de Runge&lt;&#x2F;h2&gt;
&lt;p&gt;Aumentar o grau do polinômio &lt;strong&gt;não&lt;&#x2F;strong&gt; melhora necessariamente a aproximação. Interpolando $f(x) = \frac{1}{1+25x^2}$ em pontos igualmente espaçados de $[-1,1]$, o erro &lt;strong&gt;cresce&lt;&#x2F;strong&gt; com o grau, com oscilações violentas perto das extremidades.&lt;&#x2F;p&gt;
&lt;p&gt;Duas lições práticas:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nunca use polinômio de grau alto sobre pontos igualmente espaçados.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Se precisar de grau alto, use &lt;strong&gt;nós de Chebyshev&lt;&#x2F;strong&gt;, concentrados nas extremidades:&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;$$x_k = \cos\left(\frac{k\pi}{n}\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;Com nós de Chebyshev, a interpolação é estável e converge para funções suaves.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;splines&quot;&gt;Splines&lt;&#x2F;h2&gt;
&lt;p&gt;A alternativa preferida na prática: em vez de um polinômio de grau alto, use polinômios de grau baixo por trechos, colados com continuidade.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;spline cúbico natural&lt;&#x2F;strong&gt; usa cubicas por trecho com continuidade até a segunda derivada. É suave, não oscila e tem custo $O(n)$ para construir (o sistema é tridiagonal).&lt;&#x2F;p&gt;
&lt;p&gt;Em computação gráfica, as curvas mais usadas são de Bézier e B-splines, escolhidas por terem controle local: mover um ponto de controle afeta apenas uma região da curva. É essa propriedade — e não a precisão — que importa numa ferramenta de desenho.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quadratura-de-newton-cotes&quot;&gt;Quadratura de Newton-Cotes&lt;&#x2F;h2&gt;
&lt;p&gt;Integrar o polinômio interpolador em nós igualmente espaçados:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Regra&lt;&#x2F;th&gt;&lt;th&gt;Fórmula&lt;&#x2F;th&gt;&lt;th&gt;Erro&lt;&#x2F;th&gt;&lt;th&gt;Exata para grau&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Trapézio&lt;&#x2F;td&gt;&lt;td&gt;$\frac{h}{2}(f_0 + 2f_1 + \cdots + f_n)$&lt;&#x2F;td&gt;&lt;td&gt;$O(h^2)$&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Simpson&lt;&#x2F;td&gt;&lt;td&gt;$\frac{h}{3}(f_0 + 4f_1 + 2f_2 + \cdots + f_n)$&lt;&#x2F;td&gt;&lt;td&gt;$O(h^4)$&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Simpson é exata para polinômios de grau 3 apesar de interpolar com grau 2 — um ganho gratuito devido à simetria. É o melhor custo-benefício entre as regras simples, e exige número &lt;strong&gt;par&lt;&#x2F;strong&gt; de subintervalos.&lt;&#x2F;p&gt;
&lt;p&gt;Regras de Newton-Cotes de ordem muito alta sofrem do mesmo problema de Runge, com pesos negativos e instabilidade. A solução prática é &lt;strong&gt;composição&lt;&#x2F;strong&gt;: aplicar Simpson em muitos subintervalos pequenos, em vez de uma regra de grau alto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quadratura-de-gauss&quot;&gt;Quadratura de Gauss&lt;&#x2F;h2&gt;
&lt;p&gt;Em vez de fixar os nós e escolher os pesos, escolha &lt;strong&gt;ambos&lt;&#x2F;strong&gt;. Com $n$ nós, obtém-se exatidão para polinômios de grau até $2n-1$ — o dobro do que Newton-Cotes alcança com o mesmo número de avaliações.&lt;&#x2F;p&gt;
&lt;p&gt;Os nós são as raízes dos polinômios de Legendre. É o método de escolha quando as avaliações da função são caras e a função é suave.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quadratura-adaptativa&quot;&gt;Quadratura adaptativa&lt;&#x2F;h2&gt;
&lt;p&gt;Refina apenas onde o erro estimado é grande, comparando o resultado de um intervalo com o da sua subdivisão:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; scipy.integrate&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; quad&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;valor, erro_estimado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; quad(f,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;É o que bibliotecas fazem por padrão, e a razão pela qual &lt;code&gt;quad&lt;&#x2F;code&gt; lida bem com funções que têm regiões de comportamento muito diferente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;monte-carlo&quot;&gt;Monte Carlo&lt;&#x2F;h2&gt;
&lt;p&gt;$$\int_\Omega f \approx \frac{V}{N}\sum_{i=1}^{N} f(x_i), \qquad x_i \sim \text{Uniforme}(\Omega)$$&lt;&#x2F;p&gt;
&lt;p&gt;Erro $O(1&#x2F;\sqrt N)$ — lento, mas &lt;strong&gt;independente da dimensão&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Esta é a razão de sua dominância. Uma grade com 10 pontos por eixo em dimensão 10 exige $10^{10}$ avaliações; Monte Carlo com $10^6$ amostras dá erro relativo da ordem de $10^{-3}$ em qualquer dimensão.&lt;&#x2F;p&gt;
&lt;p&gt;Técnicas de redução de variância — amostragem por importância, amostragem estratificada, variáveis de controle — melhoram a constante sem mudar a taxa. Sequências de baixa discrepância (quasi-Monte Carlo) atingem $O((\log N)^d&#x2F;N)$ para funções bem comportadas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;escolhendo-o-metodo&quot;&gt;Escolhendo o método&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Situação&lt;&#x2F;th&gt;&lt;th&gt;Método&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1D, função suave, avaliação barata&lt;&#x2F;td&gt;&lt;td&gt;Simpson composta ou adaptativa&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1D, avaliação cara&lt;&#x2F;td&gt;&lt;td&gt;Gauss-Legendre&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1D, comportamento irregular&lt;&#x2F;td&gt;&lt;td&gt;Adaptativa&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Dimensão até ~4&lt;&#x2F;td&gt;&lt;td&gt;Produto tensorial de regras 1D&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Dimensão alta&lt;&#x2F;td&gt;&lt;td&gt;Monte Carlo ou quasi-Monte Carlo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Singularidade conhecida&lt;&#x2F;td&gt;&lt;td&gt;Mudança de variável ou quadratura especializada&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;$\int_0^1 e^{-x^2}dx$ — sem primitiva elementar.&lt;&#x2F;p&gt;
&lt;p&gt;Simpson com $n=4$ ($h=0{,}25$):&lt;&#x2F;p&gt;
&lt;p&gt;$$\frac{0{,}25}{3}\left[f(0) + 4f(0{,}25) + 2f(0{,}5) + 4f(0{,}75) + f(1)\right]$$&lt;&#x2F;p&gt;
&lt;p&gt;$$= \frac{0{,}25}{3}\left[1 + 4(0{,}93941) + 2(0{,}77880) + 4(0{,}56978) + 0{,}36788\right] \approx 0{,}74683$$&lt;&#x2F;p&gt;
&lt;p&gt;O valor correto é $0{,}746824\ldots$ — cinco dígitos corretos com apenas cinco avaliações. Simpson é notavelmente eficiente para funções suaves.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; Splines para curvas e superfícies; Monte Carlo para a equação de renderização.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; Interpolação em tabelas de consulta; integrais bayesianas por Monte Carlo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Simulação.&lt;&#x2F;strong&gt; Integradores de tempo são quadraturas disfarçadas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Processamento de sinais.&lt;&#x2F;strong&gt; Reamostragem é interpolação; o método influencia diretamente a qualidade percebida.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Finanças.&lt;&#x2F;strong&gt; Precificação de derivativos por Monte Carlo em dimensão alta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Polinômio de grau alto com nós igualmente espaçados&lt;&#x2F;strong&gt; (Runge).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Simpson com número ímpar de subintervalos.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Grade regular em dimensão alta.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Integrar sobre singularidade&lt;&#x2F;strong&gt; sem tratamento.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir interpolação com ajuste.&lt;&#x2F;strong&gt; Interpolação passa pelos pontos; regressão não — e com dados ruidosos, passar por todos os pontos é indesejável.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Burden e Faires, capítulos 3 e 4 — interpolação e quadratura com análise de erro.&lt;&#x2F;li&gt;
&lt;li&gt;Trefethen, &lt;em&gt;Approximation Theory and Approximation Practice&lt;&#x2F;em&gt; — por que Chebyshev funciona; acompanha o pacote Chebfun.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do &lt;code&gt;scipy.interpolate&lt;&#x2F;code&gt; e do &lt;code&gt;scipy.integrate&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Pharr, Jakob e Humphreys, &lt;em&gt;Physically Based Rendering&lt;&#x2F;em&gt;, capítulo sobre Monte Carlo — redução de variância na prática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-burden2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Richard L. Burden and J. Douglas Faires and Annette M. Burden&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781305253667&quot; rel=&quot;noopener&quot;&gt;9781305253667&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-stewart2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;James Stewart&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Calculus: Early Transcendentals&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781285740621&quot; rel=&quot;noopener&quot;&gt;9781285740621&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Richard L. Burden; J. Douglas Faires; Annette M. Burden (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;James Stewart (2015). &lt;em&gt;Calculus: Early Transcendentals&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Ponto Flutuante</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/ponto-flutuante/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/ponto-flutuante/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/ponto-flutuante/">&lt;h1 id=&quot;ponto-flutuante&quot;&gt;Ponto Flutuante&lt;&#x2F;h1&gt;
&lt;p&gt;Todo programador esbarra em &lt;code&gt;0.1 + 0.2 == 0.30000000000000004&lt;&#x2F;code&gt; e conclui que ponto flutuante é &quot;impreciso&quot;. A descrição correta é outra: ponto flutuante é &lt;strong&gt;exato dentro de um conjunto finito de valores&lt;&#x2F;strong&gt;, e $0{,}1$ não pertence a esse conjunto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;representacao-ieee-754&quot;&gt;Representação IEEE 754&lt;&#x2F;h2&gt;
&lt;p&gt;Um número é armazenado como&lt;&#x2F;p&gt;
&lt;p&gt;$$(-1)^s \times 1{,}m \times 2^{e}$$&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;&#x2F;th&gt;&lt;th&gt;Bits&lt;&#x2F;th&gt;&lt;th&gt;Sinal&lt;&#x2F;th&gt;&lt;th&gt;Expoente&lt;&#x2F;th&gt;&lt;th&gt;Mantissa&lt;&#x2F;th&gt;&lt;th&gt;Dígitos decimais&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;float32&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;32&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;8&lt;&#x2F;td&gt;&lt;td&gt;23&lt;&#x2F;td&gt;&lt;td&gt;~7&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;float64&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;64&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;td&gt;52&lt;&#x2F;td&gt;&lt;td&gt;~16&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;A mantissa tem um bit implícito (o 1 antes da vírgula), o que dá um dígito binário de graça.&lt;&#x2F;p&gt;
&lt;p&gt;O ponto central: a base é &lt;strong&gt;2&lt;&#x2F;strong&gt;. Frações como $1&#x2F;10$ são periódicas em binário, exatamente como $1&#x2F;3$ é periódica em decimal. Por isso $0{,}1$ não tem representação exata, e a soma acumula o erro dos dois arredondamentos.&lt;&#x2F;p&gt;
&lt;p&gt;Valores que &lt;strong&gt;são&lt;&#x2F;strong&gt; exatos: inteiros até $2^{53}$ em &lt;code&gt;float64&lt;&#x2F;code&gt;, e frações cujo denominador é potência de 2 ($0{,}5$, $0{,}25$, $0{,}125$).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;epsilon-de-maquina&quot;&gt;Epsilon de máquina&lt;&#x2F;h2&gt;
&lt;p&gt;$$\epsilon = 2^{-52} \approx 2{,}22\times10^{-16} \quad (\text{float64})$$&lt;&#x2F;p&gt;
&lt;p&gt;É o menor $\epsilon$ com $1 + \epsilon \ne 1$. Toda operação aritmética tem erro relativo limitado por $\epsilon&#x2F;2$.&lt;&#x2F;p&gt;
&lt;p&gt;Consequência prática: espere cerca de 16 dígitos decimais significativos, não 16 casas decimais. A precisão é &lt;strong&gt;relativa&lt;&#x2F;strong&gt;, então $10^{20}$ tem incerteza da ordem de $10^{4}$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;valores-especiais&quot;&gt;Valores especiais&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Valor&lt;&#x2F;th&gt;&lt;th&gt;Origem&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;+0.0&lt;&#x2F;code&gt;, &lt;code&gt;-0.0&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Zeros com sinal; iguais na comparação&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;inf&lt;&#x2F;code&gt;, &lt;code&gt;-inf&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Estouro, divisão de não zero por zero&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;nan&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;$0&#x2F;0$, $\infty-\infty$, raiz de negativo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;code&gt;nan&lt;&#x2F;code&gt; tem uma propriedade que surpreende: &lt;strong&gt;&lt;code&gt;nan != nan&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;. Isso é deliberado e é o teste padrão para detectá-lo (&lt;code&gt;x != x&lt;&#x2F;code&gt;). Como consequência, um &lt;code&gt;nan&lt;&#x2F;code&gt; num vetor contamina qualquer ordenação ou comparação, frequentemente de forma silenciosa.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;inf&lt;&#x2F;code&gt; costuma ser mais útil que uma exceção: ele se propaga, e permite continuar o cálculo e verificar no fim.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cancelamento-catastrofico&quot;&gt;Cancelamento catastrófico&lt;&#x2F;h2&gt;
&lt;p&gt;O erro mais perigoso. Ao subtrair dois números próximos, os dígitos significativos se cancelam e o erro relativo &lt;strong&gt;explode&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A fórmula de Bhaskara é o exemplo clássico. Com $b^2 \gg 4ac$, a raiz $\frac{-b + \sqrt{b^2-4ac}}{2a}$ subtrai dois números quase iguais. A correção é usar a forma racionalizada para essa raiz:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; math&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; raizes&lt;&#x2F;span&gt;&lt;span&gt;(a, b, c):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; math.sqrt(b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 4&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;*&lt;&#x2F;span&gt;&lt;span&gt;c)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;    # escolhe o sinal que evita cancelamento&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; = -&lt;&#x2F;span&gt;&lt;span&gt;(b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; math.copysign(d, b))&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; q&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; a, c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; q&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O mesmo fenômeno explica &lt;code&gt;expm1&lt;&#x2F;code&gt; e &lt;code&gt;log1p&lt;&#x2F;code&gt;: calcular $e^x - 1$ diretamente para $x$ pequeno cancela tudo.&lt;&#x2F;p&gt;
&lt;p&gt;Regra prática: &lt;strong&gt;desconfie de toda subtração entre valores próximos&lt;&#x2F;strong&gt;. Reformule algebricamente para evitá-la.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;soma-e-associatividade&quot;&gt;Soma e associatividade&lt;&#x2F;h2&gt;
&lt;p&gt;A adição em ponto flutuante &lt;strong&gt;não é associativa&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e16&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1e16&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Isso tem consequências reais em paralelismo: somar um vetor com $N$ threads dá resultado diferente de somar sequencialmente, e diferente a cada execução se a ordem de redução variar. É a causa mais comum de &quot;resultados não reproduzíveis&quot; em código numérico paralelo.&lt;&#x2F;p&gt;
&lt;p&gt;Para somar muitos valores com precisão, use o algoritmo de &lt;strong&gt;Kahan&lt;&#x2F;strong&gt;, que mantém um termo de compensação:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; soma_kahan&lt;&#x2F;span&gt;&lt;span&gt;(valores):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; valores:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; s)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; y&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;      # recupera o que se perdeu&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; t&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; s&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;math.fsum&lt;&#x2F;code&gt; do Python faz algo ainda melhor: soma exata com arredondamento único.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparacao-correta&quot;&gt;Comparação correta&lt;&#x2F;h2&gt;
&lt;p&gt;Nunca compare floats com &lt;code&gt;==&lt;&#x2F;code&gt;. As alternativas, em ordem de preferência:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; math&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;math.isclose(a, b,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; rel_tol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e-9&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; abs_tol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;0.0&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;   # padrão recomendado&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;np.allclose(A, B,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; rtol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e-5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; atol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e-8&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;         # para vetores&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A tolerância &lt;strong&gt;relativa&lt;&#x2F;strong&gt; é o que faz sentido na maioria dos casos; a absoluta só é necessária perto de zero, onde a relativa perde significado. Usar só tolerância absoluta é um erro comum: &lt;code&gt;abs(a-b) &amp;lt; 1e-9&lt;&#x2F;code&gt; é razoável para valores da ordem de 1 e absurdamente restritivo para valores da ordem de $10^{10}$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;quando-nao-usar-ponto-flutuante&quot;&gt;Quando não usar ponto flutuante&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Dinheiro.&lt;&#x2F;strong&gt; Use inteiros em centavos ou tipo decimal. Um sistema financeiro que soma valores em &lt;code&gt;float&lt;&#x2F;code&gt; acumula centavos de diferença que aparecem na conciliação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Contadores e índices.&lt;&#x2F;strong&gt; Inteiros.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Comparações exatas.&lt;&#x2F;strong&gt; Se a igualdade precisa ser exata, o tipo está errado.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; decimal&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; Decimal&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Decimal(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;0.1&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +&lt;&#x2F;span&gt;&lt;span&gt; Decimal(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;0.2&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;     # Decimal(&amp;#39;0.3&amp;#39;) — exato&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Por que &lt;code&gt;0.1 + 0.2 != 0.3&lt;&#x2F;code&gt;?&lt;&#x2F;p&gt;
&lt;p&gt;Em &lt;code&gt;float64&lt;&#x2F;code&gt;, $0{,}1$ é armazenado como aproximadamente $0{,}1000000000000000055511\ldots$ e $0{,}2$ como $0{,}2000000000000000111022\ldots$. A soma exata dessas aproximações arredonda para o float mais próximo, que é $0{,}3000000000000000444089\ldots$ — enquanto o float mais próximo de $0{,}3$ é $0{,}2999999999999999888978\ldots$.&lt;&#x2F;p&gt;
&lt;p&gt;Dois valores diferentes, ambos &quot;corretos&quot; dentro do sistema. O erro não está na máquina; está na expectativa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Comparar com &lt;code&gt;==&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar valores de magnitudes muito diferentes&lt;&#x2F;strong&gt; sem compensação.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar &lt;code&gt;float&lt;&#x2F;code&gt; para dinheiro.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar &lt;code&gt;nan&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; e propagá-lo silenciosamente por todo o cálculo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor associatividade&lt;&#x2F;strong&gt; e esperar reprodutibilidade em código paralelo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar tolerância absoluta&lt;&#x2F;strong&gt; em valores de grande magnitude.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Goldberg, &quot;What Every Computer Scientist Should Know About Floating-Point Arithmetic&quot; — leitura obrigatória, gratuita e ainda insuperável.&lt;&#x2F;li&gt;
&lt;li&gt;Higham, &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt; — o tratado completo sobre erro numérico.&lt;&#x2F;li&gt;
&lt;li&gt;O padrão IEEE 754 e a documentação de &lt;code&gt;math.fsum&lt;&#x2F;code&gt; e do módulo &lt;code&gt;decimal&lt;&#x2F;code&gt; do Python.&lt;&#x2F;li&gt;
&lt;li&gt;Site &quot;Floating Point Math&quot; (0.30000000000000004.com) — demonstração do fenômeno em dezenas de linguagens.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-goldberg1991&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;David Goldberg&lt;&#x2F;strong&gt; (1991). &lt;em&gt;What Every Computer Scientist Should Know About Floating-Point Arithmetic&lt;&#x2F;em&gt;. ACM Computing Surveys 23(1), 5-48. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1145&amp;#x2F;103162.103163&quot; rel=&quot;noopener&quot;&gt;10.1145&amp;#x2F;103162.103163&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-higham2002&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Nicholas J. Higham&lt;&#x2F;strong&gt; (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1137&amp;#x2F;1.9780898718027&quot; rel=&quot;noopener&quot;&gt;10.1137&amp;#x2F;1.9780898718027&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;David Goldberg (1991). &lt;em&gt;What Every Computer Scientist Should Know About Floating-Point Arithmetic&lt;&#x2F;em&gt;. ACM Computing Surveys 23(1), 5-48.&lt;&#x2F;li&gt;
&lt;li&gt;Nicholas J. Higham (2002). &lt;em&gt;Accuracy and Stability of Numerical Algorithms&lt;&#x2F;em&gt;. SIAM.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Raízes e Método de Newton</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/raizes-e-metodo-de-newton/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/raizes-e-metodo-de-newton/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/numerica/raizes-e-metodo-de-newton/">&lt;h1 id=&quot;raizes-e-metodo-de-newton&quot;&gt;Raízes e Método de Newton&lt;&#x2F;h1&gt;
&lt;p&gt;Encontrar $x$ com $f(x) = 0$ é um dos problemas mais recorrentes da computação numérica. Otimização, interseção de raios, cinemática inversa e calibração de modelos recaem nele.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bissecao&quot;&gt;Bisseção&lt;&#x2F;h2&gt;
&lt;p&gt;Se $f$ é contínua e $f(a)f(b) &amp;lt; 0$, existe raiz no intervalo (teorema do valor intermediário). Divida ao meio repetidamente.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Converge sempre&lt;&#x2F;strong&gt;, desde que a hipótese valha.&lt;&#x2F;li&gt;
&lt;li&gt;Convergência &lt;strong&gt;linear&lt;&#x2F;strong&gt;: um bit de precisão por iteração.&lt;&#x2F;li&gt;
&lt;li&gt;Cerca de 50 iterações para precisão de máquina.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;É lenta, mas é a única que não falha. Serve como rede de segurança para métodos mais rápidos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;newton-raphson&quot;&gt;Newton-Raphson&lt;&#x2F;h2&gt;
&lt;p&gt;$$x_{n+1} = x_n - \frac{f(x_n)}{f&#x27;(x_n)}$$&lt;&#x2F;p&gt;
&lt;p&gt;A ideia: substituir $f$ pela reta tangente em $x_n$ e tomar a raiz dessa reta. É a expansão de Taylor de primeira ordem resolvida para zero.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; newton&lt;&#x2F;span&gt;&lt;span&gt;(f, df, x0, tol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1e-12&lt;&#x2F;span&gt;&lt;span&gt;, max_iter&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;100&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; i&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(max_iter):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        fx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; f(x)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span&gt;(fx)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; tol:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span&gt; x, i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        dfx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; df(x)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; dfx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; ZeroDivisionError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;derivada nula&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        passo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; fx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; dfx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -=&lt;&#x2F;span&gt;&lt;span&gt; passo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span&gt;(passo)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span&gt; tol&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; max&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1.0&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; abs&lt;&#x2F;span&gt;&lt;span&gt;(x)):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span&gt; x, i&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; RuntimeError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;não convergiu&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Convergência quadrática&lt;&#x2F;strong&gt; perto da raiz: o número de dígitos corretos &lt;strong&gt;dobra&lt;&#x2F;strong&gt; a cada iteração. Na prática, 5 ou 6 iterações bastam a partir de um chute razoável.&lt;&#x2F;p&gt;
&lt;p&gt;O preço: precisa da derivada, e a convergência é apenas &lt;strong&gt;local&lt;&#x2F;strong&gt;. Longe da raiz, Newton pode divergir, oscilar entre dois pontos ou saltar para outra bacia de atração. As fronteiras entre bacias de atração de Newton no plano complexo são fractais — o que ilustra bem quão sensível o método é ao ponto inicial.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;secante&quot;&gt;Secante&lt;&#x2F;h2&gt;
&lt;p&gt;Substitui a derivada por diferença finita entre os dois últimos pontos:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_{n+1} = x_n - f(x_n)\frac{x_n - x_{n-1}}{f(x_n)-f(x_{n-1})}$$&lt;&#x2F;p&gt;
&lt;p&gt;Ordem de convergência $\varphi \approx 1{,}618$ — a razão áurea. Mais lento que Newton por iteração, mas &lt;strong&gt;não exige derivada&lt;&#x2F;strong&gt; e cada iteração custa apenas uma avaliação de $f$. Em termos de avaliações de função, muitas vezes vence Newton.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparacao&quot;&gt;Comparação&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Método&lt;&#x2F;th&gt;&lt;th&gt;Ordem&lt;&#x2F;th&gt;&lt;th&gt;Precisa de $f&#x27;$&lt;&#x2F;th&gt;&lt;th&gt;Garantia&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Bisseção&lt;&#x2F;td&gt;&lt;td&gt;1 (linear)&lt;&#x2F;td&gt;&lt;td&gt;Não&lt;&#x2F;td&gt;&lt;td&gt;Sempre converge&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Secante&lt;&#x2F;td&gt;&lt;td&gt;~1,62&lt;&#x2F;td&gt;&lt;td&gt;Não&lt;&#x2F;td&gt;&lt;td&gt;Local&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Newton&lt;&#x2F;td&gt;&lt;td&gt;2 (quadrática)&lt;&#x2F;td&gt;&lt;td&gt;Sim&lt;&#x2F;td&gt;&lt;td&gt;Local&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Brent&lt;&#x2F;td&gt;&lt;td&gt;Superlinear&lt;&#x2F;td&gt;&lt;td&gt;Não&lt;&#x2F;td&gt;&lt;td&gt;Sempre converge&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;O método de Brent&lt;&#x2F;strong&gt; combina bisseção com interpolação quadrática inversa: mantém a garantia da bisseção e a velocidade dos métodos superlineares. É o padrão de &lt;code&gt;scipy.optimize.brentq&lt;&#x2F;code&gt; e a escolha correta em quase toda situação prática.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; scipy.optimize&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; brentq&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;raiz&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; brentq(f, a, b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;     # rápido e sem risco de divergir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;criterios-de-parada&quot;&gt;Critérios de parada&lt;&#x2F;h2&gt;
&lt;p&gt;Este é o detalhe que separa código robusto de código que trava. Três critérios, e cada um falha sozinho:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;$|f(x_n)| &amp;lt; \varepsilon$ — falha se $f$ é muito achatada perto da raiz.&lt;&#x2F;li&gt;
&lt;li&gt;$|x_{n+1}-x_n| &amp;lt; \varepsilon$ — falha se a convergência é lenta.&lt;&#x2F;li&gt;
&lt;li&gt;Número máximo de iterações — a proteção final.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Use os três em conjunto, e prefira tolerância &lt;strong&gt;relativa&lt;&#x2F;strong&gt; ao valor de $x$. Um método iterativo sem limite de iterações é um laço infinito esperando acontecer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;raizes-multiplas&quot;&gt;Raízes múltiplas&lt;&#x2F;h2&gt;
&lt;p&gt;Se a raiz tem multiplicidade $m &amp;gt; 1$, Newton perde a convergência quadrática e cai para linear. A correção:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_{n+1} = x_n - m\frac{f(x_n)}{f&#x27;(x_n)}$$&lt;&#x2F;p&gt;
&lt;p&gt;Alternativa que não exige conhecer $m$: aplicar Newton a $u = f&#x2F;f&#x27;$, cuja raiz é simples.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;newton-em-varias-dimensoes&quot;&gt;Newton em várias dimensões&lt;&#x2F;h2&gt;
&lt;p&gt;$$x_{n+1} = x_n - J(x_n)^{-1}F(x_n)$$&lt;&#x2F;p&gt;
&lt;p&gt;com $J$ a matriz jacobiana. Na prática &lt;strong&gt;não se inverte&lt;&#x2F;strong&gt; $J$: resolve-se o sistema $J\Delta = -F$ e faz-se $x_{n+1} = x_n + \Delta$.&lt;&#x2F;p&gt;
&lt;p&gt;Em otimização, aplicar Newton a $\nabla f = 0$ dá o método de Newton para minimização, com a hessiana no lugar do jacobiano. Como formar e fatorar a hessiana é caro em dimensão alta, usam-se métodos quase-Newton (BFGS, L-BFGS) que a aproximam a partir do histórico de gradientes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Calcular $\sqrt{2}$ resolvendo $f(x) = x^2 - 2 = 0$. Com $f&#x27;(x) = 2x$:&lt;&#x2F;p&gt;
&lt;p&gt;$$x_{n+1} = x_n - \frac{x_n^2-2}{2x_n} = \frac{x_n + 2&#x2F;x_n}{2}$$&lt;&#x2F;p&gt;
&lt;p&gt;Partindo de $x_0 = 1$:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;$n$&lt;&#x2F;th&gt;&lt;th&gt;$x_n$&lt;&#x2F;th&gt;&lt;th&gt;Dígitos corretos&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;1,5&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;1,41666…&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;1,4142156…&lt;&#x2F;td&gt;&lt;td&gt;5&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;1,4142135623746…&lt;&#x2F;td&gt;&lt;td&gt;11&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Os dígitos dobram a cada passo, como a teoria prevê. Essa recorrência é o método babilônico, conhecido há milênios — e continua sendo a base de implementações de raiz quadrada em hardware.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Gráficos.&lt;&#x2F;strong&gt; Interseção de raio com superfície implícita; cinemática inversa de esqueletos animados.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Otimização.&lt;&#x2F;strong&gt; Newton e quase-Newton para treinar modelos e resolver problemas de engenharia.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Simulação.&lt;&#x2F;strong&gt; Métodos implícitos resolvem um sistema não linear a cada passo de tempo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Finanças.&lt;&#x2F;strong&gt; Volatilidade implícita é a raiz de uma equação de precificação, tipicamente resolvida com Newton ou Brent.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Hardware.&lt;&#x2F;strong&gt; Divisão e raiz quadrada em processadores usam iteração de Newton sobre uma estimativa inicial de tabela.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Newton sem limite de iterações.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chute inicial ruim&lt;&#x2F;strong&gt;, levando a divergência ou à raiz errada.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Derivada nula&lt;&#x2F;strong&gt; ou quase nula, causando passo enorme.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Critério de parada só em $|f(x)|$.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Inverter o jacobiano&lt;&#x2F;strong&gt; em vez de resolver o sistema.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar Brent&lt;&#x2F;strong&gt; e implementar Newton à mão quando a biblioteca já resolve melhor.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Burden e Faires, capítulo 2 — todos os métodos com análise de convergência.&lt;&#x2F;li&gt;
&lt;li&gt;Trefethen e Bau — perspectiva de álgebra linear numérica sobre iterações.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do &lt;code&gt;scipy.optimize&lt;&#x2F;code&gt; — &lt;code&gt;brentq&lt;&#x2F;code&gt;, &lt;code&gt;newton&lt;&#x2F;code&gt;, &lt;code&gt;fsolve&lt;&#x2F;code&gt; e quando usar cada um.&lt;&#x2F;li&gt;
&lt;li&gt;Press et al., &lt;em&gt;Numerical Recipes&lt;&#x2F;em&gt;, capítulo 9 — implementações comentadas e discussão prática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-burden2015&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Richard L. Burden and J. Douglas Faires and Annette M. Burden&lt;&#x2F;strong&gt; (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781305253667&quot; rel=&quot;noopener&quot;&gt;9781305253667&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-nocedal2006&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Jorge Nocedal and Stephen J. Wright&lt;&#x2F;strong&gt; (2006). &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-0-387-40065-5&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-0-387-40065-5&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Richard L. Burden; J. Douglas Faires; Annette M. Burden (2015). &lt;em&gt;Numerical Analysis&lt;&#x2F;em&gt;. Cengage Learning.&lt;&#x2F;li&gt;
&lt;li&gt;Jorge Nocedal; Stephen J. Wright (2006). &lt;em&gt;Numerical Optimization&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Cadeias de Markov</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/cadeias-de-markov/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/cadeias-de-markov/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/cadeias-de-markov/">&lt;h1 id=&quot;cadeias-de-markov&quot;&gt;Cadeias de Markov&lt;&#x2F;h1&gt;
&lt;p&gt;Uma cadeia de Markov modela um sistema que evolui aleatoriamente e cujo futuro depende &lt;strong&gt;apenas do estado atual&lt;&#x2F;strong&gt;, não de como se chegou até ele. Essa hipótese de &quot;ausência de memória&quot; é forte, mas cobre uma quantidade surpreendente de fenômenos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;Um processo $(X_0, X_1, \dots)$ sobre um conjunto de estados satisfaz a &lt;strong&gt;propriedade de Markov&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X_{n+1}=j \mid X_n=i, X_{n-1}=\dots) = P(X_{n+1}=j \mid X_n=i) = p_{ij}$$&lt;&#x2F;p&gt;
&lt;p&gt;A &lt;strong&gt;matriz de transição&lt;&#x2F;strong&gt; $P$ reúne as probabilidades $p_{ij}$. Cada linha soma 1 — é uma matriz &lt;strong&gt;estocástica&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;evolucao&quot;&gt;Evolução&lt;&#x2F;h2&gt;
&lt;p&gt;Se $\pi_0$ é a distribuição inicial (vetor linha), então&lt;&#x2F;p&gt;
&lt;p&gt;$$\pi_n = \pi_0 P^n$$&lt;&#x2F;p&gt;
&lt;p&gt;A potência da matriz governa o comportamento no tempo — e é aqui que a diagonalização mostra seu valor: $P^n = VD^nV^{-1}$ torna o cálculo tratável e revela que &lt;strong&gt;o segundo maior autovalor controla a velocidade de convergência&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;A entrada $(i,j)$ de $P^n$ é a probabilidade de estar em $j$ após $n$ passos partindo de $i$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;distribuicao-estacionaria&quot;&gt;Distribuição estacionária&lt;&#x2F;h2&gt;
&lt;p&gt;Um vetor $\pi$ é &lt;strong&gt;estacionário&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$\pi P = \pi, \qquad \sum_i \pi_i = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;É um autovetor à esquerda com autovalor 1 — que sempre existe para matriz estocástica.&lt;&#x2F;p&gt;
&lt;p&gt;Interpretação: se a cadeia começa em $\pi$, permanece em $\pi$. E, sob condições adequadas, converge para $\pi$ a partir de &lt;strong&gt;qualquer&lt;&#x2F;strong&gt; início.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ergodicidade&quot;&gt;Ergodicidade&lt;&#x2F;h2&gt;
&lt;p&gt;A convergência exige duas propriedades:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Irredutível&lt;&#x2F;strong&gt;: é possível ir de qualquer estado a qualquer outro.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aperiódica&lt;&#x2F;strong&gt;: não há ciclo forçado de período fixo.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Uma cadeia irredutível e aperiódica sobre estados finitos é &lt;strong&gt;ergódica&lt;&#x2F;strong&gt;, e então a distribuição estacionária é única e $\pi_n \to \pi$ independentemente de $\pi_0$.&lt;&#x2F;p&gt;
&lt;p&gt;Falhas dessas hipóteses têm consequência concreta. Uma cadeia redutível pode ficar presa numa componente — é o problema dos &quot;sumidouros&quot; na web, em que uma página sem links de saída absorve toda a massa de probabilidade. A solução do PageRank é o &lt;strong&gt;fator de amortecimento&lt;&#x2F;strong&gt;: com probabilidade $1-d$, saltar para uma página aleatória. Isso torna a cadeia irredutível e aperiódica por construção.&lt;&#x2F;p&gt;
&lt;p&gt;$$\pi = d,\pi P + \frac{1-d}{n}\mathbf{1}, \qquad d \approx 0{,}85$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tempo-de-mistura&quot;&gt;Tempo de mistura&lt;&#x2F;h2&gt;
&lt;p&gt;Quanto tempo até a distribuição ficar próxima da estacionária? O &lt;strong&gt;tempo de mistura&lt;&#x2F;strong&gt; é&lt;&#x2F;p&gt;
&lt;p&gt;$$t_{\text{mix}}(\varepsilon) = \min{n : |\pi_n - \pi|_{TV} \le \varepsilon}$$&lt;&#x2F;p&gt;
&lt;p&gt;Ele é governado pelo &lt;strong&gt;hiato espectral&lt;&#x2F;strong&gt; $1 - |\lambda_2|$: quanto maior o hiato, mais rápida a mistura. Cadeias com hiato pequeno misturam devagar — o que costuma acontecer quando o espaço de estados tem &quot;gargalos&quot; entre regiões.&lt;&#x2F;p&gt;
&lt;p&gt;Este é o parâmetro que decide se um método MCMC é utilizável na prática: uma cadeia que mistura devagar produz amostras correlacionadas e estimativas ruins, por mais que se rode.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cadeias-reversiveis&quot;&gt;Cadeias reversíveis&lt;&#x2F;h2&gt;
&lt;p&gt;Uma cadeia satisfaz &lt;strong&gt;equilíbrio detalhado&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$\pi_i p_{ij} = \pi_j p_{ji}$$&lt;&#x2F;p&gt;
&lt;p&gt;Essa condição implica que $\pi$ é estacionária, e é bem mais fácil de verificar que a definição. É por isso que os algoritmos de MCMC são construídos para satisfazê-la: em vez de calcular $\pi$, constrói-se uma cadeia que a tem como estacionária.&lt;&#x2F;p&gt;
&lt;p&gt;O &lt;strong&gt;algoritmo de Metropolis-Hastings&lt;&#x2F;strong&gt; faz exatamente isso: propõe um movimento e o aceita com probabilidade&lt;&#x2F;p&gt;
&lt;p&gt;$$\alpha = \min\left(1, \frac{\pi(j)q(j\to i)}{\pi(i)q(i\to j)}\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;O ponto genial é que $\pi$ só aparece como &lt;strong&gt;razão&lt;&#x2F;strong&gt; — a constante de normalização, tipicamente intratável, se cancela. É isso que permite amostrar de distribuições a posteriori que não se sabe calcular.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Duas páginas, A e B. De A vai-se a B com probabilidade 1; de B, volta-se a A com probabilidade $0{,}5$ e fica-se em B com $0{,}5$.&lt;&#x2F;p&gt;
&lt;p&gt;$$P = \begin{pmatrix} 0 &amp;amp; 1 \ 0{,}5 &amp;amp; 0{,}5 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Resolvendo $\pi P = \pi$ com $\pi = (\pi_A, \pi_B)$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\pi_A = 0{,}5,\pi_B, \qquad \pi_A + \pi_B = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Logo $\pi_B = 2&#x2F;3$ e $\pi_A = 1&#x2F;3$. No longo prazo, dois terços do tempo em B.&lt;&#x2F;p&gt;
&lt;p&gt;Note que a cadeia é aperiódica graças ao laço em B; sem ele, ela alternaria com período 2 e não convergiria.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;PageRank.&lt;&#x2F;strong&gt; A pontuação é a distribuição estacionária do passeio aleatório na web, calculada pelo método da potência.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;MCMC.&lt;&#x2F;strong&gt; Inferência bayesiana quando a posteriori não tem forma fechada: Metropolis-Hastings, amostrador de Gibbs, Monte Carlo Hamiltoniano.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Modelos ocultos de Markov.&lt;&#x2F;strong&gt; Reconhecimento de fala, etiquetagem morfossintática, bioinformática. Os algoritmos forward-backward e de Viterbi são programação dinâmica sobre a cadeia.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Filas.&lt;&#x2F;strong&gt; Modelos de fila e de disponibilidade de sistemas são cadeias de Markov de tempo contínuo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado por reforço.&lt;&#x2F;strong&gt; Processos de decisão de Markov acrescentam ações e recompensas; a equação de Bellman é a versão com decisão da equação estacionária.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Geração de texto.&lt;&#x2F;strong&gt; Cadeias de Markov sobre $n$-gramas foram o modelo de linguagem padrão antes das redes neurais, e continuam úteis como linha de base.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supor convergência sem verificar irredutibilidade e aperiodicidade.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir a matriz de transição com sua transposta.&lt;&#x2F;strong&gt; A convenção (linhas ou colunas somando 1) varia entre textos e bibliotecas.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Rodar MCMC sem descarte inicial&lt;&#x2F;strong&gt; e sem diagnosticar convergência.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar o tempo de mistura&lt;&#x2F;strong&gt; e tratar amostras correlacionadas como independentes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar a propriedade de Markov&lt;&#x2F;strong&gt; onde o histórico claramente importa.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Norris, &lt;em&gt;Markov Chains&lt;&#x2F;em&gt; — tratamento rigoroso e acessível.&lt;&#x2F;li&gt;
&lt;li&gt;Levin, Peres e Wilmer, &lt;em&gt;Markov Chains and Mixing Times&lt;&#x2F;em&gt; — a referência moderna sobre tempo de mistura; gratuito no site dos autores.&lt;&#x2F;li&gt;
&lt;li&gt;Mitzenmacher e Upfal, capítulos 7 e 10 — cadeias de Markov e MCMC aplicados a computação.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do Stan e do PyMC — MCMC na prática, com diagnósticos de convergência.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-norris1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;James R. Norris&lt;&#x2F;strong&gt; (1997). &lt;em&gt;Markov Chains&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511810633&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511810633&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-levin2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;David A. Levin and Yuval Peres and Elizabeth L. Wilmer&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Markov Chains and Mixing Times&lt;&#x2F;em&gt;. American Mathematical Society. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1090&amp;#x2F;mbk&amp;#x2F;107&quot; rel=&quot;noopener&quot;&gt;10.1090&amp;#x2F;mbk&amp;#x2F;107&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;James R. Norris (1997). &lt;em&gt;Markov Chains&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;David A. Levin; Yuval Peres; Elizabeth L. Wilmer (2017). &lt;em&gt;Markov Chains and Mixing Times&lt;&#x2F;em&gt;. American Mathematical Society.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Concentração e Algoritmos Aleatorizados</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/concentracao-e-algoritmos-aleatorizados/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/concentracao-e-algoritmos-aleatorizados/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/concentracao-e-algoritmos-aleatorizados/">&lt;h1 id=&quot;concentracao-e-algoritmos-aleatorizados&quot;&gt;Concentração e Algoritmos Aleatorizados&lt;&#x2F;h1&gt;
&lt;p&gt;Saber a esperança de uma quantidade aleatória raramente basta. O que se quer, em geral, é uma garantia de que ela &lt;strong&gt;não se afasta muito&lt;&#x2F;strong&gt; da esperança. As desigualdades de concentração fornecem exatamente isso, e são a base da análise de algoritmos aleatorizados.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;desigualdade-de-markov&quot;&gt;Desigualdade de Markov&lt;&#x2F;h2&gt;
&lt;p&gt;Para $X \ge 0$ e $a &amp;gt; 0$:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X \ge a) \le \frac{E[X]}{a}$$&lt;&#x2F;p&gt;
&lt;p&gt;Exige apenas não negatividade e a esperança. É fraca, mas é o ponto de partida de quase todas as outras.&lt;&#x2F;p&gt;
&lt;p&gt;Consequência prática: no máximo $1&#x2F;k$ da massa de uma variável não negativa está acima de $k$ vezes sua média.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;desigualdade-de-chebyshev&quot;&gt;Desigualdade de Chebyshev&lt;&#x2F;h2&gt;
&lt;p&gt;$$P(|X - \mu| \ge k\sigma) \le \frac{1}{k^2}$$&lt;&#x2F;p&gt;
&lt;p&gt;Usa a variância e é bem mais forte. Vale para &lt;strong&gt;qualquer&lt;&#x2F;strong&gt; distribuição com variância finita: no máximo $25%$ da massa está a mais de $2\sigma$ da média, no máximo $11%$ a mais de $3\sigma$.&lt;&#x2F;p&gt;
&lt;p&gt;Compare com a normal, em que apenas $0{,}3%$ ficam além de $3\sigma$: Chebyshev é conservadora justamente por não supor nada sobre a forma.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limites-de-chernoff&quot;&gt;Limites de Chernoff&lt;&#x2F;h2&gt;
&lt;p&gt;Para $X = \sum_{i=1}^n X_i$ soma de variáveis de Bernoulli &lt;strong&gt;independentes&lt;&#x2F;strong&gt; com $\mu = E[X]$:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X \ge (1+\delta)\mu) \le e^{-\frac{\delta^2\mu}{2+\delta}}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X \le (1-\delta)\mu) \le e^{-\frac{\delta^2\mu}{2}}$$&lt;&#x2F;p&gt;
&lt;p&gt;O decaimento é &lt;strong&gt;exponencial&lt;&#x2F;strong&gt; em $\mu$, não polinomial. Essa é a diferença qualitativa: Chebyshev dá $1&#x2F;k^2$; Chernoff dá $e^{-k}$.&lt;&#x2F;p&gt;
&lt;p&gt;É o que permite afirmações do tipo &quot;com probabilidade $1 - 1&#x2F;n^{10}$, nenhuma lista da tabela hash excede $O(\log n &#x2F; \log\log n)$&quot; — garantias fortes o bastante para serem tratadas como certezas práticas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;amplificacao&quot;&gt;Amplificação&lt;&#x2F;h2&gt;
&lt;p&gt;Se um algoritmo aleatorizado acerta com probabilidade $p &amp;gt; 1&#x2F;2$, repeti-lo $k$ vezes e tomar a maioria faz o erro cair exponencialmente em $k$.&lt;&#x2F;p&gt;
&lt;p&gt;Para algoritmos &lt;strong&gt;unilaterais&lt;&#x2F;strong&gt; — que nunca erram ao responder &quot;sim&quot;, mas podem errar ao responder &quot;não&quot; — a amplificação é ainda mais simples: $k$ repetições reduzem o erro a $\varepsilon^k$.&lt;&#x2F;p&gt;
&lt;p&gt;É por isso que o teste de primalidade de Miller-Rabin, com erro por rodada de no máximo $1&#x2F;4$, atinge erro abaixo de $10^{-30}$ com 50 rodadas. Nesse ponto a probabilidade de erro é menor que a de uma falha de hardware, o que é a justificativa prática para usá-lo em criptografia.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;las-vegas-e-monte-carlo&quot;&gt;Las Vegas e Monte Carlo&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tipo&lt;&#x2F;th&gt;&lt;th&gt;Resposta&lt;&#x2F;th&gt;&lt;th&gt;Tempo&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Las Vegas&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Sempre correta&lt;&#x2F;td&gt;&lt;td&gt;Aleatório&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Monte Carlo&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Provavelmente correta&lt;&#x2F;td&gt;&lt;td&gt;Determinado&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;&lt;strong&gt;Las Vegas&lt;&#x2F;strong&gt;: quicksort com pivô aleatório sempre ordena; o que varia é o tempo. Espera-se $O(n\log n)$, e Chernoff garante que o desvio é improvável.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Monte Carlo&lt;&#x2F;strong&gt;: Miller-Rabin pode declarar composto como primo, com probabilidade controlada, mas roda em tempo fixo.&lt;&#x2F;p&gt;
&lt;p&gt;Todo Las Vegas pode virar Monte Carlo (interrompendo após um limite de tempo); a recíproca exige verificar a resposta, o que nem sempre é possível.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;por-que-aleatorizar&quot;&gt;Por que aleatorizar&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Simplicidade.&lt;&#x2F;strong&gt; O quicksort aleatorizado é muito mais simples que algoritmos determinísticos com a mesma garantia de pior caso.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Evitar adversários.&lt;&#x2F;strong&gt; Uma função de hash fixa pode ser atacada com entradas que colidem propositalmente — um vetor de negação de serviço real, que afetou várias linguagens. Escolher a função aleatoriamente a cada execução torna o ataque impossível: o adversário não conhece a moeda.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Quebrar simetria.&lt;&#x2F;strong&gt; Em sistemas distribuídos, backoff aleatório evita que todos os nós retransmitam ao mesmo tempo. Sem aleatoriedade, não há como distinguir processos idênticos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tratar dimensão alta.&lt;&#x2F;strong&gt; Monte Carlo e projeções aleatórias (Johnson-Lindenstrauss) escapam da maldição da dimensionalidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Uma moeda justa é lançada 1000 vezes. Qual a probabilidade de sair mais de 600 caras?&lt;&#x2F;p&gt;
&lt;p&gt;$\mu = 500$, $\sigma = \sqrt{1000 \cdot 0{,}25} \approx 15{,}8$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Chebyshev&lt;&#x2F;strong&gt;: $600$ está a $\delta = 100&#x2F;15{,}8 \approx 6{,}3$ desvios, logo $P \le 1&#x2F;6{,}3^2 \approx 2{,}5%$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Chernoff&lt;&#x2F;strong&gt; com $\delta = 0{,}2$: $P \le e^{-\frac{0{,}04 \cdot 500}{2{,}2}} \approx e^{-9{,}1} \approx 1{,}1\times10^{-4}$.&lt;&#x2F;p&gt;
&lt;p&gt;O valor verdadeiro é da ordem de $10^{-10}$. Chernoff é conservador, mas dá a ordem de grandeza certa; Chebyshev erra por seis ordens de grandeza. A lição: use a desigualdade mais forte cujas hipóteses você consiga satisfazer.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Tabelas hash.&lt;&#x2F;strong&gt; Concentração garante que nenhuma lista fica longa demais.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Balanceamento de carga.&lt;&#x2F;strong&gt; A estratégia de &quot;duas escolhas aleatórias&quot; reduz a carga máxima de $\Theta(\log n&#x2F;\log\log n)$ para $\Theta(\log\log n)$ — uma melhora dramática com uma mudança mínima.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Esboços e amostragem.&lt;&#x2F;strong&gt; Count-Min Sketch e HyperLogLog têm garantias de erro derivadas de concentração.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; Limites de generalização (PAC) são desigualdades de concentração aplicadas ao erro empírico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sistemas distribuídos.&lt;&#x2F;strong&gt; Backoff exponencial com jitter; escolha aleatória de líder.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aplicar Chernoff sem independência.&lt;&#x2F;strong&gt; A hipótese é essencial; para variáveis dependentes existem variantes (Azuma, McDiarmid) com condições próprias.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir Las Vegas com Monte Carlo.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar gerador previsível&lt;&#x2F;strong&gt; em contexto adversarial, anulando a proteção.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer que &quot;com alta probabilidade&quot; não é &quot;sempre&quot;.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Não fixar semente&lt;&#x2F;strong&gt; e obter experimentos irreprodutíveis.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Mitzenmacher e Upfal, capítulos 4 e 5 — Chernoff e o método probabilístico, com aplicações a balanceamento de carga.&lt;&#x2F;li&gt;
&lt;li&gt;Motwani e Raghavan — a referência clássica de algoritmos aleatorizados.&lt;&#x2F;li&gt;
&lt;li&gt;Vershynin, &lt;em&gt;High-Dimensional Probability&lt;&#x2F;em&gt; — concentração moderna aplicada a ciência de dados; gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Dubhashi e Panconesi, &lt;em&gt;Concentration of Measure for the Analysis of Randomized Algorithms&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-motwani1995&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Rajeev Motwani and Prabhakar Raghavan&lt;&#x2F;strong&gt; (1995). &lt;em&gt;Randomized Algorithms&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814075&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814075&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-vershynin2018&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Roman Vershynin&lt;&#x2F;strong&gt; (2018). &lt;em&gt;High-Dimensional Probability: An Introduction with Applications in Data Science&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;9781108231596&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;9781108231596&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Rajeev Motwani; Prabhakar Raghavan (1995). &lt;em&gt;Randomized Algorithms&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Roman Vershynin (2018). &lt;em&gt;High-Dimensional Probability: An Introduction with Applications in Data Science&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Distribuições de Probabilidade</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/distribuicoes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/distribuicoes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/distribuicoes/">&lt;h1 id=&quot;distribuicoes-de-probabilidade&quot;&gt;Distribuições de Probabilidade&lt;&#x2F;h1&gt;
&lt;p&gt;Distribuições são os modelos padronizados de aleatoriedade. Reconhecer qual delas se aplica a um problema costuma resolver metade dele.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;distribuicoes-discretas&quot;&gt;Distribuições discretas&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;bernoulli&quot;&gt;Bernoulli&lt;&#x2F;h3&gt;
&lt;p&gt;Um único experimento com dois resultados. Parâmetro $p$.&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X] = p, \qquad \operatorname{Var}(X) = p(1-p)$$&lt;&#x2F;p&gt;
&lt;p&gt;A variância é máxima em $p = 0{,}5$ — incerteza máxima quando os resultados são equiprováveis.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;binomial&quot;&gt;Binomial&lt;&#x2F;h3&gt;
&lt;p&gt;Número de sucessos em $n$ tentativas independentes.&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X=k) = \binom{n}{k}p^k(1-p)^{n-k}, \qquad E[X]=np, \qquad \operatorname{Var}(X)=np(1-p)$$&lt;&#x2F;p&gt;
&lt;p&gt;Modela: número de pacotes perdidos em $n$ envios, número de bits corrompidos, taxa de conversão em teste A&#x2F;B.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;geometrica&quot;&gt;Geométrica&lt;&#x2F;h3&gt;
&lt;p&gt;Número de tentativas até o primeiro sucesso.&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X=k) = (1-p)^{k-1}p, \qquad E[X] = \frac1p$$&lt;&#x2F;p&gt;
&lt;p&gt;Modela: número de tentativas até uma retransmissão dar certo, número de sondagens até achar posição livre em hash aberto.&lt;&#x2F;p&gt;
&lt;p&gt;É &lt;strong&gt;sem memória&lt;&#x2F;strong&gt;: já ter falhado 10 vezes não muda a distribuição do que falta. Essa propriedade é a razão de estratégias de repetição precisarem de recuo exponencial — sem ele, a espera não melhora.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;poisson&quot;&gt;Poisson&lt;&#x2F;h3&gt;
&lt;p&gt;Número de eventos num intervalo, com taxa média $\lambda$.&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X=k) = \frac{\lambda^k e^{-\lambda}}{k!}, \qquad E[X]=\operatorname{Var}(X)=\lambda$$&lt;&#x2F;p&gt;
&lt;p&gt;Modela: requisições por segundo, falhas por dia, chegadas numa fila. Surge como limite da binomial com $n$ grande e $p$ pequeno, $\lambda = np$.&lt;&#x2F;p&gt;
&lt;p&gt;A igualdade entre média e variância é um teste diagnóstico útil: se os dados têm variância muito maior que a média, o modelo de Poisson não serve (superdispersão), e a binomial negativa costuma ser a alternativa.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;distribuicoes-continuas&quot;&gt;Distribuições contínuas&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;uniforme&quot;&gt;Uniforme&lt;&#x2F;h3&gt;
&lt;p&gt;Densidade constante em $[a,b]$.&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X] = \frac{a+b}{2}, \qquad \operatorname{Var}(X) = \frac{(b-a)^2}{12}$$&lt;&#x2F;p&gt;
&lt;p&gt;É a saída dos geradores pseudoaleatórios e a base para gerar todas as outras distribuições.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;exponencial&quot;&gt;Exponencial&lt;&#x2F;h3&gt;
&lt;p&gt;Tempo até o próximo evento de um processo de Poisson.&lt;&#x2F;p&gt;
&lt;p&gt;$$f(x) = \lambda e^{-\lambda x}, \qquad E[X] = \frac1\lambda, \qquad \operatorname{Var}(X)=\frac{1}{\lambda^2}$$&lt;&#x2F;p&gt;
&lt;p&gt;Também &lt;strong&gt;sem memória&lt;&#x2F;strong&gt; — a versão contínua da geométrica. Modela tempo entre chegadas, tempo até falha de componente sem desgaste.&lt;&#x2F;p&gt;
&lt;p&gt;Cuidado: a ausência de memória frequentemente &lt;strong&gt;não&lt;&#x2F;strong&gt; descreve a realidade. Componentes reais envelhecem, e a distribuição de Weibull costuma ser mais adequada.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;normal&quot;&gt;Normal&lt;&#x2F;h3&gt;
&lt;p&gt;$$f(x) = \frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$&lt;&#x2F;p&gt;
&lt;p&gt;A distribuição mais importante, pelo &lt;strong&gt;teorema central do limite&lt;&#x2F;strong&gt;: a soma de muitas variáveis independentes com variância finita tende à normal, qualquer que seja a distribuição original.&lt;&#x2F;p&gt;
&lt;p&gt;A regra prática de dispersão: cerca de $68%$ da massa em $\mu \pm \sigma$, $95%$ em $\mu\pm2\sigma$ e $99{,}7%$ em $\mu\pm3\sigma$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Cuidado com o abuso.&lt;&#x2F;strong&gt; Latências de rede, tamanhos de arquivo e popularidade de itens &lt;strong&gt;não&lt;&#x2F;strong&gt; são normais — são fortemente assimétricas, com cauda pesada. Reportar média e desvio padrão de latência é enganoso; é por isso que a prática correta é reportar percentis (p50, p95, p99).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tabela-de-referencia&quot;&gt;Tabela de referência&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Distribuição&lt;&#x2F;th&gt;&lt;th&gt;Modela&lt;&#x2F;th&gt;&lt;th&gt;$E[X]$&lt;&#x2F;th&gt;&lt;th&gt;$\operatorname{Var}(X)$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Bernoulli($p$)&lt;&#x2F;td&gt;&lt;td&gt;Um ensaio&lt;&#x2F;td&gt;&lt;td&gt;$p$&lt;&#x2F;td&gt;&lt;td&gt;$p(1-p)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Binomial($n,p$)&lt;&#x2F;td&gt;&lt;td&gt;Sucessos em $n$&lt;&#x2F;td&gt;&lt;td&gt;$np$&lt;&#x2F;td&gt;&lt;td&gt;$np(1-p)$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Geométrica($p$)&lt;&#x2F;td&gt;&lt;td&gt;Tentativas até sucesso&lt;&#x2F;td&gt;&lt;td&gt;$1&#x2F;p$&lt;&#x2F;td&gt;&lt;td&gt;$(1-p)&#x2F;p^2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Poisson($\lambda$)&lt;&#x2F;td&gt;&lt;td&gt;Eventos por intervalo&lt;&#x2F;td&gt;&lt;td&gt;$\lambda$&lt;&#x2F;td&gt;&lt;td&gt;$\lambda$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Uniforme($a,b$)&lt;&#x2F;td&gt;&lt;td&gt;Sem preferência&lt;&#x2F;td&gt;&lt;td&gt;$(a+b)&#x2F;2$&lt;&#x2F;td&gt;&lt;td&gt;$(b-a)^2&#x2F;12$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Exponencial($\lambda$)&lt;&#x2F;td&gt;&lt;td&gt;Tempo entre eventos&lt;&#x2F;td&gt;&lt;td&gt;$1&#x2F;\lambda$&lt;&#x2F;td&gt;&lt;td&gt;$1&#x2F;\lambda^2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Normal($\mu,\sigma^2$)&lt;&#x2F;td&gt;&lt;td&gt;Soma de muitos efeitos&lt;&#x2F;td&gt;&lt;td&gt;$\mu$&lt;&#x2F;td&gt;&lt;td&gt;$\sigma^2$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;distribuicoes-de-cauda-pesada&quot;&gt;Distribuições de cauda pesada&lt;&#x2F;h2&gt;
&lt;p&gt;Muitos fenômenos computacionais seguem &lt;strong&gt;lei de potência&lt;&#x2F;strong&gt;: $P(X &amp;gt; x) \propto x^{-\alpha}$.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplos: número de seguidores numa rede social, tamanho de arquivos, frequência de palavras (lei de Zipf), grau de vértices na web.&lt;&#x2F;p&gt;
&lt;p&gt;Consequências práticas que quebram a intuição formada com a normal:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;média pode não ser representativa&lt;&#x2F;strong&gt; e, para $\alpha \le 2$, a variância é infinita.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Valores extremos são comuns&lt;&#x2F;strong&gt;, não raros.&lt;&#x2F;li&gt;
&lt;li&gt;O caso médio não protege contra o pior caso.&lt;&#x2F;li&gt;
&lt;li&gt;Dimensionar por média é receita para saturação.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Ignorar isso é a origem de muitas surpresas em produção: um cache dimensionado pela média de tamanho de objeto estoura quando chega o objeto da cauda.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gerando-amostras&quot;&gt;Gerando amostras&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;método da transformada inversa&lt;&#x2F;strong&gt;: se $U \sim \text{Uniforme}(0,1)$ e $F$ é a acumulada desejada, então $F^{-1}(U)$ tem a distribuição desejada.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;rng&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.random.default_rng(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;42&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# exponencial por transformada inversa&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;u&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rng.random(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; = -&lt;&#x2F;span&gt;&lt;span&gt;np.log(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; u)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; lam&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# na prática, use a biblioteca&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rng.exponential(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; lam,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1000&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sempre fixe a semente em experimentos que precisam ser reproduzíveis, e nunca use o gerador padrão (&lt;code&gt;random&lt;&#x2F;code&gt;) para fins criptográficos — para isso existe &lt;code&gt;secrets&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Um servidor recebe em média 3 requisições por segundo (Poisson). Qual a probabilidade de receber exatamente 5 num dado segundo?&lt;&#x2F;p&gt;
&lt;p&gt;$$P(X=5) = \frac{3^5 e^{-3}}{5!} = \frac{243 \cdot 0{,}0498}{120} \approx 0{,}1008$$&lt;&#x2F;p&gt;
&lt;p&gt;E a probabilidade de receber mais de 5? Somando de 0 a 5 e complementando, chega-se a cerca de $8{,}4%$ — o tipo de conta que dimensiona capacidade.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supor normalidade&lt;&#x2F;strong&gt; em dados assimétricos, especialmente latências.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Reportar média de latência&lt;&#x2F;strong&gt; em vez de percentis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir densidade com probabilidade.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar gerador não criptográfico&lt;&#x2F;strong&gt; para tokens e senhas.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar caudas pesadas&lt;&#x2F;strong&gt; ao dimensionar capacidade.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar o teorema central do limite&lt;&#x2F;strong&gt; com poucas amostras ou variância infinita.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Ross, capítulos 4 a 6 — catálogo completo de distribuições.&lt;&#x2F;li&gt;
&lt;li&gt;Mitzenmacher e Upfal, capítulos 2 a 4 — as distribuições que aparecem em análise de algoritmos.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do &lt;code&gt;numpy.random&lt;&#x2F;code&gt; e do &lt;code&gt;scipy.stats&lt;&#x2F;code&gt; — parametrizações e convenções, que variam entre bibliotecas.&lt;&#x2F;li&gt;
&lt;li&gt;Gil Tene, palestras sobre medição de latência — por que média e desvio padrão enganam.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-ross2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon M. Ross&lt;&#x2F;strong&gt; (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781292024929&quot; rel=&quot;noopener&quot;&gt;9781292024929&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Sheldon M. Ross (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Espaço Amostral e Eventos</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/espaco-amostral-e-eventos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/espaco-amostral-e-eventos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/espaco-amostral-e-eventos/">&lt;h1 id=&quot;espaco-amostral-e-eventos&quot;&gt;Espaço Amostral e Eventos&lt;&#x2F;h1&gt;
&lt;p&gt;Toda modelagem probabilística começa com uma pergunta que costuma ser pulada: &lt;strong&gt;qual é o espaço amostral?&lt;&#x2F;strong&gt; Erros de raciocínio probabilístico quase sempre vêm de responder mal a essa pergunta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicoes&quot;&gt;Definições&lt;&#x2F;h2&gt;
&lt;p&gt;O &lt;strong&gt;espaço amostral&lt;&#x2F;strong&gt; $\Omega$ é o conjunto de todos os resultados possíveis. Um &lt;strong&gt;evento&lt;&#x2F;strong&gt; é um subconjunto de $\Omega$.&lt;&#x2F;p&gt;
&lt;p&gt;Para um dado, $\Omega = {1,2,3,4,5,6}$ e &quot;sair par&quot; é o evento ${2,4,6}$.&lt;&#x2F;p&gt;
&lt;p&gt;Como eventos são conjuntos, as operações são as de conjuntos: $A \cup B$ é &quot;$A$ ou $B$&quot;, $A \cap B$ é &quot;$A$ e $B$&quot;, $\overline{A}$ é &quot;não $A$&quot;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;axiomas-de-kolmogorov&quot;&gt;Axiomas de Kolmogorov&lt;&#x2F;h2&gt;
&lt;p&gt;Uma probabilidade é uma função $P$ dos eventos em $[0,1]$ com:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;$P(A) \ge 0$&lt;&#x2F;li&gt;
&lt;li&gt;$P(\Omega) = 1$&lt;&#x2F;li&gt;
&lt;li&gt;Se $A_1, A_2, \dots$ são disjuntos, $P(\bigcup A_i) = \sum P(A_i)$&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Desses três axiomas decorre tudo o mais:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(\overline{A}) = 1 - P(A)$$
$$P(A \cup B) = P(A) + P(B) - P(A \cap B)$$
$$A \subseteq B \implies P(A) \le P(B)$$&lt;&#x2F;p&gt;
&lt;p&gt;A segunda é a inclusão-exclusão, e o erro de esquecer o termo subtraído é o mais frequente em contas rápidas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;probabilidade-uniforme&quot;&gt;Probabilidade uniforme&lt;&#x2F;h2&gt;
&lt;p&gt;Quando todos os resultados são igualmente prováveis e $\Omega$ é finito:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(A) = \frac{|A|}{|\Omega|}$$&lt;&#x2F;p&gt;
&lt;p&gt;Aqui probabilidade vira &lt;strong&gt;contagem&lt;&#x2F;strong&gt; — e é por isso que combinatória e probabilidade andam juntas. A dificuldade nunca está na divisão; está em contar corretamente e em garantir que a hipótese de equiprobabilidade realmente vale.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;o-cuidado-com-a-modelagem&quot;&gt;O cuidado com a modelagem&lt;&#x2F;h2&gt;
&lt;p&gt;Um exemplo clássico: jogam-se duas moedas. Qual a probabilidade de sair uma cara e uma coroa?&lt;&#x2F;p&gt;
&lt;p&gt;Se o espaço amostral for tomado como ${$duas caras, duas coroas, uma de cada$}$, a resposta pareceria $1&#x2F;3$. Está errado. O espaço correto é ${CC, CK, KC, KK}$, com quatro resultados equiprováveis, e &quot;uma de cada&quot; corresponde a &lt;strong&gt;dois&lt;&#x2F;strong&gt; deles — logo $1&#x2F;2$.&lt;&#x2F;p&gt;
&lt;p&gt;A lição: equiprobabilidade não é propriedade do enunciado, é uma hipótese sobre o mecanismo físico. Resultados agregados raramente são equiprováveis.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limite-superior-da-uniao&quot;&gt;Limite superior da união&lt;&#x2F;h2&gt;
&lt;p&gt;$$P\left(\bigcup_i A_i\right) \le \sum_i P(A_i)$$&lt;&#x2F;p&gt;
&lt;p&gt;Simples e extremamente útil. É a ferramenta padrão para mostrar que &quot;nada dá errado com alta probabilidade&quot;: limita-se a probabilidade de cada falha individual e soma-se.&lt;&#x2F;p&gt;
&lt;p&gt;Exemplo: se um algoritmo aleatorizado executa $n$ etapas e cada uma falha com probabilidade no máximo $1&#x2F;n^2$, a probabilidade de alguma falhar é no máximo $n \cdot 1&#x2F;n^2 = 1&#x2F;n$ — que tende a zero. Esse argumento aparece em quase toda análise de algoritmo aleatorizado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;independencia&quot;&gt;Independência&lt;&#x2F;h2&gt;
&lt;p&gt;Dois eventos são &lt;strong&gt;independentes&lt;&#x2F;strong&gt; quando&lt;&#x2F;p&gt;
&lt;p&gt;$$P(A \cap B) = P(A)P(B)$$&lt;&#x2F;p&gt;
&lt;p&gt;Independência é uma &lt;strong&gt;hipótese de modelagem&lt;&#x2F;strong&gt;, não algo que se lê do enunciado. E cuidado: independência dois a dois não implica independência mútua.&lt;&#x2F;p&gt;
&lt;p&gt;Em engenharia, supor independência indevidamente é uma fonte real de subestimação de risco. Dois servidores no mesmo rack não falham independentemente; dois discos do mesmo lote também não. A probabilidade conjunta de falha é muito maior que o produto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Num baralho de 52 cartas, qual a probabilidade de tirar duas cartas e ambas serem de copas?&lt;&#x2F;p&gt;
&lt;p&gt;$$P = \frac{\binom{13}{2}}{\binom{52}{2}} = \frac{78}{1326} = \frac{1}{17} \approx 0{,}0588$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou, pela regra do produto com condicionamento: $\frac{13}{52}\cdot\frac{12}{51} = \frac{1}{4}\cdot\frac{4}{17} = \frac{1}{17}$. Os dois caminhos coincidem, como devem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Análise de caso médio.&lt;&#x2F;strong&gt; Supõe uma distribuição sobre as entradas — e a conclusão só vale se essa distribuição for realista.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Algoritmos aleatorizados.&lt;&#x2F;strong&gt; Quicksort com pivô aleatório tem $O(n\log n)$ esperado &lt;strong&gt;para qualquer entrada&lt;&#x2F;strong&gt;, porque a aleatoriedade está no algoritmo e não na entrada. Essa é uma garantia bem mais forte que o caso médio.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tabelas hash.&lt;&#x2F;strong&gt; A análise de colisões é probabilística; hashing universal escolhe a função aleatoriamente para evitar entradas adversariais.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Estruturas probabilísticas.&lt;&#x2F;strong&gt; Filtros de Bloom, HyperLogLog e skip lists trocam exatidão por espaço ou simplicidade, com garantias probabilísticas explícitas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Confiabilidade.&lt;&#x2F;strong&gt; Cálculo de disponibilidade de sistemas com redundância — desde que as hipóteses de independência sejam honestas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Espaço amostral mal definido&lt;&#x2F;strong&gt;, tipicamente agregando resultados não equiprováveis.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar probabilidades de eventos não disjuntos.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Supor independência&lt;&#x2F;strong&gt; sem justificativa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir &quot;improvável&quot; com &quot;impossível&quot;.&lt;&#x2F;strong&gt; Um evento de probabilidade $10^{-6}$ acontece cerca de uma vez a cada milhão de execuções — o que num sistema de alto volume significa várias vezes por dia.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Ross, &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt; — introdução sólida com muitos exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Mitzenmacher e Upfal, &lt;em&gt;Probability and Computing&lt;&#x2F;em&gt;, capítulo 1 — probabilidade orientada a computação desde a primeira página.&lt;&#x2F;li&gt;
&lt;li&gt;Grinstead e Snell, &lt;em&gt;Introduction to Probability&lt;&#x2F;em&gt; — livre e gratuito, com boa cobertura de simulação.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-ross2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon M. Ross&lt;&#x2F;strong&gt; (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781292024929&quot; rel=&quot;noopener&quot;&gt;9781292024929&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Sheldon M. Ross (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Probabilidade Condicional e Bayes</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/probabilidade-condicional-e-bayes/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/probabilidade-condicional-e-bayes/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/probabilidade-condicional-e-bayes/">&lt;h1 id=&quot;probabilidade-condicional-e-bayes&quot;&gt;Probabilidade Condicional e Bayes&lt;&#x2F;h1&gt;
&lt;p&gt;Probabilidade condicional é o que permite &lt;strong&gt;atualizar crenças diante de evidência&lt;&#x2F;strong&gt;. É a ideia mais aplicada da probabilidade em computação, e também a que produz os erros de raciocínio mais custosos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;$$P(A \mid B) = \frac{P(A \cap B)}{P(B)}, \qquad P(B) &amp;gt; 0$$&lt;&#x2F;p&gt;
&lt;p&gt;Condicionar é &lt;strong&gt;restringir o espaço amostral&lt;&#x2F;strong&gt; a $B$ e renormalizar.&lt;&#x2F;p&gt;
&lt;p&gt;Daí a &lt;strong&gt;regra do produto&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(A \cap B) = P(A \mid B)P(B) = P(B \mid A)P(A)$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-de-bayes&quot;&gt;Teorema de Bayes&lt;&#x2F;h2&gt;
&lt;p&gt;Igualando as duas formas da regra do produto:&lt;&#x2F;p&gt;
&lt;div class=&quot;katex-display&quot;&gt;P(A \mid B) = \frac{P(B \mid A)\,P(A)}{P(B)}&lt;&#x2F;div&gt;
&lt;p&gt;Com a &lt;strong&gt;lei da probabilidade total&lt;&#x2F;strong&gt; no denominador:&lt;&#x2F;p&gt;
&lt;p&gt;$$P(B) = \sum_i P(B \mid A_i)P(A_i)$$&lt;&#x2F;p&gt;
&lt;p&gt;A leitura em termos de inferência:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Termo&lt;&#x2F;th&gt;&lt;th&gt;Nome&lt;&#x2F;th&gt;&lt;th&gt;Significado&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$P(A)$&lt;&#x2F;td&gt;&lt;td&gt;Priori&lt;&#x2F;td&gt;&lt;td&gt;Crença antes da evidência&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$P(B\mid A)$&lt;&#x2F;td&gt;&lt;td&gt;Verossimilhança&lt;&#x2F;td&gt;&lt;td&gt;Quão bem $A$ explica a evidência&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$P(A\mid B)$&lt;&#x2F;td&gt;&lt;td&gt;Posteriori&lt;&#x2F;td&gt;&lt;td&gt;Crença após a evidência&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$P(B)$&lt;&#x2F;td&gt;&lt;td&gt;Evidência&lt;&#x2F;td&gt;&lt;td&gt;Constante de normalização&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;o-problema-da-taxa-base&quot;&gt;O problema da taxa-base&lt;&#x2F;h2&gt;
&lt;p&gt;Este é o ponto em que a intuição falha de forma mais espetacular, e vale trabalhar com números.&lt;&#x2F;p&gt;
&lt;p&gt;Um teste para uma doença tem sensibilidade de $99%$ ($P(+\mid D) = 0{,}99$) e especificidade de $99%$ ($P(-\mid \overline D) = 0{,}99$). A doença afeta $0{,}1%$ da população. Uma pessoa testa positivo. Qual a probabilidade de ela estar doente?&lt;&#x2F;p&gt;
&lt;p&gt;$$P(+) = P(+\mid D)P(D) + P(+\mid\overline D)P(\overline D) = 0{,}99 \cdot 0{,}001 + 0{,}01 \cdot 0{,}999 = 0{,}01098$$&lt;&#x2F;p&gt;
&lt;p&gt;$$P(D\mid+) = \frac{0{,}99 \cdot 0{,}001}{0{,}01098} \approx 0{,}090$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Cerca de 9%.&lt;&#x2F;strong&gt; A maioria das pessoas — incluindo profissionais de saúde, em estudos conhecidos — estima algo próximo de 99%.&lt;&#x2F;p&gt;
&lt;p&gt;A razão é que a &lt;strong&gt;priori é muito baixa&lt;&#x2F;strong&gt;: num grupo de 100 mil pessoas, cerca de 100 têm a doença (99 detectadas) e 99.900 não têm (999 falsos positivos). Entre os 1.098 positivos, apenas 99 são doentes.&lt;&#x2F;p&gt;
&lt;p&gt;Esse fenômeno tem consequência direta em computação. Um detector de intrusão com 1% de falsos positivos monitorando um milhão de eventos legítimos por dia gera 10 mil alarmes falsos — e afoga os verdadeiros. É a razão pela qual sistemas de segurança e monitoramento sofrem de fadiga de alerta, e por que a métrica relevante é a &lt;strong&gt;precisão&lt;&#x2F;strong&gt;, não a taxa de acerto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;independencia-condicional&quot;&gt;Independência condicional&lt;&#x2F;h2&gt;
&lt;p&gt;$$P(A \cap B \mid C) = P(A\mid C)P(B\mid C)$$&lt;&#x2F;p&gt;
&lt;p&gt;$A$ e $B$ podem ser dependentes e se tornarem independentes ao condicionar em $C$ — ou o contrário.&lt;&#x2F;p&gt;
&lt;p&gt;Essa é a hipótese que dá nome ao classificador &lt;strong&gt;Naive Bayes&lt;&#x2F;strong&gt;: supõe-se que os atributos são condicionalmente independentes dada a classe.&lt;&#x2F;p&gt;
&lt;p&gt;$$P(C\mid x_1,\dots,x_n) \propto P(C)\prod_i P(x_i\mid C)$$&lt;&#x2F;p&gt;
&lt;p&gt;A hipótese é quase sempre falsa — palavras num texto não são independentes. Ainda assim o classificador funciona surpreendentemente bem, porque para &lt;strong&gt;decidir a classe&lt;&#x2F;strong&gt; basta que a ordenação das probabilidades esteja certa, mesmo que os valores estejam errados.&lt;&#x2F;p&gt;
&lt;p&gt;Independência condicional é também o que redes bayesianas codificam graficamente, e o que torna a inferência tratável.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cuidados-de-implementacao&quot;&gt;Cuidados de implementação&lt;&#x2F;h2&gt;
&lt;p&gt;Multiplicar muitas probabilidades pequenas causa &lt;strong&gt;subfluxo&lt;&#x2F;strong&gt; — o resultado vira zero. A solução padrão é trabalhar em log:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; numpy&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; as&lt;&#x2F;span&gt;&lt;span&gt; np&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# em vez de: prod(p)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;log_prob&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; np.sum(np.log(p))&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# e para somar probabilidades em log, use log-sum-exp:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; scipy.special&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; logsumexp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;total&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; logsumexp(log_probs)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Outro cuidado: se uma categoria nunca apareceu no treino, $P(x_i\mid C) = 0$ zera o produto inteiro. A correção padrão é a &lt;strong&gt;suavização de Laplace&lt;&#x2F;strong&gt;, somando uma contagem fictícia a cada categoria.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Duas urnas: a urna 1 tem 2 bolas brancas e 3 pretas; a urna 2 tem 4 brancas e 1 preta. Escolhe-se uma urna ao acaso e tira-se uma bola branca. Qual a probabilidade de ser da urna 1?&lt;&#x2F;p&gt;
&lt;p&gt;$$P(B) = \frac12\cdot\frac25 + \frac12\cdot\frac45 = \frac15 + \frac25 = \frac35$$&lt;&#x2F;p&gt;
&lt;p&gt;$$P(U_1\mid B) = \frac{\frac12\cdot\frac25}{\frac35} = \frac{1&#x2F;5}{3&#x2F;5} = \frac13$$&lt;&#x2F;p&gt;
&lt;p&gt;A evidência (bola branca) deslocou a crença de $1&#x2F;2$ para $1&#x2F;3$, o que faz sentido: a urna 2 tem mais brancas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Filtros de spam.&lt;&#x2F;strong&gt; O primeiro grande sucesso prático de Naive Bayes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Diagnóstico e monitoramento.&lt;&#x2F;strong&gt; Alarmes precisam ser interpretados com a taxa-base em mente.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Localização robótica.&lt;&#x2F;strong&gt; Filtros de Kalman e de partículas são atualizações bayesianas sucessivas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Testes A&#x2F;B bayesianos.&lt;&#x2F;strong&gt; Atualizam a crença sobre a taxa de conversão a cada observação, permitindo parada adaptativa.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Segurança.&lt;&#x2F;strong&gt; Avaliação de risco de fraude combina priori (taxa de fraude) com verossimilhança (sinais da transação).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir $P(A\mid B)$ com $P(B\mid A)$.&lt;&#x2F;strong&gt; Este é o erro do promotor: &quot;a probabilidade de a evidência aparecer se a pessoa fosse inocente é 1 em um milhão&quot; não é &quot;a probabilidade de ela ser inocente é 1 em um milhão&quot;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Ignorar a taxa-base.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar Bayes com priori mal escolhida&lt;&#x2F;strong&gt; e apresentar o resultado como objetivo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multiplicar probabilidades sem log&lt;&#x2F;strong&gt;, causando subfluxo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a suavização&lt;&#x2F;strong&gt; e zerar a posteriori.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Ross, capítulo 3 — probabilidade condicional com muitos exercícios.&lt;&#x2F;li&gt;
&lt;li&gt;Mitzenmacher e Upfal, capítulo 1 — Bayes aplicado a análise de algoritmos.&lt;&#x2F;li&gt;
&lt;li&gt;Gelman et al., &lt;em&gt;Bayesian Data Analysis&lt;&#x2F;em&gt; — a referência moderna de inferência bayesiana; gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Kahneman, &lt;em&gt;Rápido e Devagar&lt;&#x2F;em&gt; — por que a taxa-base é tão sistematicamente ignorada.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-ross2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon M. Ross&lt;&#x2F;strong&gt; (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781292024929&quot; rel=&quot;noopener&quot;&gt;9781292024929&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Sheldon M. Ross (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Variáveis Aleatórias e Esperança</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/variaveis-aleatorias-e-esperanca/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/variaveis-aleatorias-e-esperanca/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/probabilidade/variaveis-aleatorias-e-esperanca/">&lt;h1 id=&quot;variaveis-aleatorias-e-esperanca&quot;&gt;Variáveis Aleatórias e Esperança&lt;&#x2F;h1&gt;
&lt;p&gt;Uma &lt;strong&gt;variável aleatória&lt;&#x2F;strong&gt; é uma função do espaço amostral nos reais. Ela traduz resultados qualitativos em números, permitindo calcular médias e dispersões.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao&quot;&gt;Definição&lt;&#x2F;h2&gt;
&lt;p&gt;$X: \Omega \to \mathbb{R}$. Para o lançamento de dois dados, $X$ pode ser a soma, o máximo ou a diferença — variáveis diferentes sobre o mesmo espaço.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Discreta&lt;&#x2F;strong&gt;: assume valores num conjunto enumerável, descrita pela função de massa $p(x) = P(X=x)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Contínua&lt;&#x2F;strong&gt;: descrita por densidade $f$, com $P(a \le X \le b) = \int_a^b f$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;esperanca&quot;&gt;Esperança&lt;&#x2F;h2&gt;
&lt;p&gt;$$E[X] = \sum_x x,p(x) \qquad \text{ou} \qquad E[X] = \int x f(x),dx$$&lt;&#x2F;p&gt;
&lt;p&gt;É a média ponderada pelos pesos de probabilidade — o valor em torno do qual a média amostral se estabiliza quando o número de repetições cresce (lei dos grandes números).&lt;&#x2F;p&gt;
&lt;p&gt;Nem toda variável tem esperança finita. A distribuição de Cauchy é o exemplo clássico, e o paradoxo de São Petersburgo é a versão discreta.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;linearidade-da-esperanca&quot;&gt;Linearidade da esperança&lt;&#x2F;h2&gt;
&lt;p&gt;$$E[aX + bY] = aE[X] + bE[Y]$$&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Vale sempre, mesmo com $X$ e $Y$ dependentes.&lt;&#x2F;strong&gt; Esta é a propriedade mais útil de toda a probabilidade aplicada, e a que resolve problemas que pareceriam intratáveis.&lt;&#x2F;p&gt;
&lt;p&gt;Para produtos, porém, a igualdade $E[XY] = E[X]E[Y]$ exige &lt;strong&gt;independência&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-tecnica-dos-indicadores&quot;&gt;A técnica dos indicadores&lt;&#x2F;h2&gt;
&lt;p&gt;Combinar linearidade com variáveis indicadoras é o truque mais produtivo da análise de algoritmos.&lt;&#x2F;p&gt;
&lt;p&gt;Uma &lt;strong&gt;indicadora&lt;&#x2F;strong&gt; $I_A$ vale 1 se o evento $A$ ocorre e 0 caso contrário. Então $E[I_A] = P(A)$.&lt;&#x2F;p&gt;
&lt;p&gt;Para contar ocorrências, escreva o total como soma de indicadoras e aplique linearidade. Cada probabilidade individual costuma ser fácil, e a dependência entre elas &lt;strong&gt;não importa&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Exemplo: pontos fixos de uma permutação aleatória.&lt;&#x2F;strong&gt; Seja $X$ o número de elementos que ficam na posição original. Escreva $X = \sum_{i=1}^n I_i$, com $I_i$ indicando que o elemento $i$ ficou no lugar. Como $P(I_i = 1) = 1&#x2F;n$:&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X] = \sum_{i=1}^n \frac1n = 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Independentemente de $n$, espera-se &lt;strong&gt;exatamente um&lt;&#x2F;strong&gt; ponto fixo. As indicadoras são claramente dependentes, e isso não afeta o cálculo.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Exemplo: colecionador de cupons.&lt;&#x2F;strong&gt; Para coletar todos os $n$ cupons, o tempo esperado é&lt;&#x2F;p&gt;
&lt;p&gt;$$E[T] = n\sum_{k=1}^{n}\frac1k \approx n\ln n$$&lt;&#x2F;p&gt;
&lt;p&gt;decompondo o tempo total na soma dos tempos de espera por cada cupom novo. É o resultado que dimensiona testes aleatórios e amostragem por cobertura.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;variancia-e-desvio-padrao&quot;&gt;Variância e desvio padrão&lt;&#x2F;h2&gt;
&lt;p&gt;$$\operatorname{Var}(X) = E[(X-\mu)^2] = E[X^2] - (E[X])^2$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\sigma = \sqrt{\operatorname{Var}(X)}$$&lt;&#x2F;p&gt;
&lt;p&gt;Propriedades:&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{Var}(aX+b) = a^2\operatorname{Var}(X)$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{Var}(X+Y) = \operatorname{Var}(X) + \operatorname{Var}(Y) \quad \text{se independentes}$$&lt;&#x2F;p&gt;
&lt;p&gt;A segunda &lt;strong&gt;exige independência&lt;&#x2F;strong&gt;, ao contrário da esperança. No caso geral aparece o termo de covariância:&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{Var}(X+Y) = \operatorname{Var}(X)+\operatorname{Var}(Y)+2\operatorname{Cov}(X,Y)$$&lt;&#x2F;p&gt;
&lt;p&gt;A fórmula $E[X^2] - (E[X])^2$ é matematicamente correta e &lt;strong&gt;numericamente perigosa&lt;&#x2F;strong&gt;: subtrair dois números grandes e próximos causa cancelamento catastrófico. Para calcular variância em código, use o algoritmo de Welford, que atualiza incrementalmente:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; welford&lt;&#x2F;span&gt;&lt;span&gt;(dados):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    media&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    m2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0.0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; dados:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        delta&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; media&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        media&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; delta&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        m2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; delta&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; (x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; media)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; media, m2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&lt;&#x2F;span&gt;&lt;span&gt; (n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;covariancia-e-correlacao&quot;&gt;Covariância e correlação&lt;&#x2F;h2&gt;
&lt;p&gt;$$\operatorname{Cov}(X,Y) = E[(X-\mu_X)(Y-\mu_Y)]$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\rho = \frac{\operatorname{Cov}(X,Y)}{\sigma_X\sigma_Y} \in [-1,1]$$&lt;&#x2F;p&gt;
&lt;p&gt;Independência implica covariância nula; &lt;strong&gt;a recíproca é falsa&lt;&#x2F;strong&gt;. Se $X$ é simétrica em torno de zero e $Y = X^2$, a covariância é zero e as variáveis são fortemente dependentes. Correlação mede apenas relação &lt;strong&gt;linear&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Lançamento de um dado justo:&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X] = \frac{1+2+3+4+5+6}{6} = 3{,}5$$&lt;&#x2F;p&gt;
&lt;p&gt;$$E[X^2] = \frac{1+4+9+16+25+36}{6} = \frac{91}{6}$$&lt;&#x2F;p&gt;
&lt;p&gt;$$\operatorname{Var}(X) = \frac{91}{6} - 3{,}5^2 = 15{,}1\overline{6} - 12{,}25 \approx 2{,}92$$&lt;&#x2F;p&gt;
&lt;p&gt;Para a soma de dois dados independentes: $E = 7$ e $\operatorname{Var} \approx 5{,}83$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Análise de algoritmos.&lt;&#x2F;strong&gt; O número esperado de comparações do quicksort sai de indicadoras: $I_{ij}$ indica se os elementos de posições $i$ e $j$ são comparados, com $P = 2&#x2F;(j-i+1)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Tabelas hash.&lt;&#x2F;strong&gt; Comprimento esperado de lista, número esperado de colisões.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Dimensionamento.&lt;&#x2F;strong&gt; Filas, taxas de chegada e tempos de espera são análises de esperança.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Aprendizado de máquina.&lt;&#x2F;strong&gt; A decomposição viés-variância do erro de generalização é literalmente esta variância.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Amostragem.&lt;&#x2F;strong&gt; Estimadores não viesados são aqueles cuja esperança é o parâmetro verdadeiro; a variância determina quantas amostras são necessárias.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exigir independência para a linearidade da esperança.&lt;&#x2F;strong&gt; Não é necessária.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Somar variâncias de variáveis dependentes.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Concluir independência a partir de correlação nula.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular variância pela fórmula ingênua&lt;&#x2F;strong&gt; e sofrer cancelamento.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir a média amostral com a esperança.&lt;&#x2F;strong&gt; Uma é estatística, a outra é parâmetro.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Mitzenmacher e Upfal, capítulos 2 e 3 — esperança e a técnica dos indicadores aplicadas a algoritmos.&lt;&#x2F;li&gt;
&lt;li&gt;Ross, capítulos 4 a 7 — variáveis aleatórias com muitos exemplos.&lt;&#x2F;li&gt;
&lt;li&gt;Motwani e Raghavan, capítulo 3 — momentos e desvios em algoritmos aleatorizados.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-mitzenmacher2017&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Michael Mitzenmacher and Eli Upfal&lt;&#x2F;strong&gt; (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781107154889&quot; rel=&quot;noopener&quot;&gt;9781107154889&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-ross2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Sheldon M. Ross&lt;&#x2F;strong&gt; (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781292024929&quot; rel=&quot;noopener&quot;&gt;9781292024929&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-motwani1995&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Rajeev Motwani and Prabhakar Raghavan&lt;&#x2F;strong&gt; (1995). &lt;em&gt;Randomized Algorithms&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814075&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814075&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Michael Mitzenmacher; Eli Upfal (2017). &lt;em&gt;Probability and Computing: Randomization and Probabilistic Techniques&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Sheldon M. Ross (2014). &lt;em&gt;A First Course in Probability&lt;&#x2F;em&gt;. Pearson.&lt;&#x2F;li&gt;
&lt;li&gt;Rajeev Motwani; Prabhakar Raghavan (1995). &lt;em&gt;Randomized Algorithms&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Aritmética Modular</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/aritmetica-modular/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/aritmetica-modular/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/aritmetica-modular/">&lt;h1 id=&quot;aritmetica-modular&quot;&gt;Aritmética Modular&lt;&#x2F;h1&gt;
&lt;p&gt;Aritmética modular é a aritmética do relógio: depois de 12 vem 1 de novo. Formalmente, é a aritmética das classes de equivalência módulo $n$ — e é o ambiente natural de tudo que envolve ciclos, tabelas hash e criptografia.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;congruencia&quot;&gt;Congruência&lt;&#x2F;h2&gt;
&lt;p&gt;$$a \equiv b \pmod n \iff n \mid (a-b)$$&lt;&#x2F;p&gt;
&lt;p&gt;Esta é uma &lt;strong&gt;relação de equivalência&lt;&#x2F;strong&gt;, e portanto particiona $\mathbb{Z}$ em $n$ classes residuais. O conjunto delas é $\mathbb{Z}_n = {0,1,\dots,n-1}$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;propriedades-operatorias&quot;&gt;Propriedades operatórias&lt;&#x2F;h2&gt;
&lt;p&gt;Congruências podem ser somadas e multiplicadas:&lt;&#x2F;p&gt;
&lt;p&gt;$$a\equiv b,; c\equiv d \implies a+c \equiv b+d, \quad ac \equiv bd \pmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;Consequência prática essencial: &lt;strong&gt;é possível reduzir a cada passo&lt;&#x2F;strong&gt;. Isso é o que impede o estouro numérico em cálculos modulares longos:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# ruim: o produto cresce sem controle&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; valores:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *=&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %=&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# bom: reduz a cada passo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;for&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; valores:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; x)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Divisão não funciona diretamente.&lt;&#x2F;strong&gt; De $ac \equiv bc \pmod n$ &lt;strong&gt;não&lt;&#x2F;strong&gt; se conclui $a \equiv b$ — a menos que $\gcd(c,n)=1$. Para &quot;dividir&quot;, multiplique pelo inverso modular, que só existe nessa condição.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;grupo-multiplicativo&quot;&gt;Grupo multiplicativo&lt;&#x2F;h2&gt;
&lt;p&gt;Os elementos invertíveis de $\mathbb{Z}_n$ são exatamente os coprimos com $n$. Eles formam o grupo $\mathbb{Z}_n^*$, cuja ordem é a &lt;strong&gt;função totiente de Euler&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$\varphi(n) = n\prod_{p\mid n}\left(1-\frac1p\right)$$&lt;&#x2F;p&gt;
&lt;p&gt;Para $p$ primo, $\varphi(p) = p-1$ e &lt;strong&gt;todo&lt;&#x2F;strong&gt; elemento não nulo é invertível — ou seja, $\mathbb{Z}_p$ é um corpo. Esse fato é a razão de módulos primos serem preferidos em tantas aplicações.&lt;&#x2F;p&gt;
&lt;p&gt;Para $n = pq$ com $p,q$ primos distintos, $\varphi(n) = (p-1)(q-1)$ — a fórmula no coração do RSA.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exponenciacao-modular-rapida&quot;&gt;Exponenciação modular rápida&lt;&#x2F;h2&gt;
&lt;p&gt;Calcular $a^b \bmod n$ ingenuamente é inviável: $b$ pode ter centenas de bits. A &lt;strong&gt;exponenciação binária&lt;&#x2F;strong&gt; resolve em $O(\log b)$ multiplicações:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; pot_mod&lt;&#x2F;span&gt;&lt;span&gt;(base, exp, mod):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    base&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %=&lt;&#x2F;span&gt;&lt;span&gt; mod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; exp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; exp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (resultado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; base)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; mod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        base&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; (base&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; base)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; mod&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        exp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; resultado&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# em Python, embutido e otimizado:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;pow&lt;&#x2F;span&gt;&lt;span&gt;(base, exp, mod)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Sem essa técnica não haveria criptografia de chave pública: $a^{65537} \bmod n$ com $n$ de 2048 bits leva microssegundos com exponenciação binária, e tempo geológico sem ela.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Alerta de segurança&lt;&#x2F;strong&gt;: a versão acima é vulnerável a ataques de canal lateral por tempo, já que o ramo depende do bit do expoente. Implementações criptográficas usam variantes de tempo constante (escada de Montgomery). Em código real, use uma biblioteca auditada — nunca implemente a primitiva você mesmo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teste-de-divisibilidade&quot;&gt;Teste de divisibilidade&lt;&#x2F;h2&gt;
&lt;p&gt;As regras clássicas saem de congruências. Como $10 \equiv 1 \pmod 9$, temos $10^k \equiv 1$, logo um número é congruente à soma de seus dígitos módulo 9 — daí a regra do 9. Do mesmo modo, $10 \equiv -1 \pmod{11}$ dá a regra da soma alternada.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Tabelas hash.&lt;&#x2F;strong&gt; &lt;code&gt;h(k) = k % m&lt;&#x2F;code&gt;. Escolher $m$ primo evita padrões quando as chaves têm estrutura regular.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Somas de verificação.&lt;&#x2F;strong&gt; ISBN, CPF, IBAN e o algoritmo de Luhn (cartões de crédito) são todos verificações modulares que detectam erros de digitação e transposição.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Buffers circulares.&lt;&#x2F;strong&gt; &lt;code&gt;indice = (indice + 1) % tamanho&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Geradores pseudoaleatórios.&lt;&#x2F;strong&gt; Geradores congruenciais lineares são $x_{n+1} = (ax_n + c) \bmod m$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Hashing de Rabin-Karp.&lt;&#x2F;strong&gt; Um hash rolante módulo um primo permite comparar substrings em tempo constante amortizado.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Criptografia.&lt;&#x2F;strong&gt; RSA, Diffie-Hellman, DSA e curvas elípticas operam em aritmética modular.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Redução de Montgomery.&lt;&#x2F;strong&gt; Técnica que substitui a divisão cara por deslocamentos, usada em toda biblioteca criptográfica séria.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Calcular $3^{100} \bmod 7$.&lt;&#x2F;p&gt;
&lt;p&gt;Pelo pequeno teorema de Fermat, $3^6 \equiv 1 \pmod 7$. Como $100 = 6\cdot16 + 4$:&lt;&#x2F;p&gt;
&lt;p&gt;$$3^{100} = (3^6)^{16}\cdot3^4 \equiv 1^{16}\cdot81 \equiv 81 \bmod 7 \equiv 4$$&lt;&#x2F;p&gt;
&lt;p&gt;Verificando com exponenciação binária: $3^2=2$, $3^4 = 4$, $3^8 = 2$, ... o resultado bate.&lt;&#x2F;p&gt;
&lt;p&gt;Note como reduzir o expoente módulo $\varphi(n)$ transformou um cálculo enorme em trivial. É exatamente essa ideia que o RSA explora.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resto negativo&lt;&#x2F;strong&gt; em linguagens com a convenção do C.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Estouro&lt;&#x2F;strong&gt; ao multiplicar antes de reduzir; em linguagens com inteiros de 64 bits, o produto de dois números de 32 bits já pode estourar.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dividir&lt;&#x2F;strong&gt; em vez de multiplicar pelo inverso.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Módulo não primo&lt;&#x2F;strong&gt; onde a primalidade é necessária.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Implementar criptografia à mão&lt;&#x2F;strong&gt;, sem proteção contra canal lateral.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Shoup, capítulos 2 a 4 — aritmética modular com foco computacional.&lt;&#x2F;li&gt;
&lt;li&gt;Menezes, van Oorschot e Vanstone, &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;, capítulo 2 — gratuito online, com todos os algoritmos.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 2 — aritmética de precisão arbitrária.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do OpenSSL e da libsodium — como as primitivas são realmente implementadas.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-shoup2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Victor Shoup&lt;&#x2F;strong&gt; (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814549&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814549&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-menezes1996&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone&lt;&#x2F;strong&gt; (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781439821916&quot; rel=&quot;noopener&quot;&gt;9781439821916&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Victor Shoup (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Divisibilidade e Algoritmo de Euclides</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/divisibilidade-e-euclides/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/divisibilidade-e-euclides/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/divisibilidade-e-euclides/">&lt;h1 id=&quot;divisibilidade-e-algoritmo-de-euclides&quot;&gt;Divisibilidade e Algoritmo de Euclides&lt;&#x2F;h1&gt;
&lt;p&gt;O algoritmo de Euclides tem mais de dois mil anos e continua sendo executado bilhões de vezes por dia — toda conexão TLS depende dele. É provavelmente o algoritmo não trivial mais antigo ainda em uso.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;divisibilidade&quot;&gt;Divisibilidade&lt;&#x2F;h2&gt;
&lt;p&gt;$a \mid b$ significa que existe $k$ inteiro com $b = ak$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Divisão euclidiana&lt;&#x2F;strong&gt;: para $a$ e $b &amp;gt; 0$ existem únicos $q$ e $r$ com&lt;&#x2F;p&gt;
&lt;p&gt;$$a = bq + r, \qquad 0 \le r &amp;lt; b$$&lt;&#x2F;p&gt;
&lt;p&gt;Atenção a um detalhe de implementação: a definição matemática exige $0 \le r &amp;lt; b$, mas o operador &lt;code&gt;%&lt;&#x2F;code&gt; de C, Java e Rust devolve resto com o sinal do dividendo. &lt;code&gt;-7 % 3&lt;&#x2F;code&gt; dá &lt;code&gt;-1&lt;&#x2F;code&gt; nessas linguagens e &lt;code&gt;2&lt;&#x2F;code&gt; em Python. Em código criptográfico, esse detalhe já causou vulnerabilidades reais — normalize sempre com &lt;code&gt;((a % b) + b) % b&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mdc-e-mmc&quot;&gt;MDC e MMC&lt;&#x2F;h2&gt;
&lt;p&gt;$$\gcd(a,b)\cdot\operatorname{lcm}(a,b) = |ab|$$&lt;&#x2F;p&gt;
&lt;p&gt;Dois números com $\gcd(a,b)=1$ são &lt;strong&gt;coprimos&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algoritmo-de-euclides&quot;&gt;Algoritmo de Euclides&lt;&#x2F;h2&gt;
&lt;p&gt;Baseia-se na identidade $\gcd(a,b) = \gcd(b, a \bmod b)$:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; mdc&lt;&#x2F;span&gt;&lt;span&gt;(a, b):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; b:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        a, b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; b, a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Complexidade&lt;&#x2F;strong&gt;: $O(\log \min(a,b))$ divisões. O pior caso ocorre com números de Fibonacci consecutivos — resultado conhecido como teorema de Lamé, e um dos primeiros exemplos de análise de pior caso de um algoritmo.&lt;&#x2F;p&gt;
&lt;p&gt;O algoritmo é notavelmente eficiente: calcular o MDC de dois números de 2048 bits leva alguns milhares de operações, e não bilhões.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;algoritmo-estendido&quot;&gt;Algoritmo estendido&lt;&#x2F;h2&gt;
&lt;p&gt;Além do MDC, devolve coeficientes da &lt;strong&gt;identidade de Bézout&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;p&gt;$$\gcd(a,b) = ax + by$$&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; mdc_estendido&lt;&#x2F;span&gt;&lt;span&gt;(a, b):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span&gt; a,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    g, x1, y1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; mdc_estendido(b, a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; g, y1, x1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt; (a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; b)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; y1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Esta é a peça mais importante da página, porque resolve o &lt;strong&gt;inverso modular&lt;&#x2F;strong&gt;. Se $\gcd(a,m)=1$, então $ax + my = 1$, e reduzindo módulo $m$:&lt;&#x2F;p&gt;
&lt;p&gt;$$ax \equiv 1 \pmod m$$&lt;&#x2F;p&gt;
&lt;p&gt;Logo $x$ é o inverso de $a$ módulo $m$.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; inverso_modular&lt;&#x2F;span&gt;&lt;span&gt;(a, m):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    g, x, _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; mdc_estendido(a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; m, m)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; !=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        raise&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; ValueError&lt;&#x2F;span&gt;&lt;span&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; não é invertível módulo &lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;{&lt;&#x2F;span&gt;&lt;span&gt;m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;O inverso modular é o que permite &quot;dividir&quot; em aritmética modular, e é usado na geração de chaves RSA, em curvas elípticas e em códigos corretores.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;onde-aparece-em-computacao&quot;&gt;Onde aparece em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Frações.&lt;&#x2F;strong&gt; Reduzir $\frac{a}{b}$ à forma irredutível é dividir ambos pelo MDC.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Criptografia.&lt;&#x2F;strong&gt; O expoente privado do RSA é o inverso modular do expoente público.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sincronização.&lt;&#x2F;strong&gt; Dois eventos com períodos $p$ e $q$ coincidem a cada $\operatorname{lcm}(p,q)$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Hashing.&lt;&#x2F;strong&gt; Tabelas com sondagem por incremento fixo só percorrem todas as posições se o incremento for coprimo com o tamanho — motivo pelo qual tamanhos primos são preferidos.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Gráficos.&lt;&#x2F;strong&gt; O algoritmo de Bresenham para traçar retas é aparentado com Euclides.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Calcular $\gcd(252, 198)$ e a identidade de Bézout.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Passo&lt;&#x2F;th&gt;&lt;th&gt;$a$&lt;&#x2F;th&gt;&lt;th&gt;$b$&lt;&#x2F;th&gt;&lt;th&gt;$q$&lt;&#x2F;th&gt;&lt;th&gt;$r$&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;252&lt;&#x2F;td&gt;&lt;td&gt;198&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;54&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;198&lt;&#x2F;td&gt;&lt;td&gt;54&lt;&#x2F;td&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;&#x2F;td&gt;&lt;td&gt;54&lt;&#x2F;td&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;td&gt;1&lt;&#x2F;td&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;&#x2F;td&gt;&lt;td&gt;36&lt;&#x2F;td&gt;&lt;td&gt;18&lt;&#x2F;td&gt;&lt;td&gt;2&lt;&#x2F;td&gt;&lt;td&gt;0&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Logo $\gcd = 18$. Voltando pelas equações:&lt;&#x2F;p&gt;
&lt;p&gt;$$18 = 54 - 36 = 54 - (198 - 3\cdot54) = 4\cdot54 - 198$$
$$= 4(252-198) - 198 = 4\cdot252 - 5\cdot198$$&lt;&#x2F;p&gt;
&lt;p&gt;Conferindo: $1008 - 990 = 18$. Correto.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confiar no sinal de &lt;code&gt;%&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt; em linguagens que seguem a convenção do C.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Calcular inverso quando ele não existe.&lt;&#x2F;strong&gt; Exige $\gcd(a,m)=1$.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar fatoração para calcular MDC.&lt;&#x2F;strong&gt; Fatorar é muito mais caro que Euclides.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Recursão profunda&lt;&#x2F;strong&gt; no algoritmo estendido para números enormes; prefira versão iterativa.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Estouro de inteiro&lt;&#x2F;strong&gt; ao calcular MMC como $ab&#x2F;\gcd$; divida antes de multiplicar.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Hardy e Wright, &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt; — o clássico.&lt;&#x2F;li&gt;
&lt;li&gt;Shoup, &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt; — orientado a computação e gratuito no site do autor.&lt;&#x2F;li&gt;
&lt;li&gt;Knuth, TAOCP volume 2, seção 4.5.2 — a análise definitiva do algoritmo de Euclides.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-hardy2008&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;G. H. Hardy and E. M. Wright&lt;&#x2F;strong&gt; (2008). &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt;. Oxford University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1093&amp;#x2F;oso&amp;#x2F;9780199219858.001.0001&quot; rel=&quot;noopener&quot;&gt;10.1093&amp;#x2F;oso&amp;#x2F;9780199219858.001.0001&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-shoup2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Victor Shoup&lt;&#x2F;strong&gt; (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814549&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814549&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-knuth1997&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Donald E. Knuth&lt;&#x2F;strong&gt; (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley. &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;www-cs-faculty.stanford.edu&amp;#x2F;~knuth&amp;#x2F;taocp.html&quot; rel=&quot;noopener&quot;&gt;Página oficial&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;G. H. Hardy; E. M. Wright (2008). &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt;. Oxford University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Victor Shoup (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Donald E. Knuth (1997). &lt;em&gt;The Art of Computer Programming, Volume 1: Fundamental Algorithms&lt;&#x2F;em&gt;. Addison-Wesley.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Fermat, Euler e Testes de Primalidade</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/fermat-euler-e-primalidade/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/fermat-euler-e-primalidade/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/fermat-euler-e-primalidade/">&lt;h1 id=&quot;fermat-euler-e-testes-de-primalidade&quot;&gt;Fermat, Euler e Testes de Primalidade&lt;&#x2F;h1&gt;
&lt;p&gt;Gerar uma chave RSA de 2048 bits exige encontrar dois primos de mil bits cada. Como se testa a primalidade de um número com 300 dígitos decimais? Certamente não por divisões sucessivas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pequeno-teorema-de-fermat&quot;&gt;Pequeno teorema de Fermat&lt;&#x2F;h2&gt;
&lt;p&gt;Se $p$ é primo e $\gcd(a,p)=1$:&lt;&#x2F;p&gt;
&lt;p&gt;$$a^{p-1} \equiv 1 \pmod p$$&lt;&#x2F;p&gt;
&lt;p&gt;Equivalentemente, $a^p \equiv a \pmod p$ para todo $a$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-de-euler&quot;&gt;Teorema de Euler&lt;&#x2F;h2&gt;
&lt;p&gt;Generaliza para módulo composto. Se $\gcd(a,n)=1$:&lt;&#x2F;p&gt;
&lt;p&gt;$$a^{\varphi(n)} \equiv 1 \pmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;Consequência operacional: &lt;strong&gt;expoentes podem ser reduzidos módulo $\varphi(n)$&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;$$a^k \equiv a^{k \bmod \varphi(n)} \pmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;É exatamente essa propriedade que faz o RSA funcionar. Com $n = pq$ e $ed \equiv 1 \pmod{\varphi(n)}$:&lt;&#x2F;p&gt;
&lt;p&gt;$$(m^e)^d = m^{ed} = m^{1 + k\varphi(n)} \equiv m \pmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;Cifrar e decifrar são operações inversas &lt;strong&gt;por causa do teorema de Euler&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teste-de-fermat-e-seus-limites&quot;&gt;Teste de Fermat e seus limites&lt;&#x2F;h2&gt;
&lt;p&gt;A recíproca do teorema de Fermat sugere um teste: se $a^{n-1} \not\equiv 1 \pmod n$ para algum $a$, então $n$ é composto — com certeza.&lt;&#x2F;p&gt;
&lt;p&gt;O problema é o inverso. Existem compostos que passam no teste para certas bases: os &lt;strong&gt;pseudoprimos de Fermat&lt;&#x2F;strong&gt;. Pior, os &lt;strong&gt;números de Carmichael&lt;&#x2F;strong&gt; (561, 1105, 1729, …) passam para &lt;strong&gt;toda&lt;&#x2F;strong&gt; base coprima. Existem infinitos deles, e por isso o teste de Fermat sozinho é insuficiente para criptografia.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;miller-rabin&quot;&gt;Miller-Rabin&lt;&#x2F;h2&gt;
&lt;p&gt;O teste padrão. Escreva $n-1 = 2^s d$ com $d$ ímpar. Para uma base $a$, $n$ é provável primo se&lt;&#x2F;p&gt;
&lt;p&gt;$$a^d \equiv 1 \pmod n \quad \text{ou} \quad a^{2^rd} \equiv -1 \pmod n \text{ para algum } 0 \le r &amp;lt; s$$&lt;&#x2F;p&gt;
&lt;p&gt;A ideia: num corpo, as únicas raízes quadradas de 1 são $\pm1$. Se aparecer outra raiz quadrada de 1 durante os quadrados sucessivos, $n$ não é primo.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;import&lt;&#x2F;span&gt;&lt;span&gt; random&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; miller_rabin&lt;&#x2F;span&gt;&lt;span&gt;(n, k&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;40&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    if&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; False&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 3&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 5&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 7&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 11&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 13&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 17&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 19&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 23&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 29&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 31&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 37&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; p&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    d, s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    while&lt;&#x2F;span&gt;&lt;span&gt; d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        d&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&#x2F;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 2&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(k):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; random.randrange(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;2&lt;&#x2F;span&gt;&lt;span&gt;, n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; pow&lt;&#x2F;span&gt;&lt;span&gt;(a, d, n)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        if&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; or&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            continue&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        for&lt;&#x2F;span&gt;&lt;span&gt; _&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; range&lt;&#x2F;span&gt;&lt;span&gt;(s&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;            x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            if&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; ==&lt;&#x2F;span&gt;&lt;span&gt; n&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;                break&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;        else&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;            return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; False&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;        # composto, com certeza&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; True&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;                 # provável primo&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Garantia&lt;&#x2F;strong&gt;: para $n$ composto, a probabilidade de passar numa rodada é no máximo $1&#x2F;4$. Com $k$ rodadas independentes, o erro cai a $4^{-k}$.&lt;&#x2F;p&gt;
&lt;p&gt;Com $k=40$, o erro é abaixo de $10^{-24}$ — várias ordens de grandeza menor que a probabilidade de erro não detectado de memória RAM. É essa comparação que justifica usar um teste probabilístico em criptografia.&lt;&#x2F;p&gt;
&lt;p&gt;Note que o algoritmo é Monte Carlo &lt;strong&gt;unilateral&lt;&#x2F;strong&gt;: quando responde &quot;composto&quot;, está sempre certo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;versao-deterministica&quot;&gt;Versão determinística&lt;&#x2F;h2&gt;
&lt;p&gt;Para $n &amp;lt; 3{,}3\times10^{24}$, testar as bases ${2,3,5,7,11,13,17,19,23,29,31,37}$ é &lt;strong&gt;determinístico&lt;&#x2F;strong&gt; — resultado verificado computacionalmente. É a escolha certa para inteiros de 64 bits.&lt;&#x2F;p&gt;
&lt;p&gt;O algoritmo &lt;strong&gt;AKS&lt;&#x2F;strong&gt; (2002) foi o primeiro teste determinístico de tempo polinomial sem hipóteses, resolvendo uma questão teórica de longa data. Na prática é lento demais e não substitui Miller-Rabin.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;densidade-dos-primos&quot;&gt;Densidade dos primos&lt;&#x2F;h2&gt;
&lt;p&gt;Pelo teorema dos números primos, a quantidade de primos até $x$ é aproximadamente $x&#x2F;\ln x$. Logo, perto de $N$, cerca de $1$ em $\ln N$ números é primo.&lt;&#x2F;p&gt;
&lt;p&gt;Para números de 1024 bits, $\ln N \approx 710$; considerando apenas ímpares, espera-se testar cerca de 355 candidatos. Com filtragem prévia por primos pequenos, o custo cai bastante — e é assim que a geração de chaves RSA leva segundos, não horas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fatoracao-o-problema-dificil&quot;&gt;Fatoração: o problema difícil&lt;&#x2F;h2&gt;
&lt;p&gt;Testar primalidade é &lt;strong&gt;fácil&lt;&#x2F;strong&gt; (polinomial); &lt;strong&gt;fatorar&lt;&#x2F;strong&gt; é difícil. Essa assimetria é o que sustenta o RSA.&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Algoritmo&lt;&#x2F;th&gt;&lt;th&gt;Complexidade&lt;&#x2F;th&gt;&lt;th&gt;Uso&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Divisão sucessiva&lt;&#x2F;td&gt;&lt;td&gt;$O(\sqrt n)$&lt;&#x2F;td&gt;&lt;td&gt;Números pequenos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Rho de Pollard&lt;&#x2F;td&gt;&lt;td&gt;$O(n^{1&#x2F;4})$&lt;&#x2F;td&gt;&lt;td&gt;Fatores pequenos&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Curvas elípticas&lt;&#x2F;td&gt;&lt;td&gt;Subexponencial&lt;&#x2F;td&gt;&lt;td&gt;Fatores médios&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Crivo de corpo numérico&lt;&#x2F;td&gt;&lt;td&gt;$\exp(O((\log n)^{1&#x2F;3}))$&lt;&#x2F;td&gt;&lt;td&gt;Recorde atual&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O recorde público é a fatoração do RSA-250 (829 bits, em 2020), que consumiu cerca de 2700 anos de CPU. Chaves de 2048 bits estão muito além do alcance clássico.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Mas o algoritmo de Shor&lt;&#x2F;strong&gt; fatora em tempo polinomial num computador quântico suficientemente grande. É por isso que existe todo um esforço de padronização de criptografia pós-quântica — o NIST selecionou os primeiros algoritmos em 2022–2024, baseados em reticulados e não em fatoração.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Verificar se $561$ é primo pelo teste de Fermat com $a=2$.&lt;&#x2F;p&gt;
&lt;p&gt;$561 = 3 \cdot 11 \cdot 17$, portanto é composto. Ainda assim, $2^{560} \equiv 1 \pmod{561}$ — ele &lt;strong&gt;passa&lt;&#x2F;strong&gt; no teste de Fermat. É o menor número de Carmichael.&lt;&#x2F;p&gt;
&lt;p&gt;Com Miller-Rabin: $560 = 2^4 \cdot 35$. Calculando $2^{35} \bmod 561 = 263$, que não é $1$ nem $560$. Elevando ao quadrado: $263^2 \equiv 166$, $166^2 \equiv 67$, $67^2 \equiv 1$. Apareceu $1$ vindo de $67$, que não é $\pm1$ — logo $67$ é uma raiz quadrada não trivial de 1, e $561$ é composto. Miller-Rabin detecta o que Fermat não vê.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Usar teste de Fermat&lt;&#x2F;strong&gt; em criptografia, ignorando os números de Carmichael.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Poucas rodadas&lt;&#x2F;strong&gt; de Miller-Rabin.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Gerador não criptográfico&lt;&#x2F;strong&gt; para escolher as bases ou os candidatos a primo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Implementar a primitiva à mão&lt;&#x2F;strong&gt; em vez de usar biblioteca auditada.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir &quot;provável primo&quot; com &quot;primo&quot;&lt;&#x2F;strong&gt; em contexto que exige certeza matemática.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Menezes et al., capítulo 4 — geração de primos e testes, gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Shoup, capítulo 10 — Miller-Rabin com a análise de erro completa.&lt;&#x2F;li&gt;
&lt;li&gt;Crandall e Pomerance, &lt;em&gt;Prime Numbers: A Computational Perspective&lt;&#x2F;em&gt; — a referência sobre algoritmos com primos.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação do NIST sobre criptografia pós-quântica — o que muda com computação quântica.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-menezes1996&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone&lt;&#x2F;strong&gt; (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781439821916&quot; rel=&quot;noopener&quot;&gt;9781439821916&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-shoup2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Victor Shoup&lt;&#x2F;strong&gt; (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814549&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814549&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-hardy2008&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;G. H. Hardy and E. M. Wright&lt;&#x2F;strong&gt; (2008). &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt;. Oxford University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1093&amp;#x2F;oso&amp;#x2F;9780199219858.001.0001&quot; rel=&quot;noopener&quot;&gt;10.1093&amp;#x2F;oso&amp;#x2F;9780199219858.001.0001&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;li&gt;Victor Shoup (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;G. H. Hardy; E. M. Wright (2008). &lt;em&gt;An Introduction to the Theory of Numbers&lt;&#x2F;em&gt;. Oxford University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>RSA</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/rsa/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/rsa/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/rsa/">&lt;h1 id=&quot;rsa&quot;&gt;RSA&lt;&#x2F;h1&gt;
&lt;p&gt;O RSA foi o primeiro criptossistema prático de chave pública e continua amplamente usado em assinaturas e certificados. Ele é também o exemplo mais claro de matemática pura virando infraestrutura crítica.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;geracao-de-chaves&quot;&gt;Geração de chaves&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Escolha dois primos grandes e distintos $p$ e $q$ (1024 bits cada, para $n$ de 2048).&lt;&#x2F;li&gt;
&lt;li&gt;Calcule $n = pq$ e $\varphi(n) = (p-1)(q-1)$.&lt;&#x2F;li&gt;
&lt;li&gt;Escolha $e$ com $\gcd(e,\varphi(n))=1$. Na prática, $e = 65537$.&lt;&#x2F;li&gt;
&lt;li&gt;Calcule $d = e^{-1} \bmod \varphi(n)$ pelo algoritmo de Euclides estendido.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;Chave pública&lt;&#x2F;strong&gt;: $(n, e)$. &lt;strong&gt;Chave privada&lt;&#x2F;strong&gt;: $(n, d)$, mais $p$, $q$ e os expoentes reduzidos para a otimização por CRT.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cifragem-e-decifragem&quot;&gt;Cifragem e decifragem&lt;&#x2F;h2&gt;
&lt;p&gt;$$c = m^e \bmod n, \qquad m = c^d \bmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;com $0 \le m &amp;lt; n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;por-que-funciona&quot;&gt;Por que funciona&lt;&#x2F;h2&gt;
&lt;p&gt;Como $ed \equiv 1 \pmod{\varphi(n)}$, existe $k$ com $ed = 1 + k\varphi(n)$. Então:&lt;&#x2F;p&gt;
&lt;p&gt;$$c^d = (m^e)^d = m^{ed} = m^{1+k\varphi(n)} = m\cdot\left(m^{\varphi(n)}\right)^k$$&lt;&#x2F;p&gt;
&lt;p&gt;Pelo teorema de Euler, $m^{\varphi(n)} \equiv 1 \pmod n$ quando $\gcd(m,n)=1$, logo $c^d \equiv m$. $\blacksquare$&lt;&#x2F;p&gt;
&lt;p&gt;(O caso $\gcd(m,n)&amp;gt;1$ também funciona, por um argumento via CRT sobre $p$ e $q$ separadamente.)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;por-que-e-seguro&quot;&gt;Por que é seguro&lt;&#x2F;h2&gt;
&lt;p&gt;Recuperar $d$ a partir de $(n,e)$ exige $\varphi(n)$, que exige conhecer $p$ e $q$ — ou seja, &lt;strong&gt;fatorar $n$&lt;&#x2F;strong&gt;. Com $n$ de 2048 bits, isso está fora do alcance computacional clássico.&lt;&#x2F;p&gt;
&lt;p&gt;Note a assimetria que torna tudo possível: &lt;strong&gt;multiplicar $p$ por $q$ é trivial; recuperar $p$ e $q$ de $n$ é inviável&lt;&#x2F;strong&gt;. Essa é uma função de mão única, e é toda a base do sistema.&lt;&#x2F;p&gt;
&lt;p&gt;Vale registrar que a equivalência entre &quot;quebrar RSA&quot; e &quot;fatorar&quot; não está provada — apenas que fatorar quebra o RSA.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rsa-puro-e-inseguro&quot;&gt;RSA puro é inseguro&lt;&#x2F;h2&gt;
&lt;p&gt;Esta é a parte que costuma faltar nas explicações introdutórias. O RSA &quot;livro-texto&quot;, exatamente como descrito acima, tem falhas graves:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Determinismo.&lt;&#x2F;strong&gt; A mesma mensagem sempre produz o mesmo criptograma. Um adversário pode cifrar candidatos e comparar — devastador para espaços de mensagem pequenos, como &quot;sim&quot;&#x2F;&quot;não&quot; ou um número de cartão.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Maleabilidade.&lt;&#x2F;strong&gt; $ (m_1m_2)^e = m_1^e m_2^e $. É possível manipular o criptograma de forma previsível sem conhecer a chave.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Mensagens pequenas.&lt;&#x2F;strong&gt; Se $m^e &amp;lt; n$, não há redução modular e basta extrair a raiz $e$-ésima inteira. Com $e=3$ e mensagem curta, a quebra é imediata.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Ataques de canal lateral.&lt;&#x2F;strong&gt; Tempo de execução e consumo de energia vazam bits da chave.&lt;&#x2F;p&gt;
&lt;p&gt;A resposta é o &lt;strong&gt;preenchimento&lt;&#x2F;strong&gt;: OAEP para cifragem e PSS para assinatura. Eles introduzem aleatoriedade e estrutura verificável. O esquema antigo PKCS#1 v1.5 é vulnerável ao ataque de Bleichenbacher e não deve ser usado em código novo.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# NUNCA implemente RSA você mesmo. Use biblioteca auditada:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; cryptography.hazmat.primitives.asymmetric&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; rsa, padding&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;from&lt;&#x2F;span&gt;&lt;span&gt; cryptography.hazmat.primitives&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; import&lt;&#x2F;span&gt;&lt;span&gt; hashes&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;chave&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; rsa.generate_private_key(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;public_exponent&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;65537&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt; key_size&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;2048&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cifrado&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; chave.public_key().encrypt(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    b&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;mensagem&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    padding.OAEP(&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;        mgf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;padding.MGF1(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;algorithm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;hashes.SHA256()),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;        algorithm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span&gt;hashes.SHA256(),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;        label&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;None&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ),&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;escolha-de-parametros&quot;&gt;Escolha de parâmetros&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parâmetro&lt;&#x2F;th&gt;&lt;th&gt;Recomendação&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Tamanho de $n$&lt;&#x2F;td&gt;&lt;td&gt;Mínimo 2048 bits; 3072 para longo prazo&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$e$&lt;&#x2F;td&gt;&lt;td&gt;65537 — primo, com poucos bits 1, rápido de calcular&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$p$, $q$&lt;&#x2F;td&gt;&lt;td&gt;Aleatórios, de tamanhos próximos mas não iguais&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Preenchimento&lt;&#x2F;td&gt;&lt;td&gt;OAEP para cifrar, PSS para assinar&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Erros de geração já causaram incidentes reais: em 2012, um estudo encontrou milhares de chaves na internet que compartilhavam um fator primo, por entropia insuficiente na geração. Um simples MDC entre pares de módulos públicos revelava as chaves privadas.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;rsa-na-pratica-cifragem-hibrida&quot;&gt;RSA na prática: cifragem híbrida&lt;&#x2F;h2&gt;
&lt;p&gt;RSA é lento e limitado a mensagens menores que $n$. Nenhum sistema real cifra dados diretamente com ele. O padrão é &lt;strong&gt;cifragem híbrida&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Gera-se uma chave simétrica aleatória (AES).&lt;&#x2F;li&gt;
&lt;li&gt;Cifra-se a mensagem com AES.&lt;&#x2F;li&gt;
&lt;li&gt;Cifra-se &lt;strong&gt;apenas a chave AES&lt;&#x2F;strong&gt; com RSA.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;É assim que TLS, PGP e S&#x2F;MIME funcionam. Hoje, aliás, TLS usa preferencialmente troca de chaves por curvas elípticas (ECDHE), com RSA apenas na assinatura do certificado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;assinatura-digital&quot;&gt;Assinatura digital&lt;&#x2F;h2&gt;
&lt;p&gt;Inverte os papéis: assina-se com a chave privada e verifica-se com a pública.&lt;&#x2F;p&gt;
&lt;p&gt;$$s = H(m)^d \bmod n, \qquad \text{verificação: } s^e \equiv H(m) \pmod n$$&lt;&#x2F;p&gt;
&lt;p&gt;Assina-se o &lt;strong&gt;resumo&lt;&#x2F;strong&gt; da mensagem, não a mensagem — por eficiência e porque a mensagem pode exceder $n$. Usa-se PSS, e não a construção ingênua.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;comparacao-com-curvas-elipticas&quot;&gt;Comparação com curvas elípticas&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Segurança&lt;&#x2F;th&gt;&lt;th&gt;RSA&lt;&#x2F;th&gt;&lt;th&gt;Curva elíptica&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;112 bits&lt;&#x2F;td&gt;&lt;td&gt;2048&lt;&#x2F;td&gt;&lt;td&gt;224&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;128 bits&lt;&#x2F;td&gt;&lt;td&gt;3072&lt;&#x2F;td&gt;&lt;td&gt;256&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;192 bits&lt;&#x2F;td&gt;&lt;td&gt;7680&lt;&#x2F;td&gt;&lt;td&gt;384&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Chaves muito menores para a mesma segurança, com operações mais rápidas. É por isso que sistemas novos preferem Ed25519 e ECDSA. RSA permanece por compatibilidade e pela verificação de assinatura, que é rápida com $e$ pequeno.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Com $p=61$, $q=53$ (valores de brinquedo):&lt;&#x2F;p&gt;
&lt;p&gt;$n = 3233$, $\varphi(n) = 60 \cdot 52 = 3120$.&lt;&#x2F;p&gt;
&lt;p&gt;Tomando $e = 17$, o inverso é $d = 2753$, pois $17 \cdot 2753 = 46801 = 15\cdot3120 + 1$.&lt;&#x2F;p&gt;
&lt;p&gt;Cifrando $m = 65$: $c = 65^{17} \bmod 3233 = 2790$.&lt;&#x2F;p&gt;
&lt;p&gt;Decifrando: $2790^{2753} \bmod 3233 = 65$. ✓&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Implementar RSA à mão&lt;&#x2F;strong&gt; em produção.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Usar RSA sem preenchimento&lt;&#x2F;strong&gt; ou com PKCS#1 v1.5 em código novo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Cifrar dados grandes diretamente&lt;&#x2F;strong&gt;, em vez de usar cifragem híbrida.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Chave de 1024 bits&lt;&#x2F;strong&gt;, já considerada insuficiente.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Entropia fraca&lt;&#x2F;strong&gt; na geração dos primos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Reutilizar primos&lt;&#x2F;strong&gt; entre chaves.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Assinar sem resumo&lt;&#x2F;strong&gt; ou com função de resumo obsoleta.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Katz e Lindell, &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt; — o tratamento moderno, com definições de segurança precisas.&lt;&#x2F;li&gt;
&lt;li&gt;Menezes et al., capítulo 8 — RSA e variantes, gratuito online.&lt;&#x2F;li&gt;
&lt;li&gt;Boneh, &quot;Twenty Years of Attacks on the RSA Cryptosystem&quot; — panorama dos ataques conhecidos; leitura curta e esclarecedora.&lt;&#x2F;li&gt;
&lt;li&gt;Documentação da libsodium — a filosofia de expor apenas construções seguras por padrão.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-katz2014&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Jonathan Katz and Yehuda Lindell&lt;&#x2F;strong&gt; (2014). &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt;. CRC Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1201&amp;#x2F;b17668&quot; rel=&quot;noopener&quot;&gt;10.1201&amp;#x2F;b17668&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-menezes1996&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone&lt;&#x2F;strong&gt; (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781439821916&quot; rel=&quot;noopener&quot;&gt;9781439821916&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-shoup2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Victor Shoup&lt;&#x2F;strong&gt; (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814549&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814549&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Jonathan Katz; Yehuda Lindell (2014). &lt;em&gt;Introduction to Modern Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;li&gt;Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;li&gt;Victor Shoup (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Teorema Chinês do Resto</title>
        <published>2026-07-26T00:00:00+00:00</published>
        <updated>2026-07-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/teorema-chines-do-resto/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/teorema-chines-do-resto/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/teoria-numeros/teorema-chines-do-resto/">&lt;h1 id=&quot;teorema-chines-do-resto&quot;&gt;Teorema Chinês do Resto&lt;&#x2F;h1&gt;
&lt;p&gt;O teorema resolve sistemas de congruências com módulos coprimos, e sua importância prática vem de uma leitura estrutural: ele permite &lt;strong&gt;decompor&lt;&#x2F;strong&gt; um problema módulo $n$ em problemas independentes módulo os fatores de $n$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;enunciado&quot;&gt;Enunciado&lt;&#x2F;h2&gt;
&lt;p&gt;Se $n_1, \dots, n_k$ são dois a dois coprimos, o sistema&lt;&#x2F;p&gt;
&lt;p&gt;$$x \equiv a_1 \pmod{n_1}, \quad \dots, \quad x \equiv a_k \pmod{n_k}$$&lt;&#x2F;p&gt;
&lt;p&gt;tem solução &lt;strong&gt;única&lt;&#x2F;strong&gt; módulo $N = n_1n_2\cdots n_k$.&lt;&#x2F;p&gt;
&lt;p&gt;Em linguagem de estruturas: existe um isomorfismo de anéis&lt;&#x2F;p&gt;
&lt;p&gt;$$\mathbb{Z}&lt;em&gt;N \cong \mathbb{Z}&lt;&#x2F;em&gt;{n_1}\times\cdots\times\mathbb{Z}_{n_k}$$&lt;&#x2F;p&gt;
&lt;p&gt;Ou seja, um número módulo $N$ é &lt;strong&gt;equivalente&lt;&#x2F;strong&gt; à tupla de seus restos. E como o isomorfismo preserva soma e produto, pode-se calcular componente a componente.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;construcao&quot;&gt;Construção&lt;&#x2F;h2&gt;
&lt;p&gt;Seja $N_i = N&#x2F;n_i$. Como $\gcd(N_i, n_i) = 1$, existe $M_i = N_i^{-1} \bmod n_i$. Então&lt;&#x2F;p&gt;
&lt;p&gt;$$x \equiv \sum_{i=1}^{k} a_i N_i M_i \pmod N$$&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;python&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;def&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; crt&lt;&#x2F;span&gt;&lt;span&gt;(restos, modulos):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span&gt; modulos:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *=&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 0&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    for&lt;&#x2F;span&gt;&lt;span&gt; a, m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; in&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; zip&lt;&#x2F;span&gt;&lt;span&gt;(restos, modulos):&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Ni&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; N&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt; m&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        Mi&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; pow&lt;&#x2F;span&gt;&lt;span&gt;(Ni,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;1&lt;&#x2F;span&gt;&lt;span&gt;, m)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;      # inverso modular (Python 3.8+)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; +=&lt;&#x2F;span&gt;&lt;span&gt; a&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; Ni&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; *&lt;&#x2F;span&gt;&lt;span&gt; Mi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;    return&lt;&#x2F;span&gt;&lt;span&gt; x&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; %&lt;&#x2F;span&gt;&lt;span&gt; N&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;A ideia da construção: cada termo da soma vale $a_i$ módulo $n_i$ e zero módulo os demais, porque $N_i$ é múltiplo de todos os outros módulos.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aceleracao-do-rsa&quot;&gt;Aceleração do RSA&lt;&#x2F;h2&gt;
&lt;p&gt;Esta é a aplicação de maior impacto prático. A decifração RSA calcula $m = c^d \bmod n$ com $n = pq$ e $d$ do tamanho de $n$ — uma exponenciação cara.&lt;&#x2F;p&gt;
&lt;p&gt;Quem possui a chave privada conhece $p$ e $q$, e pode trabalhar separadamente:&lt;&#x2F;p&gt;
&lt;p&gt;$$m_p = c^{d \bmod (p-1)} \bmod p, \qquad m_q = c^{d \bmod (q-1)} \bmod q$$&lt;&#x2F;p&gt;
&lt;p&gt;e recombinar por CRT. Como as duas exponenciações são feitas com números de metade do tamanho, e o custo da exponenciação modular cresce cubicamente com o número de bits, o ganho é de cerca de &lt;strong&gt;quatro vezes&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Toda implementação séria de RSA usa isso — é por isso que a chave privada armazena $p$, $q$ e os expoentes reduzidos, e não apenas $d$.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Alerta de segurança&lt;&#x2F;strong&gt;: a otimização introduziu uma vulnerabilidade famosa. Se ocorrer uma falha de hardware durante apenas uma das duas exponenciações, o resultado recombinado permite fatorar $n$ com um único MDC (ataque de Bellcore). Implementações corretas &lt;strong&gt;verificam&lt;&#x2F;strong&gt; o resultado antes de devolvê-lo.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aritmetica-de-residuos&quot;&gt;Aritmética de resíduos&lt;&#x2F;h2&gt;
&lt;p&gt;O isomorfismo permite representar números grandes por tuplas de resíduos pequenos e operar em paralelo, sem propagação de vaivém entre posições.&lt;&#x2F;p&gt;
&lt;p&gt;É usado em processamento de sinais, em algumas arquiteturas de hardware criptográfico e em computação simbólica: para calcular um determinante inteiro enorme, calcula-se módulo vários primos pequenos e reconstrói-se por CRT, evitando aritmética de precisão arbitrária no meio do caminho.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exemplo-trabalhado&quot;&gt;Exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Resolver:&lt;&#x2F;p&gt;
&lt;p&gt;$$x \equiv 2 \pmod 3, \qquad x \equiv 3 \pmod 5, \qquad x \equiv 2 \pmod 7$$&lt;&#x2F;p&gt;
&lt;p&gt;$N = 105$, e $N_1 = 35$, $N_2 = 21$, $N_3 = 15$.&lt;&#x2F;p&gt;
&lt;p&gt;Inversos: $35 \equiv 2 \pmod 3$ e $2^{-1} \equiv 2 \pmod 3$, logo $M_1 = 2$. $21 \equiv 1 \pmod 5$, logo $M_2 = 1$. $15 \equiv 1 \pmod 7$, logo $M_3 = 1$.&lt;&#x2F;p&gt;
&lt;p&gt;$$x \equiv 2\cdot35\cdot2 + 3\cdot21\cdot1 + 2\cdot15\cdot1 = 140 + 63 + 30 = 233 \equiv 23 \pmod{105}$$&lt;&#x2F;p&gt;
&lt;p&gt;Verificando: $23 = 3\cdot7+2$ ✓, $23 = 5\cdot4+3$ ✓, $23 = 7\cdot3+2$ ✓.&lt;&#x2F;p&gt;
&lt;p&gt;Este é, essencialmente, o problema formulado por Sun Tzu no século III — daí o nome.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;RSA-CRT.&lt;&#x2F;strong&gt; Decifração e assinatura quatro vezes mais rápidas.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Compartilhamento de segredo.&lt;&#x2F;strong&gt; O esquema de Asmuth-Bloom usa CRT para dividir um segredo em partes.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computação algébrica.&lt;&#x2F;strong&gt; Cálculo modular com reconstrução, evitando explosão de coeficientes intermediários.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Sincronização.&lt;&#x2F;strong&gt; Determinar quando eventos de períodos coprimos coincidem.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Fatoração e testes.&lt;&#x2F;strong&gt; Vários algoritmos trabalham módulo primos pequenos e recombinam.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Módulos não coprimos.&lt;&#x2F;strong&gt; O teorema exige coprimalidade dois a dois; sem ela, pode não haver solução.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a verificação no RSA-CRT&lt;&#x2F;strong&gt;, deixando o ataque de falha em aberto.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Estouro&lt;&#x2F;strong&gt; ao calcular $a_iN_iM_i$ com módulos grandes; use inteiros de precisão arbitrária.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir a solução única módulo $N$&lt;&#x2F;strong&gt; com solução única nos inteiros — há infinitas, todas congruentes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;leituras-recomendadas&quot;&gt;Leituras recomendadas&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Shoup, capítulo 2 — CRT com a formulação algébrica.&lt;&#x2F;li&gt;
&lt;li&gt;Menezes et al., capítulo 14 — CRT aplicado a implementações criptográficas eficientes.&lt;&#x2F;li&gt;
&lt;li&gt;Boneh, DeMillo e Lipton, &quot;On the Importance of Checking Cryptographic Protocols for Faults&quot; — o artigo do ataque de Bellcore.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;span id=&quot;bibref-shoup2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Victor Shoup&lt;&#x2F;strong&gt; (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1017&amp;#x2F;cbo9780511814549&quot; rel=&quot;noopener&quot;&gt;10.1017&amp;#x2F;cbo9780511814549&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;
&lt;span id=&quot;bibref-menezes1996&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Alfred J. Menezes and Paul C. van Oorschot and Scott A. Vanstone&lt;&#x2F;strong&gt; (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9781439821916&quot; rel=&quot;noopener&quot;&gt;9781439821916&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Victor Shoup (2009). &lt;em&gt;A Computational Introduction to Number Theory and Algebra&lt;&#x2F;em&gt;. Cambridge University Press.&lt;&#x2F;li&gt;
&lt;li&gt;Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). &lt;em&gt;Handbook of Applied Cryptography&lt;&#x2F;em&gt;. CRC Press.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Sequências e Séries</title>
        <published>2024-01-25T00:00:00+00:00</published>
        <updated>2024-01-25T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/sequencias-e-series/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/sequencias-e-series/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/analise/sequencias-e-series/">&lt;h1 id=&quot;sequencias-e-series&quot;&gt;Sequências e Séries&lt;&#x2F;h1&gt;
&lt;p&gt;Sequências e séries são a linguagem em que se formaliza a ideia de &lt;strong&gt;comportamento no limite&lt;&#x2F;strong&gt; — o que acontece quando o tamanho da entrada cresce sem parar. É por isso que aparecem em toda análise de algoritmos: perguntar a complexidade de um algoritmo é perguntar como uma sequência se comporta quando $n \to \infty$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sequencias&quot;&gt;Sequências&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;sequência&lt;&#x2F;strong&gt; é uma função $a: \mathbb{N} \to \mathbb{R}$. Escrevemos $(a_n)$, onde $a_n = a(n)$.&lt;&#x2F;p&gt;
&lt;p&gt;Uma sequência é apenas uma lista infinita e ordenada de números. O que interessa quase nunca são os primeiros termos, e sim para onde a lista tende.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;limite-de-uma-sequencia&quot;&gt;Limite de uma sequência&lt;&#x2F;h3&gt;
&lt;p&gt;$$\lim_{n \to \infty} a_n = L \iff \forall \varepsilon &amp;gt; 0, \exists N \in \mathbb{N}: n &amp;gt; N \implies |a_n - L| &amp;lt; \varepsilon$$&lt;&#x2F;p&gt;
&lt;p&gt;A definição parece hostil na primeira leitura, mas descreve um jogo simples entre duas partes. Alguém escolhe uma tolerância $\varepsilon$, por menor que seja. Você precisa exibir um ponto $N$ da sequência a partir do qual &lt;strong&gt;todos&lt;&#x2F;strong&gt; os termos ficam a menos de $\varepsilon$ de $L$. Se você consegue responder a qualquer $\varepsilon$, a sequência converge para $L$.&lt;&#x2F;p&gt;
&lt;p&gt;O ponto essencial: $N$ pode depender de $\varepsilon$ — em geral, tolerâncias menores exigem esperar mais.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;exemplo&quot;&gt;Exemplo&lt;&#x2F;h3&gt;
&lt;p&gt;Mostrar que $a_n = 1&#x2F;n$ converge para $0$. Dado $\varepsilon &amp;gt; 0$, basta tomar $N &amp;gt; 1&#x2F;\varepsilon$. Aí, para todo $n &amp;gt; N$:&lt;&#x2F;p&gt;
&lt;p&gt;$$\left| \frac{1}{n} - 0 \right| = \frac{1}{n} &amp;lt; \frac{1}{N} &amp;lt; \varepsilon$$&lt;&#x2F;p&gt;
&lt;p&gt;A escolha de $N$ é a resposta ao desafio, e ela existe para qualquer $\varepsilon$.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sequencias-que-nao-convergem&quot;&gt;Sequências que não convergem&lt;&#x2F;h3&gt;
&lt;p&gt;Divergir não é uma coisa só. $a_n = n$ cresce sem limite; $a_n = (-1)^n$ é limitada mas oscila entre $-1$ e $1$ sem nunca se estabelecer. As duas divergem, por motivos distintos.&lt;&#x2F;p&gt;
&lt;p&gt;Vale registrar dois resultados úteis: toda sequência convergente é limitada — a recíproca é falsa, como mostra $(-1)^n$ — e toda sequência monótona e limitada converge. O segundo sustenta boa parte da análise.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;series&quot;&gt;Séries&lt;&#x2F;h2&gt;
&lt;p&gt;Uma &lt;strong&gt;série&lt;&#x2F;strong&gt; é a soma dos termos de uma sequência:&lt;&#x2F;p&gt;
&lt;p&gt;$$S = \sum_{n=1}^{\infty} a_n = \lim_{N \to \infty} \sum_{n=1}^{N} a_n$$&lt;&#x2F;p&gt;
&lt;p&gt;A definição é indireta, e vale destacar por quê: não se somam infinitos termos. Forma-se a sequência das &lt;strong&gt;somas parciais&lt;&#x2F;strong&gt; $S_N = \sum_{n=1}^{N} a_n$ e pergunta-se se &lt;em&gt;ela&lt;&#x2F;em&gt; converge. Uma série nada mais é que uma sequência disfarçada.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;serie-geometrica&quot;&gt;Série geométrica&lt;&#x2F;h3&gt;
&lt;p&gt;$$\sum_{n=0}^{\infty} r^n = \frac{1}{1-r}, \quad |r| &amp;lt; 1$$&lt;&#x2F;p&gt;
&lt;p&gt;É a série mais útil em computação. A soma parcial tem forma fechada:&lt;&#x2F;p&gt;
&lt;p&gt;$$S_N = \frac{1 - r^{N+1}}{1 - r}$$&lt;&#x2F;p&gt;
&lt;p&gt;Com $|r| &amp;lt; 1$, o termo $r^{N+1}$ vai a zero e resta $1&#x2F;(1-r)$. Com $|r| \ge 1$ ele não vai, e a série diverge.&lt;&#x2F;p&gt;
&lt;p&gt;Uma consequência que aparece o tempo todo: quando o trabalho &lt;strong&gt;cai&lt;&#x2F;strong&gt; geometricamente a cada nível, o custo total é uma constante vezes o custo do primeiro nível. É o que faz um vetor dinâmico ter inserção amortizada $O(1)$ — a soma $1 + 2 + 4 + \cdots + n$ é menor que $2n$.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;serie-harmonica&quot;&gt;Série harmônica&lt;&#x2F;h3&gt;
&lt;p&gt;$$\sum_{n=1}^{\infty} \frac{1}{n} = \infty$$&lt;&#x2F;p&gt;
&lt;p&gt;Este é o exemplo que desfaz a intuição errada mais comum: &lt;strong&gt;os termos irem a zero não basta para a série convergir&lt;&#x2F;strong&gt;. Aqui $1&#x2F;n \to 0$ e mesmo assim a soma cresce sem limite.&lt;&#x2F;p&gt;
&lt;p&gt;A demonstração clássica agrupa os termos em blocos:&lt;&#x2F;p&gt;
&lt;p&gt;$$\underbrace{\frac{1}{2}}&lt;em&gt;{\ge 1&#x2F;2} + \underbrace{\frac{1}{3} + \frac{1}{4}}&lt;&#x2F;em&gt;{\ge 1&#x2F;2} + \underbrace{\frac{1}{5} + \cdots + \frac{1}{8}}_{\ge 1&#x2F;2} + \cdots$$&lt;&#x2F;p&gt;
&lt;p&gt;Cada bloco soma pelo menos $1&#x2F;2$, e há infinitos blocos. A divergência é apenas muito lenta: $\sum_{n=1}^{N} 1&#x2F;n \approx \ln N + \gamma$, onde $\gamma \approx 0{,}5772$ é a constante de Euler-Mascheroni.&lt;&#x2F;p&gt;
&lt;p&gt;Essa aproximação é exatamente o que faz aparecer o $\log n$ na análise do quicksort, do hashing com sondagem linear e do problema do colecionador de cupons.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;serie-p&quot;&gt;Série p&lt;&#x2F;h3&gt;
&lt;p&gt;$$\sum_{n=1}^{\infty} \frac{1}{n^p} \quad \text{converge} \iff p &amp;gt; 1$$&lt;&#x2F;p&gt;
&lt;p&gt;Generaliza os dois casos anteriores e serve de régua de comparação. A harmônica é o caso limítrofe $p = 1$: para $p$ ligeiramente maior a série converge; em $p = 1$ ela já diverge.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;testes-de-convergencia&quot;&gt;Testes de convergência&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Teste&lt;&#x2F;th&gt;&lt;th&gt;Quando aplicar&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Termo geral&lt;&#x2F;td&gt;&lt;td&gt;Se $a_n \not\to 0$, a série diverge. Só serve para descartar.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Comparação&lt;&#x2F;td&gt;&lt;td&gt;Compare com uma série $p$ ou geométrica conhecida&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Razão&lt;&#x2F;td&gt;&lt;td&gt;Útil quando há fatorial ou potência de $n$&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Integral&lt;&#x2F;td&gt;&lt;td&gt;Quando $a_n = f(n)$, com $f$ positiva e decrescente&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Séries alternadas&lt;&#x2F;td&gt;&lt;td&gt;Sinais alternados e $&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O teste do termo geral é o primeiro a aplicar, por ser o mais barato — mas note que ele só produz conclusão negativa. A harmônica passa nesse teste e mesmo assim diverge.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-analise-de-algoritmos&quot;&gt;Aplicações em análise de algoritmos&lt;&#x2F;h2&gt;
&lt;p&gt;A ponte entre este assunto e a computação está em comparar taxas de crescimento&lt;sup&gt;&lt;a href=&quot;#bibref-rudin1976&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
:&lt;&#x2F;p&gt;
&lt;p&gt;$$\lim_{n \to \infty} \frac{f(n)}{g(n)} = L$$&lt;&#x2F;p&gt;
&lt;p&gt;O valor de $L$ decide a relação assintótica: $L = 0$ significa que $f$ cresce estritamente mais devagar, ou seja, $f \in o(g)$; um $L$ finito e não nulo indica crescimento da mesma ordem, $f \in \Theta(g)$; e $L = \infty$ diz que $f$ domina $g$.&lt;&#x2F;p&gt;
&lt;p&gt;Três somas que aparecem com frequência:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Custo total de uma recursão que divide pela metade.&lt;&#x2F;strong&gt; O trabalho por nível forma uma progressão geométrica; quando ela é decrescente, o custo total é dominado pela raiz da recursão.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise amortizada.&lt;&#x2F;strong&gt; O crescimento de um vetor dinâmico soma $1 + 2 + 4 + \cdots + n &amp;lt; 2n$ — geométrica, logo linear no total, o que dá $O(1)$ amortizado por inserção.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Comparações no quicksort.&lt;&#x2F;strong&gt; O número esperado de comparações envolve $\sum_{i=1}^{n} 1&#x2F;i \approx \ln n$, e é daí que sai o fator logarítmico do $O(n \log n)$ esperado.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Concluir convergência a partir de $a_n \to 0$.&lt;&#x2F;strong&gt; A harmônica é o contraexemplo definitivo.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Manipular séries divergentes como se fossem números.&lt;&#x2F;strong&gt; Reagrupar termos de uma série que não converge absolutamente pode produzir qualquer resultado — é o conteúdo do teorema de Riemann sobre rearranjos.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Confundir a sequência com a série.&lt;&#x2F;strong&gt; $(1&#x2F;n)$ converge para zero; $\sum 1&#x2F;n$ diverge. São objetos diferentes.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esquecer a condição $|r| &amp;lt; 1$ na geométrica.&lt;&#x2F;strong&gt; A fórmula fechada não vale fora dela.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;span id=&quot;bibref-rudin1976&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Walter Rudin&lt;&#x2F;strong&gt; (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780070856134&quot; rel=&quot;noopener&quot;&gt;9780070856134&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Walter Rudin (1976). &lt;em&gt;Principles of Mathematical Analysis&lt;&#x2F;em&gt;. McGraw-Hill.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Transformações Lineares</title>
        <published>2024-01-20T00:00:00+00:00</published>
        <updated>2024-01-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/transformacoes-lineares/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/transformacoes-lineares/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/algebra-linear/transformacoes-lineares/">&lt;h1 id=&quot;transformacoes-lineares&quot;&gt;Transformações Lineares&lt;&#x2F;h1&gt;
&lt;p&gt;Uma &lt;strong&gt;transformação linear&lt;&#x2F;strong&gt; é uma função $T: \mathbb{R}^n \to \mathbb{R}^m$ que satisfaz duas propriedades:&lt;&#x2F;p&gt;
&lt;p&gt;$$T(\mathbf{u} + \mathbf{v}) = T(\mathbf{u}) + T(\mathbf{v})$$
$$T(c\mathbf{u}) = cT(\mathbf{u})$$&lt;&#x2F;p&gt;
&lt;p&gt;A definição é curta, mas o que ela exclui é o que a torna útil. Uma função linear preserva a estrutura do espaço: retas continuam retas, a origem continua na origem e o paralelismo se mantém. Ela pode esticar, girar, refletir e projetar — mas nunca curvar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-intuicao-a-matriz-e-a-imagem-da-base&quot;&gt;A intuição: a matriz é a imagem da base&lt;&#x2F;h2&gt;
&lt;p&gt;O fato que organiza todo o resto é este: &lt;strong&gt;uma transformação linear fica completamente determinada pelo que faz com os vetores da base&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Se $T$ é linear e você sabe onde $\mathbf{e}_1 = (1,0)$ e $\mathbf{e}_2 = (0,1)$ vão parar, sabe onde qualquer vetor vai parar. Como todo $\mathbf{x} = (x_1, x_2)$ pode ser escrito como $x_1\mathbf{e}_1 + x_2\mathbf{e}_2$, a linearidade dá:&lt;&#x2F;p&gt;
&lt;p&gt;$$T(\mathbf{x}) = x_1 T(\mathbf{e}_1) + x_2 T(\mathbf{e}_2)$$&lt;&#x2F;p&gt;
&lt;p&gt;Daí sai a representação matricial: &lt;strong&gt;as colunas da matriz são as imagens dos vetores da base&lt;&#x2F;strong&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;$$A = \begin{pmatrix} | &amp;amp; | \ T(\mathbf{e}_1) &amp;amp; T(\mathbf{e}_2) \ | &amp;amp; | \end{pmatrix}, \qquad \mathbf{y} = A\mathbf{x}$$&lt;&#x2F;p&gt;
&lt;p&gt;Com $A \in \mathbb{R}^{m \times n}$, $\mathbf{x} \in \mathbb{R}^n$ e $\mathbf{y} \in \mathbb{R}^m$. Essa leitura torna a maioria das matrizes legível à primeira vista: para saber o que uma matriz faz, olhe para onde ela manda $(1,0)$ e $(0,1)$.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;transformacoes-fundamentais-em-2d&quot;&gt;Transformações fundamentais em 2D&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;escala&quot;&gt;Escala&lt;&#x2F;h3&gt;
&lt;p&gt;$$S = \begin{pmatrix} s_x &amp;amp; 0 \ 0 &amp;amp; s_y \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;A primeira coluna é $(s_x, 0)$: o vetor $\mathbf{e}_1$ apenas se alonga. Com $s_x = s_y$ a escala é uniforme; valores negativos produzem reflexão.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;rotacao&quot;&gt;Rotação&lt;&#x2F;h3&gt;
&lt;p&gt;$$R(\theta) = \begin{pmatrix} \cos\theta &amp;amp; -\sin\theta \ \sin\theta &amp;amp; \cos\theta \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Aplique a leitura por colunas: $\mathbf{e}_1$ vai para $(\cos\theta, \sin\theta)$, que é exatamente o ponto do círculo unitário no ângulo $\theta$. A segunda coluna é o mesmo ponto girado mais 90°. Não há nada a decorar aqui — a matriz é a definição de seno e cosseno escrita em colunas.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;cisalhamento&quot;&gt;Cisalhamento&lt;&#x2F;h3&gt;
&lt;p&gt;$$H = \begin{pmatrix} 1 &amp;amp; k \ 0 &amp;amp; 1 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Mantém $\mathbf{e}_1$ fixo e inclina $\mathbf{e}_2$. É a transformação que leva um quadrado a um paralelogramo — e a base do efeito de itálico em tipografia.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;projecao&quot;&gt;Projeção&lt;&#x2F;h3&gt;
&lt;p&gt;$$P = \begin{pmatrix} 1 &amp;amp; 0 \ 0 &amp;amp; 0 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Achata tudo sobre o eixo $x$. Diferentemente das anteriores, esta &lt;strong&gt;perde informação&lt;&#x2F;strong&gt;: dois vetores distintos podem ter a mesma imagem, e não existe transformação que desfaça a operação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;um-exemplo-trabalhado&quot;&gt;Um exemplo trabalhado&lt;&#x2F;h2&gt;
&lt;p&gt;Girar o ponto $(2, 0)$ em 90°. Com $\theta = 90°$, temos $\cos\theta = 0$ e $\sin\theta = 1$:&lt;&#x2F;p&gt;
&lt;p&gt;$$R(90°)\begin{pmatrix} 2 \ 0 \end{pmatrix} = \begin{pmatrix} 0 &amp;amp; -1 \ 1 &amp;amp; 0 \end{pmatrix}\begin{pmatrix} 2 \ 0 \end{pmatrix} = \begin{pmatrix} 0 \ 2 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;O ponto que estava sobre o eixo $x$ foi para o eixo $y$, à mesma distância da origem — como se espera de uma rotação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;composicao-e-a-ordem-das-operacoes&quot;&gt;Composição e a ordem das operações&lt;&#x2F;h2&gt;
&lt;p&gt;Aplicar $T_1$ e depois $T_2$ corresponde ao produto das matrizes:&lt;&#x2F;p&gt;
&lt;p&gt;$$T_2(T_1(\mathbf{x})) = A_2 A_1 \mathbf{x}$$&lt;&#x2F;p&gt;
&lt;p&gt;Repare na ordem: a matriz da &lt;strong&gt;primeira&lt;&#x2F;strong&gt; transformação fica à direita, encostada no vetor. E como o produto de matrizes não é comutativo, $A_2A_1 \neq A_1A_2$ em geral — girar e depois escalar produz resultado diferente de escalar e depois girar.&lt;&#x2F;p&gt;
&lt;p&gt;Essa é a origem de uma classe inteira de defeitos em computação gráfica. Quando um objeto aparece deformado ou no lugar errado, a primeira hipótese a testar é a ordem da multiplicação.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;determinante-o-fator-de-area&quot;&gt;Determinante: o fator de área&lt;&#x2F;h2&gt;
&lt;p&gt;O determinante de $A$ diz quanto a transformação multiplica áreas — ou volumes, em dimensões maiores:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;$\det(A)$&lt;&#x2F;th&gt;&lt;th&gt;Significado geométrico&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;$\det(A) = 1$&lt;&#x2F;td&gt;&lt;td&gt;Preserva área — o caso da rotação&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\det(A) = 2$&lt;&#x2F;td&gt;&lt;td&gt;Dobra a área&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\det(A) = 0$&lt;&#x2F;td&gt;&lt;td&gt;Achata o espaço; a transformação não é inversível&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;$\det(A) &amp;lt; 0$&lt;&#x2F;td&gt;&lt;td&gt;Inverte a orientação, ou seja, reflete&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;O caso $\det(A) = 0$ é o mais importante na prática: ele indica que a transformação colapsou pelo menos uma dimensão, e portanto nenhuma inversa existe. Numericamente, um determinante próximo de zero antecipa instabilidade em qualquer algoritmo que tente inverter a matriz.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;coordenadas-homogeneas&quot;&gt;Coordenadas homogêneas&lt;&#x2F;h2&gt;
&lt;p&gt;A translação — somar um vetor constante — &lt;strong&gt;não é linear&lt;&#x2F;strong&gt;: ela move a origem. Isso é inconveniente, porque significa que a translação não caberia no mesmo formalismo matricial das demais operações.&lt;&#x2F;p&gt;
&lt;p&gt;A saída é acrescentar uma dimensão. Um ponto $(x, y)$ do plano passa a ser representado como $(x, y, 1)$, e a translação vira:&lt;&#x2F;p&gt;
&lt;p&gt;$$T = \begin{pmatrix} 1 &amp;amp; 0 &amp;amp; t_x \ 0 &amp;amp; 1 &amp;amp; t_y \ 0 &amp;amp; 0 &amp;amp; 1 \end{pmatrix}, \qquad
T\begin{pmatrix} x \ y \ 1 \end{pmatrix} = \begin{pmatrix} x + t_x \ y + t_y \ 1 \end{pmatrix}$$&lt;&#x2F;p&gt;
&lt;p&gt;Com esse artifício, rotação, escala, cisalhamento, projeção e translação passam a ser todas multiplicações de matriz. É por isso que APIs gráficas trabalham com matrizes $4 \times 4$ em espaço tridimensional: a quarta linha e coluna existem para acomodar a translação e a projeção em perspectiva.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;aplicacoes-em-computacao&quot;&gt;Aplicações em computação&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Computação gráfica.&lt;&#x2F;strong&gt; Toda posição de vértice na tela é o resultado de uma cadeia de transformações — modelo, visão, projeção — aplicada como produto de matrizes na GPU&lt;sup&gt;&lt;a href=&quot;#bibref-lang2005&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
. A eficiência do pipeline gráfico vem justamente de todas essas operações compartilharem uma única representação.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Análise de componentes principais.&lt;&#x2F;strong&gt; O PCA encontra a projeção linear que preserva o máximo de variância dos dados. Reduzir de mil dimensões para duas é aplicar uma transformação $T: \mathbb{R}^{1000} \to \mathbb{R}^2$ escolhida a partir dos autovetores da matriz de covariância&lt;sup&gt;&lt;a href=&quot;#bibref-lang2005&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Redes neurais.&lt;&#x2F;strong&gt; Cada camada densa é uma transformação linear seguida de uma função não linear. Sem a não linearidade, a composição de várias camadas colapsaria numa única transformação linear — e é exatamente por isso que a função de ativação é indispensável.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Processamento de sinais.&lt;&#x2F;strong&gt; A transformada discreta de Fourier é uma transformação linear: uma mudança de base do domínio do tempo para o da frequência.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;erros-comuns&quot;&gt;Erros comuns&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Confundir a ordem da composição.&lt;&#x2F;strong&gt; $A_2A_1$ significa &quot;primeiro $A_1$&quot;. Várias bibliotecas gráficas usam convenção de vetor-linha, em que a ordem se inverte — verifique a documentação antes de supor.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Esperar que toda matriz quadrada seja inversível.&lt;&#x2F;strong&gt; Se $\det(A) = 0$, a informação foi perdida e não há como recuperá-la.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Aplicar translação sem coordenadas homogêneas.&lt;&#x2F;strong&gt; Somar o deslocamento separadamente funciona, mas impede compor a operação com as demais num único produto.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Acumular erro numérico ao compor rotações.&lt;&#x2F;strong&gt; Multiplicar milhares de matrizes de rotação em ponto flutuante degrada a ortogonalidade; em simulação contínua, reortogonalize periodicamente.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;span id=&quot;bibref-lang2005&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Serge Lang&lt;&#x2F;strong&gt; (1987). &lt;em&gt;Linear Algebra&lt;&#x2F;em&gt;. Springer. DOI: &lt;a href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.1007&amp;#x2F;978-1-4757-1949-9&quot; rel=&quot;noopener&quot;&gt;10.1007&amp;#x2F;978-1-4757-1949-9&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;Serge Lang (1987). &lt;em&gt;Linear Algebra&lt;&#x2F;em&gt;. Springer.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="pt-BR">
        <title>Caminhos eulerianos</title>
        <published>2024-01-15T00:00:00+00:00</published>
        <updated>2024-01-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-eulerianos/"/>
        <id>https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-eulerianos/</id>
        
        <content type="html" xml:base="https://pages.singularjourney.org/devjonatas/guia-matematica/topicos/discreto/caminhos-eulerianos/">&lt;h1 id=&quot;caminhos-eulerianos&quot;&gt;Caminhos Eulerianos&lt;&#x2F;h1&gt;
&lt;p&gt;Um &lt;strong&gt;grafo euleriano&lt;&#x2F;strong&gt; é um grafo onde é possível percorrer todas as arestas exatamente uma vez.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;definicao-formal&quot;&gt;Definição Formal&lt;&#x2F;h2&gt;
&lt;p&gt;Um grafo conectado é &lt;strong&gt;euleriano&lt;&#x2F;strong&gt; se e somente se todos os seus vértices têm grau par.&lt;&#x2F;p&gt;
&lt;p&gt;$$G = (V, E) \text{ é euleriano } \iff \forall v \in V: \deg(v) \text{ é par}$$&lt;&#x2F;p&gt;
&lt;h2 id=&quot;teorema-de-euler&quot;&gt;Teorema de Euler&lt;&#x2F;h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Um grafo conexo tem um circuito euleriano se e somente se todos os seus vértices têm grau par.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;exemplo&quot;&gt;Exemplo&lt;&#x2F;h2&gt;
&lt;p&gt;Considere o grafo $K_4$ (grafo completo com 4 vértices):&lt;&#x2F;p&gt;
&lt;div class=&quot;mermaid&quot;&gt;
graph TD
    A((1)) --- B((2))
    A --- C((3))
    A --- D((4))
    B --- C
    B --- D
    C --- D
&lt;&#x2F;div&gt;
&lt;h2 id=&quot;algoritmo-de-hierholzer&quot;&gt;Algoritmo de Hierholzer&lt;&#x2F;h2&gt;
&lt;p&gt;O algoritmo de Hierholzer encontra um circuito euleriano em tempo $O(|E|)$:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Escolher qualquer vértice como início&lt;&#x2F;li&gt;
&lt;li&gt;Seguir arestas não visitadas até retornar ao vértice inicial&lt;&#x2F;li&gt;
&lt;li&gt;Enquanto houver arestas não visitadas, encontrar um vértice no circuito atual com arestas não visitadas e repetir&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;sup&gt;&lt;a href=&quot;#bibref-cormen2009&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
&lt;h2 id=&quot;aplicacoes&quot;&gt;Aplicações&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Problema do carteiro chinês&lt;&#x2F;strong&gt;&lt;sup&gt;&lt;a href=&quot;#bibref-cormen2009&quot; class=&quot;ref-link&quot;&gt;[ref]&lt;&#x2F;a&gt;&lt;&#x2F;sup&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Roteamento de veículos&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Diseño de circuitos&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;referencias&quot;&gt;Referências&lt;&#x2F;h2&gt;
&lt;span id=&quot;bibref-cormen2009&quot; class=&quot;bib-entry&quot;&gt;&lt;strong&gt;Thomas H. Cormen and Charles E. Leiserson and Ronald L. Rivest and Clifford Stein&lt;&#x2F;strong&gt; (2009). &lt;em&gt;Introduction to Algorithms&lt;&#x2F;em&gt;. MIT Press. ISBN &lt;a href=&quot;https:&#x2F;&#x2F;openlibrary.org&#x2F;isbn&#x2F;9780262533058&quot; rel=&quot;noopener&quot;&gt;9780262533058&lt;&#x2F;a&gt;.&lt;&#x2F;span&gt;</content>
        
    </entry>
</feed>
