Devido à pandemia de COVID-19, e seguindo as diretrizes do Ifes, esta disciplina
será ministrada remotamente.
Plano de Ensino
- Carga Horária: 45h
- Aulas Previstas:
15
Objetivos
Objetivo Geral
Capacitar os alunos a avaliar os principais modelos de computação, permitindo que estes analisem
as noções e as limitações dos conceitos de computabilidade e de eficiência computacional.
Objetivos Específicos
- Analisar e produzir provas em sistemas formais.
- Analisar definições de linguagens e suas propriedades.
- Desenvolver expressões regulares, gramáticas e autômatos como reconhecedores
de linguagens.
- Analisar e correlacionar os conceitos de computabilidade, decidibilidade e
redutibilidade.
- Identificar problemas decidíveis e indecidíveis.
- Analisar a complexidade de tempo de algoritmos e suas classes de
complexidade.
- Julgar qual a estrutura de dados mais adequada à solução de um determinado
problema com base em suas características de complexidade.
- Desenvolver algoritmos utilizando técnicas de projeto de algoritmos de
dividir-e-conquistar, programação dinâmica, e algoritmos gulosos.
- Analisar a complexidade de espaço de algoritmos.
- Avaliar e aplicar estratégias para lidar com problemas intratáveis.
Ementa
Lógica de programação; Construção de Algoritmos; Complexidade de Algoritmos;
Algoritmos de Busca e Ordenação; Recursividade; Estruturas de Dados; Árvores;
Grafos; Linguagens Formais e Autômatos; Tipos de Linguagem e seus
Reconhecedores.
Referências Bibliográficas
- Michael Sipser. “Introduction to the Theory of Computation.” 3rd ed. Cengage
Learning. 2013.
- John C. Martin. “Introduction to Languagens and the Theory of Computation.”
4th ed. McGraw-Hill. 2011.
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.
“Introduction to Algorithms.” 3rd ed. The MIT Press. 2009.