O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional

Tamanho: px
Começar a partir da página:

Download "O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional"

Transcrição

1 O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional Ruben Carlos Gonçalves Martins Dissertação para obtenção do Grau de Mestre em Matemática e Aplicações Presidente: Orientação: Vogais: Júri Prof a. Maria Cristina Sales Viana Serodio Sernadas Prof a. Maria Ines Camarate de Campos Lynce de Faria Prof. Carlos Manuel Costa Lourenco Caleiro Prof. Vasco Miguel Gomes Nunes Manquinho Outubro 2007

2

3 Agradecimentos A poeira une-se para formar uma grande montanha. Provérbio Coreano Finalmente acabei! Página a página, esta dissertação foi ganhando forma e eu gostaria de agradecer a todos os que tornaram isto possível: A toda a minha família e à Iara Gonçalves, por toda a força que me deram. À Professora Inês Lynce, por me ter apoiado ao longo da elaboração desta dissertação e pela sua excelente orientação, sempre disponível para ajudar. Ao Professor João Marques da Silva, por me ter motivado a um estudo mais profundo do mundo SAT. A todo o grupo SAT, nomeadamente à Ana Sofia Graça pelas suas valiosas opiniões. A todos os meus amigos. Por fim, gostaria de agradecer à Fundação para a Ciência e Tecnologia que suportou parcialmente a elaboração desta dissertação no âmbito do projecto de investigação SATPot (referência POSC/EIA/61852/2004). i

4 ii

5 Resumo Nos últimos anos assistimos a um progresso notável na área de satisfação proposicional (SAT), com contribuições tanto a nível teórico como prático. Apesar das ferramentas de SAT requererem tempo de execução exponencial no pior caso, estas conseguem actualmente resolver instâncias de problemas difíceis. No entanto, mesmo com a evolução constante das ferramentas de SAT, para resolvermos instâncias de forma mais eficiente temos também de ter em consideração modelações adequadas aos problemas. Esta dissertação tem por objectivo contribuir para o estudo do impacto da modelação na resolução de problemas de SAT. Para tal, iremos estudar diferentes codificações para quatro problemas distintos: Social Golfer, Round Robin, Completação de Quasigroups e Torres de Hanói. No problema do Social Golfer apresentamos duas codificações que são baseadas em diferentes tipos de variáveis, e efectuamos um estudo experimental onde comparamos as diferentes abordagens. No Round Robin melhoramos uma codificação já existente, quebrando as simetrias globais. Em seguida iremos comparar esta codificação com outra elaborada por nós, que tem como base a codificação apresentada para o problema do Social Golfer. Relativamente ao problema da Completação de Quasigroups, estudamos o impacto da quebra de simetrias locais, visto que este problema não apresenta simetrias globais. Por fim, no problema das Torres de Hanói apresentamos duas codificações conhecidas para o problema e mostramos como as podemos melhorar. Apresentamos também uma nova codificação que permite resolver este problema sem ser necessário a utilização de um algoritmo de procura. Após a análise dos resultados obtidos nos quatro problemas estudados, concluímos que apesar da importância da evolução das ferramentas de SAT, o uso de modelações adequadas a cada problema é igualmente importante para a resolução eficiente dos mesmos. Palavras Chave Satisfação Proposicional, Modelação em SAT, Problema do Social Golfer, Round Robin, Completação de Quasigroups, Torres de Hanói iii

6 iv

7 Abstract Recently, we have seen a remarkable progress in propositional satisfiability (SAT), with theoretical and practical contributions. Even though the SAT solvers have exponential run time in the worst case, they can currently be used to solve hard problem instances. This dissertation contributes to a better understanding of the impact of SAT modelling. With this in mind, we will study four distinct problems: Social Golfer, Round Robin, Quasigroup Completation and Towers of Hanoi. In the Social Golfer problem, we will compare two encodings that differ in the set of variables used. In the Round Robin problem, we study an old encoding and improve it by breaking global smmetries. We also present a new encoding for this problem, that is based in our encoding for the Social Golfer problem. In the Quasigroup Completation problem, we study the impact of breaking local symmetries, since global symmetries do not hold for this problem. Finally, in the Towers of Hanoi problem, we study and improve known encodings. We also present a new encoding that is able to solve this problem without search. Taking into account the experimental results for the problems described above, we can conclude that, even though an efficient SAT solver is needed, SAT modelling is also very important in order to efficiently solve benchmark problems. Keywords Propositional Satisfiability, SAT modelling, Social Golfer Problem, Round Robin, Quasigroup Completation Problem, Towers of Hanoi v

8 vi

9 Índice 1 Introdução 1 2 Conceitos Gerais Satisfação Booleana Algoritmos de SAT Algoritmo de Davis-Putnam (DP) Algoritmo de Davis-Longemann-Loveland (DPLL) Heurísticas de Ramificação Algoritmo de Dedução Retrocesso Não Cronológico Outros aspectos importantes Ferramentas de SAT actuais Simetrias Remodelação Restrições Adicionais Modificação do Algoritmo de Procura Social Golfer Conceitos Social Golfer em SAT Codificação de Gent e Lynce A nossa Codificação Resultados Experimentais Comparação entre Codificações Conclusões e Trabalho Futuro Round Robin Conceitos vii

10 4.2 Round Robin em SAT Codificação de Manyà e Béjar A nossa Codificação Resultados Experimentais Comparação entre Codificações Conclusões e Trabalho Futuro Problema da Completação de Quasigroups Conceitos Problema da Completação de Quasigroups QCPs como um problema de SAT Quebra de Simetrias em QCPs Resultados Experimentais Instâncias QCP com solução Instâncias QCP sem solução Conclusões e Trabalho Futuro Torres de Hanói Conceitos Torres de Hanói STRIPS ToH em SAT Codificação de Selman e Kautz Codificação de Prestwich A nossa Codificação Resultados Experimentais Comparação entre Codificações Codificação Simplificada Conclusões e Trabalho Futuro Conclusões e Trabalho Futuro 67 viii

11 Lista de Figuras 2.1 Comparação entre os algoritmos de 2-literal watching e de head/tail Retrocesso Cronológico e Retrocesso Não Cronológico Simetria no problema da coloração de grafos Simetria local no problema da coloração de grafos Uma solução para a instância < 3, 2, 2 > Matriz de ladder para a solução dada na figura Comparação entre a codificação de Gent e Lynce e a codificação de Martins Comparação entre a codificação de Gent e Lynce e a codificação de Martins para o problema de Kirkman s Schoolgirl Uma solução para o problema de Round Robin com n = Quebra das simetrias entre os campos Quebra das simetrias entre as semanas Aplicação da coluna dummy Exemplo de um quadrado Latino 5 5 representado como uma tabela de multiplicação Exemplo de um QCP de ordem Exemplo de uma simetria local nos quasigroups Simetria local lsym 22 presente nos QCPs Simetria local lsym 23 presente nos QCPs Simetria local lsym 32 presente nos QCPs Exemplo de outras (mais complexas) simetrias locais presentes nos QCPs Comparação directa entre codificações com (lsym 22, lsym 23, lsym 32, lsym all ) e sem quebra (w/o lsym) de simetrias em instâncias QCP com solução Comparação directa entre codificações com (lsym 22, lsym 23, lsym 32, lsym all ) e sem quebra (w/o lsym) de simetrias em instâncias QCP com solução Solução para as Torres de Hanói com 3 discos Sequência dos discos a serem movidos ix

12 6.3 Movimentos similares entre a primeira e a segunda sequência x

13 Lista de Tabelas 1.1 Tabela de verdade para a fórmula ( x 1 x 2 ) (x 2 x 3 ) Evolução das ferramentas de SAT na última década Comparação entre a codificação de Manyà e Béjar e as codificações <simetrias>, <dummy> e <all> Comparação entre as diferentes codificações Percentagem de redução do número de soluções usando as diferentes codificações Número de literais adicionais para codificar lsym 22, lsym 23 e lsym Instâncias QCP com solução, usando o Satz com um tempo limite de 6000s Análise da percentagem de cláusulas úteis na quebra da simetria lsym Instâncias QCP com solução, usando blindsatz com um tempo limite de 1000s Análise da % ganha pelas codificações com quebra de simetrias face a w/o lsym Instâncias QCP sem solução, usando blindsatz com um tempo limite de 1000s Análise da % ganha pelas codificações com quebra de simetrias face a w/o lsym Comparação entre o número de variáveis e cláusulas de cada codificação Comparação entre as diferentes codificações Codificação {<seq>,<pp1>} Comparação entre o tamanho das codificações <simp> e <seq,pp1> xi

14 xii

15 Lista de Algoritmos Davis-Putnam (DP) Davis-Longemann-Loveland (DPLL) Gerador de quasigroups com buracos xiii

16 xiv

17 1 Introdução O que é SAT? Satisfação Proposicional (SAT) pode ser simplesmente caracterizada por lógica proposicional e complexidade computacional. SAT aparenta ser fácil mas no entanto é difícil. É fácil na sua formulação: os problemas SAT são codificados através da lógica proposicional, uma lógica com uma expressividade limitada. É difícil na sua resolução: encontrar uma solução ou provar que não existe solução tem uma complexidade exponencial na dimensão do problema. Porque é que SAT é importante? O teorema de Cook[15] foi demonstrado por Stephen Cook em O problema de SAT foi o primeiro problema a ter sido demonstrado ser N P-Completo. Além da sua importância teórica, o problema de SAT também é conhecido por diversas aplicações práticas, tais como, problemas de planeamento[48], robótica[21], pesquisas em base de dados[71], construção de circuitos integrados[1], verificação de modelos[4], criptografia[61], bioinformática[53]. Estes problemas podem todos ser codificados em lógica proposicional, ou seja, podem ser reduzidos a problemas de SAT. Nos últimos anos assistimos a um progresso notável na evolução das ferramentas de SAT. Actualmente, estas ferramentas são capazes de resolver instâncias de problemas com milhares de variáveis e milhões de cláusulas. Qual é o objectivo desta dissertação? Apesar da constante evolução das ferramentas de SAT, a modelação tem um papel importante na resolução eficiente de problemas de SAT. Com esta dissertação pretendemos estudar o impacto da modelação na resolução de problemas de SAT e mostrar que é necessária uma modelação adequada a cada problema para a resolução eficiente do mesmo. Para ilustrar a evolução das ferramentas de SAT, podemos considerar uma abordagem simples ao problema de SAT. Se considerarmos a fórmula ϕ = ( x 1 x 2 ) (x 2 x 3 ), onde x 1, x 2 e x 3 representam variáveis Booleanas, que podem tomar o valor de verdadeiro ou falso. Queremos encontrar uma atribuição de valores tal que a fórmula ϕ seja satisfeita. Uma possível abordagem é a construção de uma tabela de verdade (ver tabela 1.1). Analisando a tabela 1.1, podemos verificar que existem cinco atribuições que satisfazem a fórmula. No entanto, se olharmos para as n variáveis chegamos à conclusão que existem 2 n possíveis atribuições. Considerando que a maioria dos problemas tem um elevado número de variáveis, isto 1

