Complexidade de Algoritmos e Análise de Desempenho

Revisão de Conceitos

Última ocorrência: 2023-08-14 em Universidade LaSalle Canoas

Posts Relacionados

Assunto

  1. Linguagens Regulares e Automatos Finitos
    1. DFA, NFA e &-NFA
    2. Conversão NFA->DFA
    3. Lema do Bomboamento
      • Seja $L$ uma linguagem regular, existe uma palavra $\omega \in L$ que pode ser escrita como $\omega = xyz$, onde $\abs{\omega} \ge p$ e $p \ge 1$, tal que:
        1. $\abs{y} \ge 1$
        2. $\abs{xy} \le p$
        3. $(\forall n \ge 0)(xy^{n}z \in L)$
  2. Linguagens Livres de Contexto e Automatos de Pilha
    • $L = \{ a^{n}b^{n}\ |\ n \ge 0 \}$
    • A linguagem $L = \{a^{n}b^{n}c^{n}\ |\ n \ge 0 \}$ não é uma lingagem livre de contexto. A gramática dependente de contexto que reconheçe essa linguagem pode ser escrita como:
      \(\begin{align} S & \rightarrow aXbC \\ X & \rightarrow S | \epsilon \\ Cb & \rightarrow bC \\ C & \rightarrow c \end{align}\)
  3. Linguagens Recursivas (Automato Linearmente Limitado, Decidibilidade)
  4. Linguagens Recursivamente Enumeráveis (Turing Machine)
  5. Equivalência de Máquinas

Questões

  1. Prove que $L = \{ a^{n}b^{n}\ |\ n \ge 0 \}$ não é uma linguagem regular.
  2. Prove que $L = \{ a^{n}b^{n}c^{n}\ |\ n \ge 0 \}$ não é uma linguagem livre de contexto.
  3. Projeto

    Implemente um simulador de autômatos finitos determinísticos, sendo que a entrada para o programa é dada por um arquivo no formato:

     q0
     a b
     q0 q1 q2 q3
     q1 q3
     q0 q1 a
     q1 q1 a
     q1 q2 b
     q2 q1 b
     q2 q3 a
    

    onde:

    • Linha 1 define o estado inicial
    • Linha 2 define os símbolos do alfabeto
    • Linha 3 define o conjunto de estados
    • Linha 4 define o conjunto de estados finais
    • Linhas 5-fim do arquivo definem as transições entre os estados

    Após ler o arquivo, o usuário deve entrar com uma palavra (via teclado), e o programa deve responder com “Aceita”, casa a palavra seja aceita pela linguagem definida pelo autônome, ou “Rejeita”, caso contrário.

    Um segundo exemplo de autômato para testar o programa:

     q0
     a b
     q0 q1
     q1
     q0 q1 a
     q1 q0 b
    
  4. Projeto: Modifique o projeto do item 3 dando suporte a automatos finitos não-determinísticos, sendo que a palavra vazia é representada pelo caracter ‘&’
  5. Projeto: Modifique o projeto do item 4 adicionando uma opção para converter o NFA em DFA.
  6. Apesar dos parsers de linguagem de programação, em geral, serem implementados a partir de uma gramática livre de contexto, demonstre que muitas das linguagens de programação de uso geral, como C, C++, Java, Javascript ou Python, são frutos de gramáticas sensíveis ao contexto.

Recursos para essa aula

  1. Autômatos Finitos Determinísticos
  2. Autômatos Finitos Não-determinísticos
  3. Gramáticas livres de contexto
  4. Pumping Lemma
  5. Pumping Lemma for CFL

Bibliografia

  1. Menezes, Paulo Blauth. Linguagens Formais e Automatos. 3a Ed. Bookman, 2011.
  2. Hopcroft, John E., Ullman, D. Jeffrey, Motwani, Rajeev. Introdução à Teoria de Autômatos, Linguagens e Computação. Elsevier, 2002.
  3. Sipser, Michael. Introdução à Teoria da Computação. Cengage Learning, 2015.