Teoria da Computação: Aplicações e Problemas de Investigação Marco Antonio de Castro Barbosa marco.cb@gmail.com mbarbosa@utfpr.edu.br
Objetivos: Apresentar pesquisas realizadas; Identificar questões de investigação em aberto; Elencar tópicos e áreas de interesse de investigação.
Tamanho da entrada do problema Escolha da operação fundamental Contagem do número de execuções desta operação Exemplo: 1. maior vet[1] ; 2. para i de 2 até n faça 3. se maior < vet[i] então 4. maior vet[i]; 4. fim_para ; 5. retorne-saída(maior) Complexidade no pior caso = 0(n) (ou (n))
O protótipo ANAC O ANAC (ANAlisador de Complexidade) é um analisador léxicosintático; Recebe um algoritmo escrito numa linguagem fonte Pascal-like pré-estabelecida e gera a análise da complexidade do algoritmo; Permite a visualização de algumas etapas do processo intermediário de análise do algoritmo e do resultado final na forma de uma expressão simplificada, se possível, em ordem assintótica de complexidade; Gera os resultados no Pior Caso;
Metodologia de cálculo de complexidade para estruturas algorítmicas. [TOS 90] Linguagem de programação Java. Simplificação da equação obtida fornecendo ao usuário uma solução mais fácil de ser analisada. Analise algoritmos não recursivos.
top-down Quando uma estrutura algorítmica é identificada a equação de complexidade referente a ela é definida. árvore-sintática correspondente. Notação: x i = complexidade da estrutura x i ; S i = representa as S i s estruturas presentes no algoritmo. p(x) = probabilidade da variável x ser verdadeira;
Programa Análise do programa Árvore da Estrutura Atribuição program atrib; x1 = c (a := b) + x2 = 1 + x2 begin x2 = c (end) = 0; a:=b x1 a := b; x1 = 1 + 0 = 1 end. 0(1) end x2
Programa Análise do programa Program atrib; x1 = C ( a<=b ) + x2 + x3 begin x2 = C ( menor := a ) + x4 = 1 + x4 if a <= b then x4 = C ( menor := b ) + x5 = 1 + x5 menor := a; x5 = C ( endif ) = 0 else x4 = 1 + 0 = 1 menor := b; x2 = 1 + 1 = 2 endif; x3 = C ( end ) = 0 end. x1 = 1 + 2 + 0 = 1 O ( 1 )
j i c(for k = i to j do a)(n) = k 0 c(a)( t k ( n)) Programa Análise do programa Program itera; x1 = c (for i:= 1 to n do x2) + x3 = [SUM( i=1, n) x2] + x3 begin x2 = c (a:=b ) + x4 = 1 + x4 for i := 1 to n do x4 = c (endfor) = 0 a := b; x2 = 1 + 0 = 0 endfor; x3 = c (end) = 0 end. x1 = [SUM(i=1,n) 0] + 0 = n + 0 = n O(n)
c(while a do b)(n) = c( a)( t k ( n)) k 1 i 0 ( c( a) c( b))( t i ( n)) Programa Análise do programa Program itecon; x1 = C( while a < b do x2 ) + x3 = C ( a<b ) + [ n.x2 ] + x3 begin x2 = C ( c := d ) + x4 = 1 + x4 while a < b do x4 = C ( endwhile ) = 0 a := b; x2 = 1 + 0 = 1 endwhile; x3 = C ( end ) = 0 end. x1 = 1 + [ n.1 ] + 0 = n O ( n )
Programa Análise do programa If a < b then x1 = c(a<b) + x2 + x3 = x1 = 1 + x2 + x3 vet[i] := a; x2 = c(vet[i] := a ) + x4 = 1 + x4 else x4 = c(vet[i] := b ) + x5 = 1 + x5 vet[i] := b; x5 = c (endif) = 0 endif; x4 = 1 + 0 = 1 for i:=1 to n do x2 = 1 + 1 = 2 vet[i] := 0; x3 = c (for i:= 1 to n do x6 ) + x7 x3 = [ SUM( i=1, n) x6 ] + x7 endfor; x6 = c(vet[i] := 0 ) + x8 = 1 + x8 end. x8 = c (endfor) = 0 x6 = 1 + 0 = 1 x7 = c (end) = 0 x3 = [ SUM( i=1, n) 1 ] + 0 = x3 = n + 0 = n x1 = 1 + 2 + n = n O (n)
Reformulação do código; Melhor tratamento de erros; compiladores Análise de algoritmos no caso médio; Maple?, Matlab?,... Análise de algoritmos recursivos. Equações de recorrência, Maple?, Matlab?, Prolog?,...
SBIE CLEI CNMAC SBPO
Tese: Specification and Refinement of Software Connectors
Novos desafios para a área de Métodos Formais/Engenharia de Software; Modelagem de sistemas complexos; Modelos massivamente paralelos; Desenvolvimento de software voltado para a internet
Especificação formal de componentes de software; Especificação formal de conectores de software; Desenvolvimento de um cálculo para se raciocinar sobre os modelos desenvolvidos Noções de igualdade e refinamento de conectores.
Modelo relacional sem estado Modelo Coalgébrico com estado Espeficação e comportamento de interfaces de software Noção formal de configuração Protótipo de animação na linguagem Haskell
Extensão do modelo para tratamento de reconfiguração dinâmica; -calculus? Prototipação em linguagem Java; Metodologia de cálculo de desempenho para arquitetura de software.
Journal of Universal Computer Science (2) Science of Computer Programming Simpósio Brasileiro de Linguagens de programação (2) Lecture Notes in Computer Science (2) Eletronic Notes in Computer Science (3)
Tratamento de Problemas NP-Completo, NP- Hard; Problemas de Otimização Combinatória; Métodos Heurísticos, algoritmos exatos e aproximados; Paradigmas de Projetos de Algoritmos Programação Dinâmica, Divisão-e-conquista, Método Guloso
Problema do Caixeiro Viajante; Problema de Roteamento de Veículos: Frota Homogênea; Frota Heterogênea; Com janela de tempo; Problema da Máxima Cobertura; Problema da Árvore Geradora Mínima Generalizado
Obrigado! Dúvidas? Perguntas? Comentários?