18 x 1 x 2 x 3 ( x 1 x 2 ) (x 2 x 3 ) ( x 1 x 2 ) (x 2 x 3 ) T T T T T T T T F T T T T F T F T F T F F F F F F T T T T T F T F T T T F F F T T T F F F T F F Tabela 1.1: Tabela de verdade para a fórmula ( x 1 x 2 ) (x 2 x 3 ). torna esta abordagem muito pouco eficiente. Actualmente as ferramentas de SAT usam métodos de procura que, apesar de requererem tempo de execução exponencial no pior caso, conseguem resolver instâncias com milhares de variáveis e milhões de cláusulas. Instância Posit 94 (s) Grasp 96 (s) Chaff 01 (s) Siege 04 (s) ssa bf design 1 > design 3 > f ind > splitter 42 > 7200 > c6288 > 7200 > 7200 > pipe > 7200 > 7200 > 7200 > 7200 Tabela 1.2: Evolução das ferramentas de SAT na última década. Na tabela 1.2 podemos observar a evolução das ferramentas de SAT na última década. Nesta tabela são apresentadas algumas instâncias de diversos problemas que foram testadas usando as ferramentas mais eficientes dos anos em questão. Apesar da comunidade de SAT se encontrar extremamente motivada para melhorar a eficiência das ferramentas de SAT, pouco se tem feito no que respeita à modelação de problemas. Acreditamos que muitos problemas não beneficiam da eficiência das ferramentas de SAT devido a modelações inadequadas. Nesta dissertação iremos apresentar diferentes modelações para diferentes problemas e iremos comparar os resultados obtidos. Esta dissertação encontra-se organizada da seguinte maneira. O capítulo 2 apresenta os conceitos fundamentais para a compreensão da restante tese. Estes conceitos irão focar noções básicas de lógica proposicional e de complexidade computacional. Iremos mostrar de uma forma geral as componentes de uma ferramenta de SAT actual, assim como dar a conhecer as ferramentas que iremos utilizar na restante dissertação. Acabamos este capítulo com noções de simetrias em problemas de SAT e maneiras de quebrar estas simetrias. A quebra de simetrias é um aspecto importante na modelação de problemas de SAT. No capítulo 3 estudamos o problema do Social Golfer. Neste capítulo comparamos a codificação de Gent e Lynce[30] contra a nossa codificação para uma sub-classe de problemas do Social Golfer. A grande diferença entre estas duas codificações é o conjunto de variáveis usadas. O nosso objectivo neste capítulo é não apenas o de resolver algumas instâncias deste problema de forma mais eficiente mas também o de aproveitar a codificação gerada para ser aplicada ao problema do Round Robin, a ser apresentado no capítulo 4. No capítulo 4 estudamos o problema do Round Robin. Neste capítulo apresentamos a codificação 2

19 de Manyà e Béjar[9] e mostramos como podemos melhorar esta codificação através da quebra de simetrias e do uso da coluna dummy. Em seguida apresentamos uma codificação baseada na nossa codificação do Social Golfer e comparamos esta codificação com as anteriores. Dada a importância da quebra das simetrias, no capítulo 5 iremos estudar o problema da Completação de Quasigroups. Apesar deste problema não apresentar simetrias globais, apresenta simetrias locais. Iremos identificar e quebrar algumas destas simetrias locais. Posteriormente iremos comparar as codificações com e sem quebra de simetrias locais. No capítulo 6 estudamos o problema das Torres de Hanói. Iremos apresentar a codificação de Selman e Kautz[48; 46] e a codificação de Prestwich[65] para este problema. Mostraremos como podemos melhorar estas codificações e apresentaremos uma codificação que consegue ser resolvida sem ser necessário o uso de algoritmos de procura. Este é um exemplo de um problema que com a modelação adequada pode ser trivialmente resolvido. Finalmente no capítulo 7, concluímos esta dissertação e apresentamos trabalho futuro. 3

20 4

21 2 Conceitos Gerais Neste capítulo introduzimos alguns dos conceitos utilizados nesta dissertação. Começamos por apresentar algumas definições e notações relacionadas com Satisfação Booleana. Em seguida iremos dar uma ideia geral da evolução dos algoritmos de SAT e das suas diversas componentes. Terminamos com noções sobre simetrias em problemas de SAT e com formas de lidar com estas simetrias. 2.1 Satisfação Booleana Seja X = {x i } i N o conjunto das variáveis proposicionais, que podem ser atribuídas o valor 0 (falso) ou 1 (verdadeiro). Definição (Variável Livre). Uma variável é livre quando não tem qualquer valor atribuído. Definição (Fórmulas Proposicionais). Seja Φ o conjunto das fórmulas proposicionais. Φ é definido indutivamente da seguinte forma: x i Φ, para cada i N, ( ϕ Φ), desde que ϕ Φ, (ϕ 1 ϕ 2 Φ), desde que ϕ 1, ϕ 2 Φ, (ϕ 1 ϕ 2 Φ), desde que ϕ 1, ϕ 2 Φ. De notar que a implicação, (ϕ 1 ϕ 2 ), apesar de não ter sido definida, pode ser vista como uma abreviatura de ( ϕ 1 ϕ 2 ). Devido a uma questão de eficiência as fórmulas proposicionais usadas pelos algoritmos de satisfação encontram-se na sua forma normal conjuntiva (CNF). Definição (Literais, Cláusulas e Fórmulas CNF). Um literal l, é uma variável x i (literal positivo) ou o seu complementar x i (literal negativo). Uma cláusula, w, é uma disjunção de literais e uma fórmula CNF, ϕ, é uma conjunção de cláusulas. Exemplo (Fórmulas CNF). Consideremos a seguinte fórmula CNF: ϕ = (ω 1 ω 2 ω 3 ), onde ω 1 = (x 1 x 2 ), ω 2 = (x 2 x 3 ) e ω 3 = ( x 2 x 3 ). Esta fórmula tem 3 variáveis e 3 cláusulas, cada uma com dois literais. 5

22 Teorema Dada uma fórmula proposicional ϕ, existe uma fórmula CNF γ que lhe é equivalente, ou seja, dada uma atribuição ρ, se ρ = ϕ (ρ = ϕ) então ρ = γ (ρ = γ). Apesar dos algoritmos de satisfação usarem fórmulas CNF isto não é um impedimento, uma vez que mesmo que uma dada fórmula ϕ não esteja na sua forma normal conjuntiva, temos pelo teorema que existe uma fórmula γ equivalente a ϕ que está na sua forma normal conjuntiva. Esta fórmula equivalente pode ser obtida através do uso de algoritmos com tempo polinomial (e.g. [64]). Definição (Satisfação Proposicional). Seja ρ uma atribuição, ou seja, ρ : X {0, 1} n. A satisfação de uma fórmula proposicional ϕ através de uma atribuição ρ é definida indutivamente da seguinte forma: ρ = x i se ρ(x i ) = 1, ρ = ( ϕ) se ρ = ϕ, ρ = (ϕ 1 ϕ 2 ) se ρ = ϕ 1 ou ρ = ϕ 2, ρ = (ϕ 1 ϕ 2 ) se ρ = ϕ 1 e ρ = ϕ 2. De notar que uma fórmula CNF ϕ = (ω 1... ω n ), é satisfeita, se houver uma atribuição ρ, tal que ρ = {ω 1, ω 2,, ω n }, ou seja, para ϕ ser satisfeita é necessário que todas as suas cláusulas sejam satisfeitas. Uma cláusula é satisfeita se pelo menos um dos seus literais for satisfeito. Um literal positivo (negativo) x i ( x i ) é satisfeito por ρ se ρ(x i ) = 1 (ρ(x i ) = 0). Se para todas as atribuições possíveis ρ, tivermos que ρ = ω i, para algum i {1,, n}, diz-se que a fórmula CNF ϕ é não satisfeita. Exemplo (Satisfação). Se considerarmos a fórmula CNF ϕ, apresentada no exemplo 2.1.4, e a atribuição ρ, tal que ρ(x 1 ) = 1, ρ(x 2 ) = 1 e ρ(x 3 ) = 0, temos que ρ = ϕ. Se no entanto considerarmos a atribuição ρ tal que ρ (x 1 ) = 1, ρ (x 2 ) = 1 e ρ (x 3 ) = 1, temos que ρ = ϕ. Uma vez que existe uma atribuição ρ que satisfaz a fórmula CNF ϕ, diz-se que ϕ é satisfeita. Se por outro lado considerarmos a fórmula CNF γ, tal que γ = α 1 α 2 α 3, onde α 1 = ( x 1 ), α 2 = ( x 2 ) e α 3 = (x 1 x 2 ), qualquer que seja a atribuição ρ sobre γ temos que i ρ = α i, logo a fórmula γ não é satisfeita. Definição (Fórmula Tautológica). Dada uma fórmula ϕ, se para toda a atribuição ρ tivermos que ρ = ϕ, dizemos que ϕ é uma fórmula tautológica. Exemplo (Fórmula Tautológica). Dada a fórmula ϕ = (x 1 x 1 ) temos que qualquer que seja a atribuição ρ, ρ = ϕ. Se ρ(x 1 ) = 1 então ϕ é satisfeita, se por outro lado ρ(x 1 ) = 0, temos que ρ = x 1 e logo ϕ é satisfeita. Definição (Problema de Satisfação Booleana (SAT)). O problema de Satisfação Booleana (SAT) consiste em, dada uma fórmula ϕ, decidir se existe uma atribuição ρ tal que ρ = ϕ. O problema SAT é conhecido pela sua importância teórica. Para uma melhor compreensão desta importância iremos apresentar, em seguida, alguns conceitos básicos de complexidade. Definição (Problemas de Decisão). Classe de problemas cuja resposta é sim ou não. Definição (Classe P (Polinomial)). Classe de problemas de decisão que podem ser resolvidos em tempo polinomial. Definição (Classe N P (Não determinístico, polinomial)). Classe de problemas de decisão para os quais podemos verificar, em tempo polinomial, se uma possível solução é correcta. Definição (Classe N P-Completo). Um problema A diz-se N P-Completo se A N P e qualquer problema em N P se reduz polinomialmente a A. Teorema (Teorema de Cook[15]). O problema de SAT é N P-Completo. 6

23 2.2 Algoritmos de SAT Desde 1960 em que Davis e Putnam propuseram o primeiro algoritmo de SAT[20], vários algoritmos têm sido propostos. A evolução dos algoritmos de SAT ao longo destas últimas décadas tem sido notória e hoje em dia os algoritmos de SAT são capazes de resolver problemas com milhares de variáveis, e em alguns casos, mesmo com milhões de variáveis. Nesta secção pretendemos descrever os procedimentos de Davis-Putnam (DP)[20] e de Davis- Logemann-Loveland (DLL ou DPLL)[19]. Em seguida iremos apresentar algumas das características que tornaram os algoritmos, baseados no procedimento de DPLL, em ferramentas eficientes na resolução de diversos problemas reais. Os algoritmos de SAT podem ser divididos em duas categorias: completos ou incompletos. Definição (Algoritmos Completos e Incompletos). Para uma dada fórmula ϕ, um algoritmo de SAT completo ou encontra uma solução para ϕ ( ρ ρ = ϕ)ou prova que ϕ não tem solução ( ρ ρ = ϕ). Os algoritmos de algoritmo de SAT incompletos dividem-se em duas categorias. Há algoritmos incompletos que apenas provam que uma dada fórmula ϕ tem solução, enquanto que existem outros que apenas provam que ϕ não tem solução. Apesar destes algoritmos não conseguirem determinar se uma dada instância é ou não satisfeita, são bastante eficientes na categoria a que pertencem. Nos últimos anos, algoritmos de procura baseados no procedimento de DPLL têm se revelado como sendo dos métodos mais eficientes para a resolução de problemas de SAT. Devido a este facto e à necessidade de saber se uma dada instância tem ou não solução, nesta dissertação iremos apenas trabalhar com algoritmos completos Algoritmo de Davis-Putnam (DP) O algoritmo de DP[20] foi o primeiro algoritmo de SAT a utilizar a técnica de resolução no seu algoritmo. Além desta técnica, o algoritmo de DP também utiliza a regra da cláusula unitária e a regra do literal puro. Definição (Resolução). Dadas duas cláusulas ϕ 1 = (z x 1... x n ) e ϕ 2 = ( z y 1... y m ), onde todos os x i e y i são literais distintos, podemos derivar ϕ 3 = (x 1... x n y 1... y m ), ou seja, a disjunção de ϕ 1 e ϕ 2 sem z e z. ϕ 3 é o resultado de aplicar resolução ao tuplo res(ϕ 1,ϕ 2,z). A cláusula derivada é a consequência lógica da conjunção de duas cláusulas. Se repetirmos este processo, iremos reduzir a fórmula a um conjunto de cláusulas que contêm apenas literais puros se a fórmula for satisfeita ou iremos derivar uma cláusula vazia caso a fórmula não seja satisfeita. Definição (Literal Puro). Dada uma fórmula ϕ e um literal x i que ocorre em ϕ, x i é puro se o seu complementar ( x i ) não ocorre em ϕ. Definição (Regra da Cláusula Unitária). Dada uma cláusula ϕ = (x 1... x n ), em que todos os literais excepto um (x i ) têm a atribuição 0, temos que o literal restante (x i ) terá que ter a atribuição 1 para que ϕ seja satisfeita. Estas cláusulas são denominadas de cláusulas unitárias e o literal cuja atribuição é 1 é denominado de literal unitário. Definição (Propagação Unitária). O processo de atribuir 1 a todos os literais unitários é denominado de propagação unitária, também chamado por vezes por propagação de restrições Booleanas (BCP, do inglês Boolean Constraint Propagation )[73]. Exemplo (Propagação Unitária). Consideremos duas cláusulas, ω 1 = (x 1 x 2 x 3 ) e ω 2 = (x 2 x 4 ). Dada a atribuição parcial {ρ(x 1 ) = 0, ρ(x 3 ) = 0}, o literal x 2 em ω 1 terá que ser satisfeito, logo temos que ρ(x 2 ) = 0. Como consequência, o literal x 4 na cláusula ω 2 terá que ser satisfeito e devido a tal temos que ρ(x 4 ) = 1. 7

24 Definição (Regra do Literal Puro). Se uma fórmula tiver literais puros, podemos atribuir uma atribuição ρ tal que tais literais sejam satisfeitos e consequentemente irão ser satisfeitas as cláusulas que contêm esses literais. Estas cláusulas, uma vez que estão satisfeitas, podem ser removidas da fórmula inicial sem qualquer perda de informação. Um melhoramento vísivel à técnica básica de resolução apresentada em é o de eliminar todas as cláusulas que contêm literais puros antes de aplicarmos resolução. No algoritmo 2.2.1, apresentamos o pseudocódigo do algoritmo de DP. Neste algoritmo podemos verificar a aplicação da técnica de resolução através da eliminação sucessiva das variáveis (eliminar variavel()), a aplicação da regra da cláusula unitária (BCP()) e da regra do literal puro (PLR()). A ideia do algoritmo é a aplicação iterativa da resolução entre todos os pares de cláusulas que contenham o literal x e o seu complementar x. Cada passo irá gerar um subproblema com menos uma variável (x), mas possivelmente com um número quadrático de cláusulas, dependendo do número de cláusulas que continham os literais x e x. Este procedimento irá terminar quando a fórmula for considerada satisfeita (SAT) ou não satisfeita (UNSAT). Algoritmo : DP(ϕ) Davis-Putnam (DP) 1. while TRUE do 3: if BCP(ϕ) == conflito then 4: return UNSAT 5: end if 6: PLR(ϕ) 7: if todas clausulas SAT(ϕ) then 8: return SAT 9: end if 10: x = escolher variavel(ϕ) 11: eliminar variavel(ϕ, x) 2. end while Definição (Cláusula Conflituosa). Uma cláusula ω i = (x 1... x n ) é dita conflituosa perante uma atribuição ρ, se ρ(x 1 ) = 0... ρ(x n ) = 0, ou seja, ρ = ω i. Exemplo (Algoritmo de DP). Consideremos a fórmula ϕ = (ω 1 ω 2 ω 3 ω 4 ). Em que ω 1 = (x 1 x 3 ), ω 2 = (x 2 x 3 ), ω 3 = (x 3 x 4 ) e ω 4 = ( x 1 x 2 x 3 ). Se aplicarmos o algoritmo 2.2.1, onde no passo 10 escolhemos para x a variável x 3, obtemos a seguinte fórmula equivalente ϕ = (ω ω ω ), onde ω, ω e ω são definidos da seguinte forma: ω = res(ω 1, ω 4, x 3 ) = (x 1 x 1 x 2 ) ω = res(ω 2, ω 4, x 3 ) = ( x 1 x 2 x 2 ) ω = res(ω 3, ω 4, x 3 ) = ( x 1 x 2 x 4 ) Podemos verificar facilmente que tanto ω como ω são fórmulas tautológicas, logo são sempre satisfeitas. Deixa-nos apenas ω que contém apenas literais puros e logo também é satisfeita. Portanto concluímos que ϕ é satisfeita e por consequente ϕ é também satisfeita. Podemos concluir facilmente que o algoritmo requer no caso geral espaço exponencial. Apenas uma pequena fracção das fórmulas geradas por resolução são usadas para encontrar uma solução para a fórmula ou para provar que não existe tal solução. Como tal, Davis, Longemann e Loveland 8

25 propuseram um novo algoritmo em 1962, a que se denomina frequentemente de algoritmo de DLL, também conhecido por algoritmo de DPLL (dada a participação de Putnam no algoritmo original). Em seguida iremos descrever o algoritmo DPLL, nomeadamente como este conseguiu ultrapassar o problema da explosão de memória que se verificava no algoritmo de DP Algoritmo de Davis-Longemann-Loveland (DPLL) O algoritmo de DPLL[19] é a base dos algoritmos de SAT (completos) actuais. Este algoritmo trocou a técnica de resolução usada no algoritmo de DP por uma regra de partição, que divide o problema em dois subproblemas de menor dimensão. Durante a iteração, o algoritmo selecciona uma variável x i e através da atribuição ρ(x i ) = 0 e ρ(x i ) = 1 gera duas sub-fórmulas. O algoritmo usa assim um processo de pesquisa, que implicitamente enumera o espaço das 2 n possíveis atribuições, num problema com n variáveis. A pesquisa é feita em árvore binária, onde cada nó corresponde a uma variável e cada ramo a uma atribuição a essa variável (0 ou 1). No algoritmo apresentamos o pseudo-código para um algoritmo de retrocesso com base no DPLL. A notação apresentada neste algoritmo foi introduzida originalmente por Marques-Silva[55]. Algoritmo : DPLL(ϕ) Davis-Longemann-Loveland (DPLL) 1. d = 0 2. while decidir(ϕ,d) == decisao do 4: if deduzir(ϕ,d) == conflito then 5: β = diagnosticar(ϕ,d) 6: if β == -1 then 7: return UNSAT 8: else 9: retrocesso(ϕ,d,β) 10: d = β 11: end if 12: else 13: d = d : end if 3. end while 4. return SAT Dada uma fórmula ϕ, com n variáveis, o algoritmo (DPLL) irá conduzir uma procura pelo espaço das possíveis atribuições às n variáveis. A cada passo da procura, uma atribuição será determinada pela função decidir(). Um nível de decisão d é associado a cada atribuição. A função deduzir() irá deduzir atribuições que são implicadas pela decisão tomada pela função anterior. Esta dedução pode por exemplo corresponder à aplicação do BCP. Sempre que se encontre uma cláusula conflituosa, esta será analisada pela função diagnosticar(). A análise deste conflito irá provocar um retrocesso até ao nível do conflito. A função retrocesso() irá limpar todas as atribuições desde o nível d até ao nível β. O processo irá terminar quando for encontrada uma atribuição ρ = ϕ ou quando se derivar a cláusula vazia (neste caso a função diagnosticar() devolve o valor -1), ou seja, quando o problema não tiver solução. Os algoritmos de SAT que são baseados no DPLL têm a estrutura apresentada no algoritmo diferindo na implementação das funções decidir(), deduzir() e diagnosticar()[38]. O algoritmo original de DPLL utilizava as seguintes implementações destas funções: 9

26 O algoritmo de decisão escolhia aleatoriamente uma variável livre x, uma vez que o algoritmo de DPLL não especifica a variável a ramificar. O algoritmo de dedução implementava propagação unitária (BCP). Se nenhum conflito fosse detectado, então a regra do literal puro seria aplicada. O algoritmo de decisão implementava um simples procedimento de retrocesso não-cronológico. Nas secções seguintes iremos dar uma breve análise das diferentes implementações destas funções, utilizadas nos algoritmos de SAT, ao longo da sua evolução Heurísticas de Ramificação A ramificação ocorre na função decidir() do algoritmo (DPLL). Quando não é possível mais deduções, esta função irá escolher uma variável dentro das variáveis livres e irá atribui-lhe um valor. A importância da escolha destas variáveis é bem conhecida, diferentes heurísticas de ramificação podem produzir árvores de procura com tamanhos completamente diferentes, afectando assim a eficiência do algoritmo. Ao longo dos anos muitas heurísticas de ramificação têm sido propostas por diferentes investigadores e diversos estudos experimentais foram feitos sobre estas heurísticas[54; 40]. As primeiras heurísticas, tais como, Bohm s[13], o número máximo de ocorrências em cláusulas de tamanho mínimo (MOM)(e.g. [28]) e Jeroslow-Wang[41], podem ser consideradas como algoritmos greedy, uma vez que tentam fazer com que o próximo ramo de procura gere o maior número de implicações ou satisfaça o maior número de cláusulas. Todas estas heurísticas usam funções que de alguma forma estimam o efeito da ramificação numa dada variável, e escolhem a variável que tiver o maior valor dado por essa função. Estas funções são baseadas em estatísticas relativamente às cláusulas, tais como, comprimento das cláusulas, etc. Estas estatísticas, apesar de serem úteis para problemas aleatórios de SAT, normalmente não capturam a informação relevante em problemas com estrutura. Em 1999, Marques-Silva[54], propõe o uso de heurísticas que contam o número de literais. Esta heurística conta o número de literais que não são satisfeitos numa dada fase da procura. Em particular, o autor descobriu que se escolher a variável com a maior soma dinâmica combinada (DLIS) de literais, obtém uma boa eficiência nas instâncias de problemas testados. De notar que a contagem destes literais é dependente do estado da procura, logo cada vez que a função decidir() é chamada, é necessário efectuar uma recontagem do número de literais. À medida que os algoritmos começaram a ser cada vez mais eficientes, o cálculo efectuado para a escolha do ramo de procura dominava o tempo de execução do algoritmo. Portanto, o melhoramento destas heurísticas foi fulcral para o melhoramento da eficiência dos algoritmo de SAT. Em 2001, os autores do algoritmo Chaff[62], propuseram uma heurística com o nome de Variable State Independent Decaying Sum (VSIDS). A VSIDS guarda um valor para cada fase da variável. Inicialmente, os valores correspondem ao número de ocorrências de cada literal no problema inicial. Uma vez que os algoritmos de SAT modernos têm um sistema de aprendizagem, as cláusulas aprendidas são adicionadas às cláusulas já existentes. A VSIDS incrementa o valor de cada variável por uma constante sempre que uma cláusula adicionada contém essa variável e no decorrer da procura estes mesmos valores são divididos por uma constante. Como efeito, os valores dados através da VSIDS correspondem à ocorrência dos literais com maior peso nas cláusulas adicionadas recentemente. A VSIDS irá escolher a variável livre que tiver maior valor combinado para ramificar. Uma vez que a VSIDS é independente do estado, ou seja, os valores não dependem na atribuição das variáveis, é fácil de manter e ocupa apenas uma pequena percentagem do tempo de execução do algoritmo. Mais recentemente, os autores do algoritmo BerkMin[34], sugerem uma ideia similar à VSIDS onde relacionam o valor atribuído através dos conflitos existentes. Quando um conflito ocorre, todos os literais presentes nas cláusulas responsáveis pelos conflitos vêem o seu valor aumentado. 10

27 Como já se passava no VSIDS, esta heurística também diminui os valores de uma forma periódica. Além disso, a heurística limita a escolha da variável aos literais que ocorrem na última cláusula adicionada que ainda não foi resolvida. Apresentamos aqui algumas das heurísticas existentes para escolher a próxima variável. Como podemos verificar existe uma grande diversidade de heurísticas de ramificação e o seu desenvolvimento foi fundamental na evolução dos algoritmos de SAT Algoritmo de Dedução A função deduzir() tem o objectivo de reduzir o espaço de procura através de look ahead. Quando num dado ramo de procura, é atríbuido um valor a uma dada variável, efectua-se uma simplificação das cláusulas existentes. A correcção do algoritmo não irá ser afectada desde que as regras de dedução implementadas sejam válidas. No entanto, diferentes regras de dedução, ou mesmo diferentes implementações da mesma regra, podem alterar significativamente a eficiência do algoritmo. Ao longo dos anos, diferentes mecanismos de dedução têm sido propostos. No entanto, parece que a aplicação da BCP é o mecanismo mais eficiente, uma vez que requer pequeno poder computacional e consegue reduzir grandes espaços de procura. Quase todos os algoritmos modernos de SAT incorporam este mecanismo no seu processo de dedução. O processo de dedução é o que ocupa a maior parte do tempo de execução do algoritmo, como tal é necessário uma boa implementação da BCP. Um implementação simples e intuitiva é o uso de contadores para cada cláusula[16]. Uma possível implementação, usada no algoritmo GRASP[55], seria o uso de dois contadores para cada cláusula, um para o número de literais com o valor 1 e outro para o número de literais com o valor 0. Cada variável terá duas listas que contêm todas as cláusulas onde elas ocorrem, respectivamente, de forma positiva e negativa. Quando é atríbuido um valor a uma variável, todas as cláusulas que contêm esse literal terão o seu contador actualizado. Se o contador dos literais com o valor 0 for igual ao número total de literais de uma dada cláusula, então implica que essa cláusula será conflituosa. Se o contador dos literais com o valor 0 for inferior por uma unidade ao número total de literais e se o contador dos literais com o valor 1 for 0, então essa cláusula será uma cláusula unitária. Esta implementação apesar de ser simples de implementar e de perceber não é das mais eficientes. Se uma instância tiver m cláusulas e n variáveis, e tiver um número médio de l literais por cláusula, então sempre que atribuímos um valor a uma variável, teremos que actualizar, em média, l m n contadores. Quando retrocedemos de um conflito, precisaremos também de actualizar em média l m n contadores. Os algoritmos actuais utilizam mecanismos de aprendizagem, e as cláusulas aprendidas têm geralmente um número elevado de literais. Logo, uma vez que o número médio de literais (l) é muito elevado, faz com que a implementação do BCP baseada em contadores não seja muito eficiente. Zhang e Stickel[74], propuseram um mecanismo para o BCP usando listas com head/tail. Neste mecanismo, cada cláusula tem dois apontadores associados, chamados de cabeça e cauda respectivamente. Inicialmente, a cabeça aponta para o primeira literal da cláusula e a cauda para o último literal. Cada variável tem quatro listas ligadas que contêm apontadores para as cláusulas. As listas ligadas para cada variável v são: clausula pos cabeca(v), clausula neg cabeca(v), cláusula pos cauda(v) e cláusula pos cauda(v). Cada uma destas listas contêm os apontadores para as cláusulas que têm o seu literal de head/tail na fase positiva/negativa da variável v. Se for atríbuido o valor 1 à variável v, clausula pos cabeca(v) e clausula pos cauda(v) serão ignoradas. Para cada cláusula C que estiver na lista clausula neg cabeca(v), o algoritmo irá procurar um literal que não seja atríbuido o valor 1, começando na posição da cabeça de C e terminando na posição da cauda. De notar que o literal que se encontra à cabeça da cláusula C tem que ser o literal correspondente a v na fase negativa. Durante o processo de procura, quatro casos podem ocorrer: 11

28 1. Se durante a procura encontramos logo um literal que tem o valor 1, então a cláusula será satisfeita e por consequente não precisamos de fazer nada. 2. Se durante a procura encontrarmos logo um literal l que ainda não foi atribuído e que não é um literal de cauda, então removemos C da lista clausula neg cabeca(v) e adicionamos C à lista da cabeça da variável correspondente a l. 3. Se todos os literais entre as posições da cabeça e da cauda tiverem o valor 0 e o literal da cauda não tiver nenhum valor, então a cláusula é unitária e o literal da cauda é um literal unitário. 4. Se todos os literais entre os dois apontadores (incluindo o literal da cauda) tiverem o valor 0, então a cláusula é conflituosa. Acções similares são efectuadas na lista clausula neg cauda(v), com a pesquisa a ser feita na direcção oposta, ou seja da cauda para a cabeça. O uso de listas com head/tail é mais eficiente do que o uso de contadores, uma vez que quando atribuímos o valor 1 a uma dada variável, as cláusulas que contêm os literais positivos desta variável não serão visitados. Uma vez que cada cláusula tem dois apontadores, sempre que atribuirmos um valor a uma variável, apenas precisamos de actualizar m n cláusulas, isto se assumirmos que os literais de head/tail estão distribuídos de forma uniforme em cada fase. Apesar do trabalho a ser feito em cada actualização ser diferente do realizado no uso de contadores, o algoritmo de head/tail é mais eficiente do que o baseado em contadores. Aquando o retrocesso para um nível de decisão β, é necessário mudar as posições dos dois apontadores para as posições que tinham no nível β. Os autores do algoritmo Chaff[62], apresentaram um algoritmo de BCP denominado de 2-literal watching. De modo similar ao algoritmo de head/tail, o algoritmo de 2-literal watching tem dois literais especiais por cada cláusula denominados por literais observados. Cada variável tem duas listas que contêm apontadores, respectivamente, para os literais observados de cada fase. Estas listas são denominadas por pos observado(v) e neg observado(v). Em contraste com a head/tail, não existe nenhuma ordem relativamente aos dois ponteiros numa cláusula e cada ponteiro pode mover-se em qualquer direcção. Quando é atribuído o valor 1 à variável v, para cada literal p apontado por um apontador na lista neg observado(v), o algoritmo irá procurar um literal l na cláusula que contém p e não tem o valor 0. Quatro casos distintos podem ocorrer durante esta procura: 1. Se existir um literal l que não é o outro literal observado, então removemos o apontador para p da lista de neg observado(v), e adicionamos um apontador para l na lista de literais observados correspondentes a l. 2. Se o único literal l nestas condições for o outro literal observado e estiver livre, então a cláusula é unitária e este literal é um literal unitário. 3. Se o único literal l nestas condições for o outro literal observado e este tiver o valor 1, não precisamos de fazer nada porque a cláusula está satisfeita. 4. Se todos os literais na cláusula tiverem o valor 0, não existe um literal l nas condições requeridas, logo a cláusula é conflituosa. O algoritmo de 2-literal watching tem a vantagem relativamente aos algoritmos anteriormente apresentados de requerer tempo constante para desfazer as atribuições durante o retrocesso. Logo, não será necessário a actualização dos apontadores para os literais que estão a ser observados. Devido a isto, este algoritmo é muito mais eficiente do que os atrás mencionados. 12

29 Head/Tail Acção 2-Literal watching H T W W (1) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 {ρ(x 1 ) = 1} H T W W (2) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 {ρ(x 7 ) = 1, ρ(x 15 ) = 0} H T W W (3) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 {ρ(x 4 ) = 0} H T W W (4) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 Conflito Retrocesso para o nível (2) H T W W (5) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 {ρ(x 7 ) = 0, ρ(x 12 ) = 1} H T W W (6) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 {ρ(x 4 ) = 0} H T W W (7) x 1 x 4 x 7 x 12 x 15 x 1 x 4 x 7 x 12 x 15 literal livre literal com o valor 0 literal com o valor 1 Figura 2.1: Comparação entre os algoritmos de 2-literal watching e de head/tail. Na figura 2.1, apresentamos uma comparação entre os algoritmos de 2-literal watching e de head/tail. Para efectuar esta comparação observamos o que se passa com estes dois algoritmos durante a atribuição de variáveis numa dada cláusula ω, onde ω = ( x 1 x 4 x 7 x 12 x 15 ). Em cada nível um literal livre é representado através de um fundo branco; um literal com o valor 0 é representado através de um fundo cinzento claro e um literal com o valor 1 é representado através de um fundo cinzento escuro. No nível (1) podemos verificar que no momento inicial, no algoritmo de 2-literal watching os apontadores da cabeça (H) e da cauda (T) são colocados a apontar, respectivamente, para o literal do inicio e do fim da cláusula. No que respeita ao algoritmo de head/tail os apontadores observados (W) podem apontar para qualquer literal. Em ambos os esquemas observamos que a cláusula apenas será visitada se for necessário actualizar a posição dos apontadores. O apontador de cauda apenas se pode mover no sentido do apontador de cabeça e o apontador de cabeça apenas se pode mover no sentido do apontador de cauda, enquanto que os apontadores observados se podem mover em qualquer sentido. No nível (4) supomos que atingimos um conflito e iremos efectuar o retrocesso para o nível (2). Aquando o retrocesso temos que os apontadores de cabeça/cauda terão que ser actualizados para o local onde se encontravam no nível (2), enquanto que os apontadores observados não necessitam de nenhuma actualização. Se um literal por atríbuido o valor 1, a cláusula que o contém não será visitada por nenhum dos algoritmos. Na procura de um literal livre, se encontrarmos um literal com o valor 1, o algoritmo de head/tail não faz nada, enquanto que o algoritmo 2-literal watching irá mover um ponteiro observado para esse literal (como podemos observar no nível (7)). 13

30 2.2.5 Retrocesso Não Cronológico Quando uma cláusula conflituosa é encontrada, o algoritmo precisa de retroceder e desfazer decisões tomadas. A função que analisa o conflito e determina se não existe solução para o problema ou qual o novo espaço de procura é a função diagnosticar(). O algoritmo original do DPLL utilizava um simples método de retrocesso denominado de retrocesso cronológico. Definição (Retrocesso Cronológico). Para cada variável, o algoritmo guarda a informação se a variável foi testada nas duas atribuições possíveis (0 ou 1). Uma variável que foi testada com o valor 0 e o valor 1 diz-se virada. Quando um conflito ocorre, a função de diagnosticar() procura a variável virada com o maior nível de decisão. Todas as atribuições feitas até esta variável serão desfeitas e o algoritmo irá retroceder até esta variável e testará a outra atribuição possível. Este processo denomina-se retrocesso cronológico. Apesar de o retrocesso cronológico ter tido sucesso em alguns tipos de problemas e estar incorporado em algumas ferramentas de SAT (e.g. satz[49; 50]), revelou-se um método ineficiente na redução do espaço de procura de diversos problemas de SAT. Para combater este facto foi introduzido um novo tipo de retrocesso, o retrocesso não cronológico. Definição (Retrocesso Não Cronológico). Quando um conflito ocorre, a função de diagnosticar() através de métodos mais avançados irá encontrar o conjunto de atribuições responsáveis pelo conflito. Este método permite ao algoritmo retroceder para um nível de decisão superior ao nível onde se encontrava a última variável virada. Devido a isto este processo é denominado de retrocesso não cronológico. x 1 Árvore de Procura 0 x Retrocesso Cronológico 0 Retrocesso x 3 x 4 Não Cronológico x 4 x Solução: x 1 = 0 x 2 = 1 x 4 = 1 Figura 2.2: Retrocesso Cronológico e Retrocesso Não Cronológico Consideremos a fórmula ϕ = (x 2 x 4 ) (x 1 x 2 x 4 ) (x 2 x 4 ) ( x 1 x 3 ). A árvore de procura desta fórmula está descrita na figura 2.2 (por uma questão de simplificação a regra da cláusula unitária não foi considerada). Após a atribuição do valor 0 às variáveis x 1 e x 2, não existem atribuições possíveis para as restantes variáveis de forma a que a fórmula seja satisfeita. 14

31 Neste exemplo, o retrocesso cronológico perde uma quantidade significativa de tempo a explorar uma região do espaço de procura, apenas para descobrir, após um potencial esforço, que essa região não contém nenhum conjunto de atribuições que satisfaça a fórmula. Por outro lado, o retrocesso não cronológico é capaz de extrair informação das duas cláusulas conflituosas e determinar que a causa do conflito é a variável x 2 e não a variável x 3. As ferramentas de SAT actuais utilizam, habitualmente, o retrocesso não cronológico, uma vez que permite reduzir significativamente o espaço de procura Outros aspectos importantes Além das componentes referidas nas secções anteriores existem outros aspectos importantes nos algoritmos de SAT. Aqui iremos fazer uma breve referência a alguns desses aspectos. Os algoritmos de SAT actuais lidam com problemas com uma dimensão muito grande, que pode chegar a milhões de variáveis e vários milhões de cláusulas. Além disso, durante o processo de aprendizagem, muitas cláusulas são aprendidas durante os conflitos o que leva a aumentar ainda mais o número de cláusulas na base de dados. Portanto são necessárias estruturas de dados eficientes que consigam armazenar grandes quantidades de cláusulas. É usual que as cláusulas sejam guardadas de uma forma linear, ou seja, cada cláusula ocupa o seu próprio espaço sem existir sobreposição entre as cláusulas. Através deste método temos que o tamanho da base de dados é linear ao número de literais presentes no conjunto das cláusulas. Para este feito é usual o uso de arrays. Zhang e Stickel[74], propuseram usar uma estrutura de dados denominada por trie. Um trie é uma árvore ternária. Cada nó representa uma variável e as suas três ramificações representam um estado positivo, negativo ou não interessa. As folhas nesta árvore ternária terão o valor 0 ou 1. Cada caminho da raiz de uma árvore ternária até a uma folha com o valor 1 representa uma cláusula. Um trie diz-se ordenado se para cada nó v, o nó que se encontra a um nível superior tem um índice de variável menor que v. Um trie tem a vantagem de conseguir detectar rapidamente cláusulas em duplicado e com submissão de cauda. Uma cláusula tem submissão de cauda se existir uma cláusula que seja prefixo desta. (e.g. (α β γ) tem submissão de cauda relativamente a (α β)). Um trie ordenado tem semelhanças com diagramas de decisão binários (BDDs). Isto levou à exploração de ZBDDs (Zero-suppressed Binary Decision Diagrams)[60] para armazenar as cláusulas. Uma representação ZBDD tem a vantagem relativamente ao uso de tries de além de detectar cláusulas com submissão de cauda também conseguir detectar cláusulas com submissão de cabeça. No entanto, apesar das vantagens que os tries e os ZBDDs têm, o trabalho adicional que estas estruturas requerem não justifica o seu uso relativamente à representação linear. O pré-processamento pode ser também uma ferramenta poderosa quando aplicada a algoritmos de SAT. O objectivo dos preprocessadores é o de simplificar as instâncias antes de estas serem passadas ao algoritmo de SAT. Um preprocessador é assim aplicado apenas uma vez, sendo por isso possível a implementação de regras de dedução que teriam um custo muito dispendioso se fossem implementadas em cada nó da árvore de procura. Lynce e Marques da Silva[52] apresentaram diversas técnicas de pré-processamento e resultados experimentais que mostram a sua eficiência. O tempo requerido para resolver instâncias de SAT similares varia frequentemente com o algoritmo de SAT utilizado. Dois problemas que são exactamente o mesmo excepto na ordem das variáveis podem requerer tempos de resolução completamente diferentes através de um dado algoritmo de SAT. Para combater este problema, em [35] é apresentado a noção de reiniciar aleatoriamente. Por cada recomeço, abandonamos a árvore de procura actual. Apesar da procura ter sido abandonada, o algoritmo guarda as cláusulas aprendidas, logo a informação da pesquisa anterior não é totalmente perdida. 15

O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional

O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional O Impacto da Modelação na Resolução de Problemas de Satisfação Proposicional Ruben Martins Instituto Superior Técnico Universidade Técnica de Lisboa Mestrado em Matemática e Aplicações Ruben Martins O

Leia mais

2.6 O ALGORITMO DPLL. Preliminares

2.6 O ALGORITMO DPLL. Preliminares Preliminares 2.6 O ALGORITMO DPLL Newton José Vieira 05 de agosto de 2007 Base da grande maioria dos algoritmos para o problema da satisfabilidade. Leva esse nome graças a Davis, Putnam, Logemann e Loveland,

Leia mais

2.3.4 Algoritmos de SAT

2.3.4 Algoritmos de SAT 114 CAÍTULO 2. LÓGICA ROOSICIONAL 2.3.4 Algoritmos de SAT Os algoritmos de SAT (do inglês satisfiability ) têm o objectivo de determinar se uma dada fbf α é satisfazível ou não; em caso afirmativo, devolvem

Leia mais

Análise e Síntese de Algoritmos

Análise e Síntese de Algoritmos Análise e Síntese de Algoritmos Problemas NP-Completos CLRS, Cap. 34 Contexto Algoritmos em Grafos Estruturas de Dados para Conjuntos Disjuntos Programação Linear Programação Dinâmica Algoritmos Greedy

Leia mais

Análise e Síntese de Algoritmos. Problemas NP-Completos CLRS, Cap. 34

Análise e Síntese de Algoritmos. Problemas NP-Completos CLRS, Cap. 34 Análise e Síntese de Algoritmos Problemas NP-Completos CLRS, Cap. 34 Contexto Revisões [CLRS, Cap. 1-10] Algoritmos em Grafos [CLRS, Cap. 22-26] Algoritmos elementares Árvores abrangentes Caminhos mais

Leia mais

Lógica Computacional Aula 4

Lógica Computacional Aula 4 Lógica Computacional Aula 4 DCC/FCUP 2017/18 Conteúdo 1 Lógica proposicional 1 1.1 Fórmulas de Horn.......................................... 1 1.2 Satisfazibilidade............................................

Leia mais

Agentes Lógicos. Capítulo 7 (online)

Agentes Lógicos. Capítulo 7 (online) Agentes Lógicos Capítulo 7 (online) Sumário Agentes baseados em conhecimento O mundo do Wumpus Lógica em geral Lógica proposicional (Booleana) Equivalência, validade, satisfação Regras de inferência e

Leia mais

Definição e avaliação de métricas para solucionadores SAT

Definição e avaliação de métricas para solucionadores SAT Definição e avaliação de métricas para solucionadores SAT Fernando Augusto Fernandes Braz Orientador: Mark Alan Junho Song Departamento de Ciência da Computação PUC Minas 9 de dezembro de 2009 Sumário

Leia mais

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur Capítulo 2 Lógica Proposicional Lógica para Programação LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08 c Inês Lynce c Luísa Coheur Programa Apresentação Conceitos Básicos Lógica Proposicional ou Cálculo

Leia mais

Provadores de Teoremas baseados em contagem

Provadores de Teoremas baseados em contagem Provadores de Teoremas baseados em contagem Eduardo Menezes de Morais lenin@linux.ime.usp.br Orientador: Marcelo Finger Instituto de Matemática e Estatística - USP 16 de novembro de 2008 Eduardo Menezes

Leia mais

Problemas Intratáveis ou computação eficiente X computação ineficiente

Problemas Intratáveis ou computação eficiente X computação ineficiente Problemas Intratáveis ou computação eficiente X computação ineficiente Problemas Tratáveis Os problemas que podem ser resolvidos em tempo polinomial em um computador típico são exatamente os mesmos problemas

Leia mais

Planejamento em IA. Blackbox Graphplan + SATplan. Leliane Nunes de Barros

Planejamento em IA. Blackbox Graphplan + SATplan. Leliane Nunes de Barros Planejamento em IA Blackbox Graphplan + SATplan Introdução SATplan métodos para compilar problemas de planejamento em fórmulas proposicionais (CNF) resolvidas por algoritmos SAT sistemáticos e estocásticos.

Leia mais

PCC104 - Projeto e Análise de Algoritmos

PCC104 - Projeto e Análise de Algoritmos PCC104 - Projeto e Análise de Algoritmos Marco Antonio M. Carvalho Departamento de Computação Instituto de Ciências Exatas e Biológicas Universidade Federal de Ouro Preto 1 de novembro de 2018 Marco Antonio

Leia mais

Algoritmos 3/17/ Algoritmos como área de estudo e investigação

Algoritmos 3/17/ Algoritmos como área de estudo e investigação Algoritmos e Complexidade Ana Teresa Freitas INESC-ID/IST ID/IST 3/17/2005 1 O que é um algoritmo? Algoritmos: Sequência de instruções necessárias para a resolução de um problema bem formulado [passíveis

Leia mais

Lógica Proposicional

Lógica Proposicional Lógica Proposicional Lógica Computacional Carlos Bacelar Almeida Departmento de Informática Universidade do Minho 2007/2008 Carlos Bacelar Almeida, DIUM LÓGICA PROPOSICIONAL- LÓGICA COMPUTACIONAL 1/28

Leia mais

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur Capítulo 2 Lógica Proposicional Lógica para Programação LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08 c Inês Lynce c Luísa Coheur Programa Apresentação Conceitos Básicos Lógica Proposicional ou Cálculo

Leia mais

1 Lógica de primeira ordem

1 Lógica de primeira ordem 1 Lógica de primeira ordem 1.1 Sintaxe Para definir uma linguagem de primeira ordem é necessário dispor de um alfabeto. Este alfabeto introduz os símbolos à custa dos quais são construídos os termos e

Leia mais

TEORIA DE COMPLEXIDADE

TEORIA DE COMPLEXIDADE TEORIA DE COMPLEXIDADE Fundamentos: classes P e N P Mauricio Ayala-Rincón Grupo de Teoria da Computaç~ao http://ayala.mat.unb.br/tcgroup Instituto de Ciências Exatas Universidade de Brasília, Brasília

Leia mais

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas

Algoritmo. Exemplo. Definição. Programação de Computadores Comparando Algoritmos. Alan de Freitas Algoritmos Programação de Computadores Comparando Algoritmos Um algoritmo é um procedimento de passos para cálculos. Este procedimento é composto de instruções que definem uma função Até o momento, vimos

Leia mais

Agenda. Complexidade Não Determinista A classe NP. A classe Co-NP Reduções de tempo polinomial. Definida por. Exemplos em:

Agenda. Complexidade Não Determinista A classe NP. A classe Co-NP Reduções de tempo polinomial. Definida por. Exemplos em: A Classe NP Agenda Complexidade Não Determinista A classe NP Definida por aceitação em tempo polinomial por NTM s instâncias positivas com provas de tamanho polinomial aceitação por verificadores em tempo

Leia mais

Conhecimento e Raciocínio Lógica Proposicional

Conhecimento e Raciocínio Lógica Proposicional Conhecimento e Raciocínio Lógica Proposicional Agente Baseado em Conhecimento ou Sistema Baseado em Conhecimento Representa conhecimento sobre o mundo em uma linguagem formal (KB) Raciocina sobre o mundo

Leia mais

Estruturas de Dados 2

Estruturas de Dados 2 Estruturas de Dados 2 Algoritmos de Ordenação em Tempo Linear IF64C Estruturas de Dados 2 Engenharia da Computação Prof. João Alberto Fabro - Slide 1/38 Algoritmos de Ordenação em Tempo Linear Limite Assintótico

Leia mais

Lógica Computacional (CC2003)

Lógica Computacional (CC2003) Lógica Computacional (CC2003) Nelma Moreira Lógica Computacional 21 Conteúdo 1 Mais Teorias (decidíveis) 1 1.1 Resolução para a lógica proposicional................ 4 1.2 Cláusulas...............................

Leia mais

Resolução Proposicional Fernando Bozza, Vanessa Maria da Silva

Resolução Proposicional Fernando Bozza, Vanessa Maria da Silva Resolução Proposicional Fernando Bozza, Vanessa Maria da Silva febezza@gmail.com, vvan_@hotmail.com Curso Bacharelado em Sistemas de Informação DAINF - Universidade Tecnológica Federal do Paraná (UTFPR)

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes A classe P consiste nos problemas que podem ser resolvidos em tempo Polinomial (Problemas tratáveis) A classe NP consiste nos problemas que podem ser verificados em tempo polinomial (Problemas

Leia mais

Reduções de Problemas Difíceis

Reduções de Problemas Difíceis Reduções de Problemas Difíceis André Vignatti DINF- UFPR Reduções de Problemas Difíceis Na figura abaixo, esquema das reduções que vamos (tentar) ver. Todos problemas NP CIRCUIT SAT SAT 3SAT INDEPENDENT

Leia mais

Complexidade de Algoritmos. Edson Prestes

Complexidade de Algoritmos. Edson Prestes Edson Prestes O limite superior de complexidade de um problema refere-se ao melhor algoritmo que o resolve. nlog 2 n é um limite superior para o problema de classificação. O limite inferior de um problema

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos 2018.2 Classes P e NP P São os problemas que podem ser resolvidos em tempo polinomial por uma Máquina de Turing Determinística. NP São os problemas que podem ser decididos

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Análise de complexidade

Análise de complexidade Introdução Algoritmo: sequência de instruções necessárias para a resolução de um problema bem formulado (passíveis de implementação em computador) Estratégia: especificar (definir propriedades) arquitectura

Leia mais

2.5 FORMAS NORMAIS. Forma normal da negação

2.5 FORMAS NORMAIS. Forma normal da negação Forma normal da negação 2.5 FORMAS NORMAIS Newton José Vieira 05 de agosto de 2007 Definições preliminares: literal: variável proposicional (literal positivo) ou negação de variável proposicional (literal

Leia mais

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur

Lógica Proposicional. LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08. c Inês Lynce c Luísa Coheur Capítulo 2 Lógica Proposicional Lógica para Programação LEIC - Tagus Park 2 o Semestre, Ano Lectivo 2007/08 c Inês Lynce c Luísa Coheur Programa Apresentação Conceitos Básicos Lógica Proposicional ou Cálculo

Leia mais

Lógica Computacional. Normalização e Formas Normais. Literais, Cláusulas e Monómios; Formas Normais NNF, CNF e DNF. Algoritmos de Conversão

Lógica Computacional. Normalização e Formas Normais. Literais, Cláusulas e Monómios; Formas Normais NNF, CNF e DNF. Algoritmos de Conversão Lógica Computacional Normalização e Formas Normais Literais, Cláusulas e Monómios; Formas Normais NNF, CNF e DNF Algoritmos de Conversão 2 Outubro 2014 Lógica Computacional 1 Forma Normal Negativa - NNF

Leia mais

DIM Resolução e método tableaux DIM / 37

DIM Resolução e método tableaux DIM / 37 DIM0436 21. Resolução e método tableaux 20141014 DIM0436 20141014 1 / 37 Sumário 1 Demostração automática de fórmulas 2 Resolução 3 O método tableaux DIM0436 20141014 2 / 37 1 Demostração automática de

Leia mais

Métodos de Verificação

Métodos de Verificação Método de Na construção de derivações no sistema de cálculo de sequentes: Na aplicação de cada regra, só a manipulação referente à fórmula principal é informativa. A cópia dos contextos revela-se assim

Leia mais

SEBENTA INTRODUÇÃO Á ALGORITMIA

SEBENTA INTRODUÇÃO Á ALGORITMIA SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar

Leia mais

Lógica Computacional

Lógica Computacional Aula Teórica 13: Dedução Natural em Lógica Proposicional António Ravara Simão Melo de Sousa Departamento de Informática, Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa Departamento de

Leia mais

Análise de Algoritmos Estrutura de Dados II

Análise de Algoritmos Estrutura de Dados II Centro de Ciências Exatas, Naturais e de Saúde Departamento de Computação Análise de Algoritmos Estrutura de Dados II COM10078 - Estrutura de Dados II Prof. Marcelo Otone Aguiar marcelo.aguiar@ufes.br

Leia mais

05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II

05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II 05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir

Leia mais

Complexidade computacional

Complexidade computacional Complexidade computacional Marina Andretta ICMC-USP 15 de setembro de 2015 Baseado no livro Uma introdução sucinta a Algoritmos de Aproximação, de M. H. Carvalho, M. R. Cerioli, R. Dahab, P. Feofiloff,

Leia mais

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados. José Lucas Rangel 9.1 - Introdução. Como já vimos anteriormente, a classe das linguagens sensíveis ao contexto (lsc) é uma

Leia mais

Grafos em planeamento

Grafos em planeamento Planeamento Enquadramento Linguagens para planeamento Planeamento com procura em espaço de estados Planeamento de ordem parcial Grafos em planeamento Planeamento com lógica proposicional Análise das abordagens

Leia mais

Complexidade de Algoritmos

Complexidade de Algoritmos Compleidade de Algoritmos Prof. Diego Buchinger diego.buchinger@outlook.com diego.buchinger@udesc.br Prof. Cristiano Damiani Vasconcellos cristiano.vasconcellos@udesc.br Reduções de Problemas X NP-Completo

Leia mais

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos

Estruturas de dados para conjuntos disjuntos. Estruturas de Dados para Conjuntos Disjuntos. Estruturas de dados para conjuntos disjuntos Estruturas de dados para conjuntos disjuntos Estruturas de Dados para Conjuntos Disjuntos Fernando Lobo Algoritmos e Estrutura de Dados II Também conhecido por UNION-FIND. Objectivo: Manter uma colecção

Leia mais

Satisfação de Restrições. Capítulo 5 (disponível online)

Satisfação de Restrições. Capítulo 5 (disponível online) Satisfação de Restrições Capítulo 5 (disponível online) Sumário Problemas de Satisfação de Restrições (CSPs) Procura com Retrocesso para CSPs Procura Local para CSPs Estrutura dos CSPs Problemas de Satisfação

Leia mais

Aula 06: Análise matemática de algoritmos recursivos

Aula 06: Análise matemática de algoritmos recursivos Aula 06: Análise matemática de algoritmos recursivos David Déharbe Programa de Pós-graduação em Sistemas e Computação Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas e da Terra Departamento

Leia mais

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos.

Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos. 1 Árvores Definição 1.1 : Uma árvore é um grafo simples conexo e sem ciclos. Um grafo simples sem ciclos mas não conexo (em que cada componente conexa é portanto uma árvore) chama-se uma floresta. Numa

Leia mais

Tabelas de Hash MBB. Novembro de Algoritmos e Complexidade LEI-LCC

Tabelas de Hash MBB. Novembro de Algoritmos e Complexidade LEI-LCC Tabelas de Hash Algoritmos e Complexidade LEI-LCC 2010-2011 MBB Novembro de 2010 Tabelas e Acesso a Informação As estruturas de dados apresentadas anteriormente têm como objectivo o armazenamento de informação,

Leia mais

Construção de matrizes inteiras com somas das linhas e das colunas prescritas

Construção de matrizes inteiras com somas das linhas e das colunas prescritas Construção de matrizes inteiras com somas das linhas e das colunas prescritas Rosário Fernandes Departamento de Matemática, Faculdade de Ciências e Tecnologia Universidade Nova de Lisboa, Caparica, Portugal

Leia mais

Problemas NP-completos

Problemas NP-completos Problemas NP-completos Marina Andretta ICMC-USP 15 de setembro de 2015 Marina Andretta (ICMC-USP) sme0216 e 5826 15 de setembro de 2015 1 / 26 Sat é NP-completo Já vimos que o primeiro problema que se

Leia mais

Estruturas de dados para listas arrays e listas ligadas

Estruturas de dados para listas arrays e listas ligadas Estruturas de dados para listas arrays e listas ligadas Fernando Lobo Algoritmos e Estrutura de Dados Algumas figuras retiradas do livro Introduction to Algorithms, 3rd Edition. 1 / 29 Listas Uma lista

Leia mais

Como saber se um problema está em NP e não está em P?

Como saber se um problema está em NP e não está em P? ? P = NP Uma das principais questões em aberto é se P = NP, isto é, se de fato tudo o que pode ser feito em tempo polinomial por uma MTND poderia ser feito por uma MTD em tempo polinomial, talvez com um

Leia mais

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo PMR2300 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó (exceto a

Leia mais

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

2. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados. Capítulo 5 Abstracção de dados 5. Exercícios de revisão. Diga o que é um tipo abstracto de informação.. Diga qual é a diferença entre tipos de informação elementares e tipos de informação estruturados.

Leia mais

Otimização Combinatória - Parte 4

Otimização Combinatória - Parte 4 Graduação em Matemática Industrial Otimização Combinatória - Parte 4 Prof. Thiago Alves de Queiroz Departamento de Matemática - CAC/UFG 2/2014 Thiago Queiroz (DM) Parte 4 2/2014 1 / 33 Complexidade Computacional

Leia mais

Pesquisa: operação elementar

Pesquisa: operação elementar Pesquisa: operação elementar uma das operações mais usadas em programação pesquisas em: vectores, matrizes, tabelas de registos, ficheiros, tipos de dados estruturados (hierarquicos),... necessidade de

Leia mais

Técnicas Inteligência Artificial

Técnicas Inteligência Artificial Universidade do Sul de Santa Catarina Ciência da Computação Técnicas Inteligência Artificial Aula 03 Métodos de Busca Parte 1 Prof. Max Pereira Solução de Problemas como Busca Um problema pode ser considerado

Leia mais

Relatório de Inteligência Artificial

Relatório de Inteligência Artificial Relatório de Inteligência Artificial Hidato Grupo 4 Diogo Simões - 63558 Inês Almeida - 63556 Miguel Diogo - 63567 Introdução O objectivo deste projecto é resolver automaticamente um tabuleiro de Hidato

Leia mais

Problemas Algoritmicos

Problemas Algoritmicos Problemas Algoritmicos 1 O que pode ser computado? Chegamos a um importante ponto do curso. Vamos agora estudar uma das questões mais fundamentais em Ciência da Computação: Qual seria o limite do poder

Leia mais

Projeto e Análise de Algoritmos

Projeto e Análise de Algoritmos Projeto e Análise de Algoritmos Tempo polinomial Verificação de tempo polinomial Diane Castonguay diane@inf.ufg.br Instituto de Informática Universidade Federal de Goiás Tempo polinomial Um algoritmo é

Leia mais

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio

USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais

Leia mais

Análise e Projeto de Algoritmos

Análise e Projeto de Algoritmos Análise e Projeto de Algoritmos 2018.2 Classes P e NP P São os problemas que podem ser resolvidos em tempo polinomial por uma Máquina de Turing Determinística. NP São os problemas que podem ser decididos

Leia mais

Podemos classificar os métodos de prova em três categorias:

Podemos classificar os métodos de prova em três categorias: Especificação e Prova Podemos classificar os métodos de prova em três categorias: Provas não assistidas computacionalmente: as demonstrações são efectuadas à mão e podem ser descritas informalmente. Ferramentas

Leia mais

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser

É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser É interessante comparar algoritmos para valores grandes de n. Para valores pequenos de n, mesmo um algoritmo ineficiente não custa muito para ser executado 1 Fazendo estimativas e simplificações... O número

Leia mais

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo Árvore: estrutura composta por nós e arestas entre nós. As arestas são direcionadas ( setas ) e: um nó (e apenas um) é a raiz; todo nó

Leia mais

Os Problemas de Optimização Combinatória e a Teoria da Complexidade

Os Problemas de Optimização Combinatória e a Teoria da Complexidade Metodologias de Apoio à Decisão Os Problemas de Optimização Combinatória e a Teoria da Complexidade Programação Inteira Mista Programação Linear Programação Binária Mista Programação Inteira Slide Fluxos

Leia mais

Otimização de horários Seminário. Clarisse Resende 25/01/2013

Otimização de horários Seminário. Clarisse Resende 25/01/2013 Otimização de horários Seminário Clarisse Resende 25/01/2013 O problema dos horários consiste numa sequência de atividades de programação, satisfazendo um conjunto de restrições de recursos. Pretende-se

Leia mais

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números

Problema de seleção de atividades. Aula 14. Exemplo. Algoritmos Gulosos. Algoritmos Gulosos. Intervalo: par ordenado de números Problema de seleção de atividades Aula 14 Algoritmos Gulosos Prof. Marco Aurélio Stefanes marco em dct.ufms.br www.dct.ufms.br/ marco Intervalo: par ordenado de números [s[i],f[i]): início e fim do intervalo

Leia mais

Lógica Computacional DCC/FCUP 2017/18

Lógica Computacional DCC/FCUP 2017/18 2017/18 Raciocínios 1 Se o André adormecer e alguém o acordar, ele diz palavrões 2 O André adormeceu 3 Não disse palavrões 4 Ninguém o acordou Será um raciocínio válido? Raciocínios Forma geral do raciocínio

Leia mais

Imagination is more important than knowledge A. Einstein. 4. Partição de Polígonos. Mestrado em Matemática e Aplicações

Imagination is more important than knowledge A. Einstein. 4. Partição de Polígonos. Mestrado em Matemática e Aplicações 4. Partição de Polígonos Antonio L. Bajuelos Departamento de Matemática Universidade de Aveiro Mestrado em Matemática e Aplicações Imagination is more important than knowledge A. Einstein 2 Algumas motivações

Leia mais

Criptografia. Criptografia de Chave Pública. Manuel Barbosa (mbb at dcc.fc.up.pt) 2018/2019

Criptografia. Criptografia de Chave Pública. Manuel Barbosa (mbb at dcc.fc.up.pt) 2018/2019 Criptografia Criptografia de Chave Pública Manuel Barbosa (mbb at dcc.fc.up.pt) 2018/2019 Parte I Criptografia de chave pública Pressupostos Computacionais Nas aulas anteriores vimos diversas primitivas

Leia mais

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35 INE5603 Introdução à POO Prof. A. G. Silva 25 de setembro de 2017 Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de 2017 1 / 35 Baseado em materiais da Recursividade Unisinos, Cesar Tacla (UTFPR),

Leia mais

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa

ANÁLISE DE ALGORITMOS: PARTE 1. Prof. André Backes. Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa ANÁLISE DE ALGORITMOS: PARTE 1 Prof. André Backes Algoritmos 2 Como resolver um problema no computador? Precisamos descrevê-lo de uma forma clara e precisa Precisamos escrever o seu algoritmo Um algoritmo

Leia mais

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo

Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo Algoritmos e Estruturas de Dados I Prof. Tiago Eugenio de Melo tmelo@uea.edu.br www.tiagodemelo.info Observações O conteúdo dessa aula é parcialmente proveniente do Capítulo 11 do livro Fundamentals of

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca

Leia mais

método de solução aproximada

método de solução aproximada método de solução aproximada Definir - Representação - Objectivo - Função de avaliação 73 Representação do problema - Definição das variáveis de decisão do modelo escolhido para o problema real. Importante

Leia mais

Formas Normais para Lógicas Modais

Formas Normais para Lógicas Modais GoBack Formas Normais para Lógicas Modais Cláudia Nalon http://www.cic.unb.br/docentes/nalon nalon@{cic.unb.br, unb.br} Universidade de Brasília Instituto de Ciências Exatas Departamento de Ciência da

Leia mais

Redução de Cook-Levin e Considerações Finais

Redução de Cook-Levin e Considerações Finais Redução de Cook-Levin e Considerações Finais André Vignatti DINF- UFPR Fechando o Ciclo de Reduções Nós reduzimos o SAT para diversos problemas de busca, como mostra a figura: Todos problemas NP CIRCUIT

Leia mais

Seleção de Atributos 1

Seleção de Atributos 1 Seleção de Atributos 1 Tópicos Por que atributos irrelevantes são um problema Quais tipos de algoritmos de aprendizado são afetados Seleção de atributos antes do aprendizado Benefícios Abordagens automáticas

Leia mais

P, NP e NP-Completo. André Vignatti DINF- UFPR

P, NP e NP-Completo. André Vignatti DINF- UFPR P, NP e NP-Completo André Vignatti DINF- UFPR Problemas Difíceis, Problemas Fáceis O mundo está cheio de problemas de busca. Alguns podem ser resolvidos eficientemente, outros parecem ser muito difíceis.

Leia mais

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida

Conjuntos disjuntos. Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Conjuntos disjuntos Objectivo resolver eficientemente o problema da equivalência estrutura de dados simples (vector) implementação rápida Desempenho análise complicada Uso problemas de grafos equivalência

Leia mais

Aula 1. Teoria da Computação III

Aula 1. Teoria da Computação III Aula 1 Teoria da Computação III Complexidade de Algoritmos Um problema pode ser resolvido através de diversos algoritmos; O fato de um algoritmo resolver um dado problema não significa que seja aceitável

Leia mais

Capítulo 7. Expressões e Sentenças de Atribuição

Capítulo 7. Expressões e Sentenças de Atribuição Capítulo 7 Expressões e Sentenças de Atribuição Introdução Expressões são os meios fundamentais de especificar computações em uma linguagem de programação Para entender a avaliação de expressões, é necessário

Leia mais

Os números reais. Capítulo O conjunto I

Os números reais. Capítulo O conjunto I Capítulo 4 Os números reais De todos os conjuntos numéricos que estudamos agora, a transição de um para outro sempre era construída de forma elementar A passagem do conjunto dos números racionais aos reais

Leia mais

Codificação de Huffman

Codificação de Huffman Codificação de Huffman Bruna Gregory Palm 11 de setembro de 2017 A codificação de Huffman é um método de compressão que considera as probabilidades de ocorrência de cada símbolo no conjunto de dados a

Leia mais

Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH

Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH Nuno Miguel Duarte Sequeira André VARIABLE NEIGHBOURHOOD SEARCH Optimization and decision support techniques PDEEC 2007 Introdução A meta-heurística VNS (Variable Neighbourhood Search) é bastante recente

Leia mais

ESTRUTURA DE DADOS I AULA I

ESTRUTURA DE DADOS I AULA I ESTRUTURA DE DADOS I AULA I PROF. ME. HÉLIO ESPERIDIÃO O que é um dado? Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa de coleta). o que é a informação A

Leia mais

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente Compiladores - Análise Ascendente Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Análise Descendente vs. Ascendente As técnicas de análise que vimos até agora (recursiva com retrocesso,

Leia mais

Métodos de Programação I Ana Maria de Almeida

Métodos de Programação I Ana Maria de Almeida Métodos de Programação I 2. 35 2.10 O TIPO ESTRUTURADO TABELA (ARRAY) A estruturação de informação introduz uma nova dimensão no poder e complexidade dos nossos programas que, ao mesmo tempo que amplia

Leia mais

EET-61 Introdução a Teoria da Informação

EET-61 Introdução a Teoria da Informação EET-61 Introdução a Teoria da Informação Aula 3- Codificação de Canal October 24, 2018 1 Introdução Em muitas situações, a mensagem a ser transmitida por um sistema de comunicações é uma sequência de bits.

Leia mais

Lógica Computacional

Lógica Computacional Lógica Computacional Lógica de Operadores Booleanos Interpretações Tautológicas, Lógicas e Analíticas Funcionalidade / Tabelas de Verdade dos Operadores Booleanos Consequências Tautológica, Lógica e Analítica

Leia mais

Detecção e correcção de erros

Detecção e correcção de erros elecomunicações II Codificação - Detecção e correcção de erros o Quando existe um canal de comunicação bidireccional, o receptor poderá requerer a retransmissão da informação que continha erros. o Esta

Leia mais

Aula 8: Tableaux Analíticos

Aula 8: Tableaux Analíticos Lógica para Computação Segundo Semestre, 2014 Aula 8: Tableaux Analíticos DAINF-UTFPR Prof. Ricardo Dutra da Silva O métodos de Dedução Natural não permite inferir a falsidade de um sequente, ou seja,

Leia mais

Capítulo 3. Álgebra de Bool

Capítulo 3. Álgebra de Bool Capítulo 3 Álgebra de Bool Adaptado dos transparentes das autoras do livro The Essentials of Computer Organization and Architecture Objectivos Compreender a relação entre lógica Booleana e os circuitos

Leia mais

Satisfação de Restrições. Capítulo 5 (disponível online)

Satisfação de Restrições. Capítulo 5 (disponível online) Satisfação de Restrições Capítulo 5 (disponível online) Sumário Problemas de Satisfação de Restrições (CSPs, do Inglês Constraint Satisfaction Problems ) Procura com Retrocesso para CSPs Procura Local

Leia mais

Problemas de otimização

Problemas de otimização Problemas de otimização Problemas de decisão: Existe uma solução satisfazendo certa propriedade? Resultado: sim ou não Problemas de otimização: Entre todas as soluções satisfazendo determinada propriedade,

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Métodos de busca - seqüêncial - binária Prof. Rodrigo Rocha prof.rodrigorocha@yahoo.com http://www.bolinhabolinha.com Onde Estamos Ementa Revisão: Estrutura de dados;crescimento

Leia mais

Análise de Complexidade de Algoritmos. mario alexandre gazziro

Análise de Complexidade de Algoritmos. mario alexandre gazziro Análise de Complexidade de Algoritmos mario alexandre gazziro Definição A complexidade de um algoritmo consiste na quantidade de esforço computacional necessária para sua execução. Esse esforço é expresso

Leia mais

Análise de Algoritmos. Slides de Paulo Feofiloff

Análise de Algoritmos. Slides de Paulo Feofiloff Análise de Algoritmos Slides de Paulo Feofiloff [com erros do coelho e agora também da cris] Algoritmos p. 1 Redução polinomial Permite comparar o grau de complexidade de problemas diferentes. Uma redução

Leia mais

Fundamentos de Lógica Matemática

Fundamentos de Lógica Matemática Webconferência 5-22/03/2012 Prova por resolução Prof. L. M. Levada http://www.dc.ufscar.br/ alexandre Departamento de Computação (DC) Universidade Federal de São Carlos (UFSCar) 2012/1 Introdução É possível

Leia mais