210. André Castro Ramos - Mestrado e Doutorado em Ciência da

Transcrição

210. André Castro Ramos - Mestrado e Doutorado em Ciência da
UNIVERIDADE FEDERAL DO CEARÁ
CENTRO DE CIÊNCIAS
DEPARTAMENTO DE COMPUTAÇÃO
PROGRAMA DE MESTRADO E DOUTORADO
André Castro Ramos
COMPLEXIDADE E ALGORITMOS DE JOGOS DE BLOCOS
FORTALEZA – CE
Julho de 2014
André Castro Ramos
COMPLEXIDADE E ALGORITMOS DE JOGOS DE BLOCOS
Dissertação de Mestrado apresentada ao
Programa de Mestrado e Doutorado em
Ciência da Computação, do Departamento
de Computação da Universidade Federal do
Ceará, como requisito parcial para obtenção
do Tı́tulo de Mestre em Ciência da Computação. Área de concentração: Otimização
(Teoria da Computação).
Orientador: Prof. Dr. Rudini Menezes Sampaio
FORTALEZA – CE
Julho de 2014
Agradecimentos
Agradeço a todos os membros do ParGO, que forneceram um ambiente propı́cio ao desenvolvimento deste trabalho, que tem significou um momento crucial em minha existência.
Especialmente ao professor Rudini, que orientou e tornou possı́vel que os resultados fossem como são agora. Agradeço também a todos os parentes e amigos fora do grupo que
incentivaram que eu ingressasse e chegasse ao passos finais de um mestrado. Em especial
a meus pais, que estiveram comigo em todos os momentos.
“Como modelos computacionais, jogos e quebra-cabeças trazem uma nova visão sobre
uma teoria e mostram que ela pode ser mais concreta do que a matemática simbólica que
a define.”
Resumo
A noção de jogo eletrônico remete a entretenimento reservado às horas vagas, mas, além de uma
indústria bilionária, também é origem potencial de diversos temas de pesquisa, tanto voltados
a suas respectivas áreas quanto de interesse da própria indústria de jogos. Nesse contexto, nas
últimas décadas, foram produzidos trabalhos que lidam com esse tipo de produto como base
para problemas a serem tratados pela teoria dos algoritmos. Neste trabalho trazemos resultados
de complexidade e algoritmos relacionados a 3 jogos com caracterı́sticas em comum, Bloxorz,
On The Edge e Bobbin 3D.
Abstract
The notion of electronic game is often related to mere entertainment for free time, but, not only
a bilionaire industry, electronic gaming is also basis to many research themes focused on their
own respective fields or on the gaming industry itself. In that context, in the last few decades,
research has been made dealing with that kind of product as a basic framework for stating
problems in Computer Science terms. In this work we show complexity results and algorithms
about 3 games with important similarities, Bloxorz, On The Edge and Bobbin 3D.
11
Sumário
Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 Conceitos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Bloxorz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1 O problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Uma formulação matemática . . . . . . . . . . . . . . . . . . . . . .
3.3 Linguagem utilizada nas próximas demonstrações . . . . . . . . . .
3.4 N P -completude do BLOXORZ . . . . . . . . . . . . . . . . . . . .
3.5 Inaproximabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Bloxorz com restrições sobre chaves . . . . . . . . . . . . . . . . . .
3.7 O BLOXORZ −− . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 O BLOXORZ − . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
21
22
22
26
28
33
36
4 On The Edge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1 O problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2 N P -completude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Bobbin 3D . . . . . . . . . . . . . . .
5.1 O problema . . . . . . . . . . . .
5.2 Linguagem a ser utilizada a seguir
5.3 Algoritmo para o BOBBIN −− .
5.4 Algoritmo para o BOBBIN − . .
5.5 BOBBIN . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
41
41
43
43
44
45
6 Tabela de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
13
1 Introdução
Na área de Algoritmos, utilizam-se objetos matemáticos como vetores, matrizes e grafos. Um exercı́cio interessante para testar os limites da área de Algoritmos é trabalhar
com conceitos diferentes para definir os problemas. Uma fonte possı́vel de conceitos matemáticos são os jogos eletrônicos, que apesar de todas as questões motoras e artı́sticas,
possuem regras matemáticas. Nesta dissertação, analisamos vários problemas de jogos
eletrônicos sob o enfoque da área de Algoritmos e Complexidade Computacional. Após
uma revisão introdutória, apresentamos nossos resultados a partir do Capı́tulo 3 sobre
uma famı́lia especı́fica de jogos, a saber, jogos de bloco. Os nomes protegidos por direito
autoral utilizados aqui o são com propósito acadêmico, portanto de forma legal.
O estudo teórico de objetos entedidos como recreativos tem já um longo histórico.
Um caso clássico é o do problema das oito damas, uma questão baseada nas regras do
xadrez originalmente proposta por Max Bezzel e estudada por vários matemáticos, incluindo Gauss. No que se refere a estabelecer problemas computacionais a partir de jogos
eletrônicos e similares e analisar a complexidade deles sob a ótica da teoria de Algoritmos,
abaixo são cidados trabalhos relevantes relacionados ao assunto.
Em [Demaine, Demaine et al., 2007], é demonstrada a NP-completude de problemas
que representam quebra-cabeças, onde busca-se completar uma imagem com peças dotadas de propriedades de encaixe.
Em [Demaine, Demaine et al., 2004] estuda-se um jogo concebido em 2001, chamado
Clobber, que faz parte de competições de IA. Nesse jogo, há um tabuleiro onde algumas
posições possuem uma peça preta ou uma peça branca. Uma jogada possı́vel é mover
uma peça branca para uma peça preta adjacente, removendo a preta do tabuleiro (ou
vice-versa, movendo a preta para a posição da branca). Prova-se que é NP-Completo
decidir se existe uma sequência de jogadas que deixa o tabuleiro com apenas uma única
peça.
Em [Demaine, Demaine et al., 2006] é demonstrada a inaproximabilidade por um
fator n(1−ε) , para qualquer ε > 0, de um problema extraı́do de um jogo de lápis e papel
conhecido como Join Five ou Morpian Solitaire, onde n é o número de pontos iniciais.
Nesse jogo há alguns pontos desenhados sobre um grid (na versão mais popular, os pontos
iniciais formam uma cruz). Uma jogada possivel é incluir um ponto novo no grid que torne
possı́vel traçar um segmento (na horizontal, vertical ou diagonal) passando por 5 pontos
vizinhos do grid, incluindo o ponto novo. Além do resultado de inaproximabilidade, são
obtidos no artigo limites superiores e inferiores relacionados.
Em [Flake e Baum, 2002], estuda-se o jogo Rush Hour, um jogo cujo objetivo é tirar um
carro especial de um “estacionamento” cheio de outros carros. Os carros podem mover-se
apenas horizontalmente ou verticalmente de cada vez. O objetivo é levar o carro especial
14
Capı́tulo 1. Introdução
até a saı́da do estacionamento. Provou-se que é PSPACE-Completo decidir se é possivel
tirar o carro especial do estacionamento.
Em [Fraenkel e Goldschmidt, 1987], é provada a PSPACE-completude de diferentes
problemas em jogos competitivos cujo “tabuleiro” é um grafo direcionado.
Em [Aloupis et al., 2012], os autores conseguiram traduzir jogos clássicos da Nintendo em problemas computacionais com regras claras e, com isso, obtiveram resultados
algorı́timicos e de complexidade. Especificamente, os jogos-base foram os das franquias
Mario, Donkey Kong, Legend of Zelda, Metroid e Pokémon. O objetivo é saber se é possivel terminar uma determinada fase do jogo, ou seja, se há uma sequência de movimentos
que levem até o fim da fase. Os principais resultados obtidos foram a N P -completude de
cada problema. Além disso, com relação aos jogos da franquia Zelda, também foi provada
a P SP ACE-completude do problema de decisão.
Já em [Demaine et al., 2004], artigo relacionado ao Tetris, famoso jogo eletrônico,
prova-se a N P -completude e a inaproximabilidade por um fator n(1−ε) , para qualquer
ε > 0, onde n é o número de peças envolvidas no jogo. Nesse artigo, é apresentada uma
formalização matemática mais precisa, visto que o jogo Tetris é mais fácil de formalizar
do que os jogos da Nintendo. Em linhas gerais, esse modelo coloca como entrada uma
matriz que representa a tela do jogo, que não precisa estar inicialmente em branco, e
uma sequência de peças de Tetris. A saı́da do problema é uma sequência de movimentos
válidos (noção também definida no modelo) com o objetivo de minimizar ou maximizar
uma função especifica do problema em questão, como maximizar o número de linhas
eliminadas. Esse artigo se concentra em 4 funções objetivo: número de linhas eliminadas,
número de peças utilizadas até um movimento que cause a derrota, número de movimentos
que eliminem 4 linhas simultaneamente e altura máxima de uma posição ocupada da
matriz ao longo da sequência de movimentos, sendo que apenas nesse último exemplo o
problema é tratado como de minimização.
O artigo [Dor e Zwick, 1999] é um dos mais antigos voltados a jogos eletrônicos, no
caso o jogo Sokoban, um jogo cujo objetivo é posicionar blocos corretamente. Nesse artigo,
existe o cuidado explı́cito de separar o problema, que imediatamente é classificado como
um problema de planejamento de movimentos, do jogo em si. É provada a N P -completude
da abstração considerada e a P SP ACE-completude de uma versão alternativa onde é
possı́vel mover 2 blocos de uma vez.
Um modo versátil de se estudar matematicamente jogos eletrônicos é encontrado e
aplicado sucessivamente no livro “Games, puzzles and Computation” [Hearn e Demaine,
2009] e também aplicado no artigo [Demaine e Hearn, 2005]. Esse estudo se baseia
em um tipo de “jogo” sobre um grafo não orientado. É dada uma configuração (que
é basicamente uma orientação do grafo original) e cada jogada possı́vel é a inversão de
um arco da configuração. Sem entrar em muitos detalhes, nem todos os arcos podem
ser invertidos em determinada configuração, pois é preciso satisfazer algumas condições
15
relacionadas a pesos nos arcos e nos vértices. Em termos gerais, o objetivo é alcançar,
através do encadeamento de jogadas válidas, uma configuração onde um determinado arco
especial esteja invertido. Em versões de mais de um jogador, os arcos são alternadamente
invertidos por jogadores diferentes e cada jogador tem seu arco objetivo. Em versões com
movimentos limitados, um arco só pode ser invertido uma única vez.
É possivel ainda uma versão desse jogo com 0 jogadores, onde a cada passo existe
apenas uma única possibilidade de arco para ser invertido. Em um jogo com pelo menos
2 jogadores, cada jogador precisa tentar vencer “pensando” nas possı́veis jogadas de seus
adversários (e possivelmente evitando a vitória dos adversários antes dele).
No livro “Games, puzzles and Computation” [Hearn e Demaine, 2009] prova-se as
complexidades das variantes desse jogo, descritas na tabela abaixo.
Movimentos
Ilimitados
Limitados
Zero jogadores
PSPACE
P
Um jogador Dois jogadores
PSPACE
EXPTIME
NP
PSPACE
time ou informação parcial
RE
NEXPTIME
Resumidamente, P é a classe dos problemas computacionais de decisão que podem
ser resolvidos em tempo polinomial. N P é a classe dos problemas que podem ter uma
solução verificada em tempo polinomial. P SP ACE é a classe dos que podem ser resolvidos
com uma quantidade polinomial de armazenamento (memória). EXP T IM E é a classe
dos que podem ser resolvidos em tempo exponencial com expoente polinomial. RE (ou
Recursivamente Enumerável) é a classe dos problemas de decisão para os quais existe
um algoritmo que, dada uma instância sim, consegue determinar que a instância dada é
realmente sim. N EXP T IM E é a classe daqueles que podem ter uma solução verificada
em tempo exponencial de expoente polinomial.
Finalmente, o livro “Games, puzzles and Computation” [Hearn e Demaine, 2009]
obtém reduções polinomiais entre variantes desse jogo e vários outros jogos, como Sokoban e Rush-Hour. Com isso, obtém provas alternativas de complexidade computacional
(de acordo com a tabela acima, dependendo da variante utilizada na redução) para tais
jogos.
Existe uma conferência bienal, FUN (Fun with Algorithms), onde se concentram trabalhos de algoritmos e complexidade computacional voltados a jogos. No Capı́tulo 2,
apresentamos as definições e terminologia que servirão de base para o desenvolvimento
deste trabalho. No Capı́tulo 3, apresentamos nossos resultados sobre problemas inspirados
no jogo Bloxorz. No Capı́tulo 4, apresentamos nossos resultados sobre um problema inspirado no jogo On The Edge. No Capı́tulo 5, apresentamos nossa formulaçao de problemas
inspirados no jogo Bobbin 3D.
17
2 Conceitos Básicos
2.1 Grafos
Um grafo G é um par ordenado (V (G), E(G)) composto de um conjunto, não vazio, V (G)
de vértices e um conjunto E(G), disjunto de V (G), de arestas. Cada aresta é um par não
ordenado de vértices de G. Se o par (u, v) está em E(G), escreve-se uv ∈ E(G) e diz-se
que u e v são extremidades da aresta uv.
A denominação grafo vem do fato do mesmo poder ser representado graficamente, os
vértices como pontos e as arestas como linhas ligando suas extremidades. Dizemos que dois
vértices são adjacentes quando eles são extremidade de uma mesma aresta. De maneira
análoga duas arestas são adjacentes se compartilham uma extremidade. Uma aresta que
possui extremidades iguais é chamada laço. Duas arestas distintas com extremidades
iguais são chamadas de arestas múltiplas.
Um grafo G é finito se V (G) e E(G) são finitos. Um grafo G é dito simples se G é
finito, não possui laços e não possui arestas múltiplas. A partir de agora, toda vez que
mencionarmos grafo, estaremos nos referindo a um grafo simples.
O grau de um vértice v em G é o número de vértices que são adjacentes a v em G
e é denotado por dG (v). Se não houver ambiguidade denota-se apenas por d(v). O grau
máximo de um grafo G é o maior grau de um vértice de G e é denotado por ∆(G).
Um caminho é uma sequência não vazia W = v0 e1 v1 e2 v2 . . . ek vk na qual os termos
são alternadamente vértices e arestas, tais que, para 1 ≤ i 6= j ≤ k, ei = vi−1 vi . neste
caso v0 e vk são as extremidades de W. Um caminho com n vértices é denotado por Pn
e o comprimento de um caminho é o número de arestas que este possui. A distância
entre dois vértices u e v em um grafo G é o comprimento do menor caminho que possui
extremidades u e v em G.
Um caminho hamiltoniano W = v0 e1 v1 e2 v2 . . . ek vk de um grafo G é um caminho tal
que ∀v ∈ V (G), existe um único i tal que vi = v.
H é um subgrafo de G se G e H são grafos onde V (H) ⊆ V (G)) e E(H) ⊆ E(G).
Um subgrafo H de G é induzido se, caso u ∈ V (H) e v ∈ V (H), uv ∈ E(H) ⇔ uv ∈
E(G).
O produto cartesiano GH entre os grafos G e H é o grafo (V , E ) tal que V =
V (G) × V (H) e (u, u0 )(v, v 0 ) ∈ E se ocorre um dos seguintes:
• u = v e u0 v 0 ∈ E(H).
• u0 = v 0 e uv ∈ E(G).
Um grid é o produto cartesiano entre grafos correspondentes a um Pm e um Pn .
18
Capı́tulo 2. Conceitos Básicos
Um subgrafo induzido Gs de um grid qualquer é um grid sólido se Gs pode ser mapeado
no plano cartesiano de maneira que as arestas liguem pontos com distância 1 entre si e
as faces internas formadas possuam área 1.
Um grafo ponderado é uma generalização do conceito de grafo onde, além do par
(V, E), existe uma função w : E → R. O valor de w para uma aresta é conhecido como
seu peso. Em grafos ponderados, o comprimento, nesse caso geral conhecido como custo,
n−1
P
de um caminho Pn é
w(ei ).
i=1
Um grafo direcionado é uma alteração do conceito de grafo onde E(G), chamado
neste caso de conjunto de arcos, é um conjunto de pares ordenados, ou seja, o arco
(u, v) 6= (v, u). Em um grafo direcionado G, o vértice v é adjancente ao vértice u se
(u, v) ∈ E(G) e também se diz nesse caso que e sai de u.
19
3 Bloxorz
3.1 O problema
Bloxorz é um jogo eletrônico desenvolvido originalmente para a plataforma Flash pela
DX Interactive onde o jogador controla um paralelepı́pedo de dimensões na escala 2:1:1 e
deve levá-lo entre 2 pontos de um cenário. Embora a visualização implementada seja uma
projeção que dá noção de profundidade, a mecânica envolvida é totalmente bidimensional.
A Figura 1 exemplifica o que se pode esperar ver no jogo.
Figura 1 – Uma visão geral do jogo
O objetivo é fazer o bloco, ou seja, o paralelepı́pedo, cair no buraco, o que é equivalente
no caso a ser deixado em pé sobre ele, no final, que é ilustrado na Figura 2a, de cada fase.
O bloco, mostrado na Figura 2b, pode ser rolado para frente, para trás, para esquerda ou
para a direita, mas não pode sair dos limites do piso da fase. Caso isso aconteça, a fase
reinicia. As fases podem ter chaves e pontes como na Figura 2c. As chaves são ativadas
quando pressionadas pelo bloco. Pontes então podem mudar de estado e se manter no
novo estado, fechadas, por exemplo, mesmo se o bloco for movido. Existem 2 tipos
básicos de chaves: pesadas ou leves. As leves, representadas da Figura 2d pela circular,
são ativadas quando qualquer parte do bloco as pressiona. As pesadas, que aparecem
em forma de ”x”como na Figura 2d, são ativadas apenas se o bloco estiver em pé sobre
elas. Quando ativadas, as chaves podem apresentar diferentes comportamentos. Algumas
alternarão o estado de pontes entre fechada e aberta a cada uso (que serão chamadas de
alternates) e outras mudarão o estado de pontes permanentemente (que serão chamadas
de não-alternates). Ao longo do texto, esses estados das pontes serão também chamados
de ligada e desligada. Ligada se referindo a fechada, ou seja, permitindo passar. Piso de
madeira, ilustrado na Figura 2e, é mais frágil que o resto do cenário e, se o bloco ficar em
20
Capı́tulo 3. Bloxorz
(a) Final da fase
(b) Bloco
(e) Madeira
(c) Chave e ponte
(f) Teletransporte
(g) Bloco
queno
(d) Dois tipos de
chave
pe-
Figura 2 – Elementos de uma fase
pé em cima dele, ele irá cair, tirando o bloco dos limites do piso da fase. Também existem
nas fases as chaves especiais de teletransporte como a que aparece na Figura 2f, elas são
ativadas como chaves pesadas e teletransportam o bloco para 2 lugares diferentes e assim
o dividem em 2 blocos cúbicos menores, um para cada ponto do cenário. Eles podem ser
controlados individualmente e se tornam um bloco normal caso colocados um ao lado do
outro. Blocos pequenos como os da Figura 2g podem ativar chaves leves, mas não chaves
pesadas. Além disso, blocos pequenos não podem passar pelo buraco final da fase.
O problema computacional que é estudado neste capı́tulo procura traduzir a seguinte
pergunta:
Dada uma fase hipotética de Bloxorz, ou seja, uma construção arbitrária que respeite
as regras expostas acima sobre o que pode haver em uma fase do jogo, mas sem que se
considere possı́veis restrições práticas, memória por exemplo, existe uma sequência de
jogadas que leve o jogador a passar de fase?
Exemplos de soluções, ou seja, sequências de jogadas, para fases concretas do jogo
estão ilustrados nas Figuras 3 e 4.
Na figura 3, o número i > 1 marca um bloco que vem em sequida do marcado com
i − 1 na sequência, 1 marca o primeiro movimento, se i está entre 2 elementos, marca um
bloco deitado sobre eles 2 e se está centralizado sobre um elemento marca um bloco em
pé sobre ele.
3.2. Uma formulação matemática
21
Figura 3 – Curioso caso com pontes
Figura 4 – Passos até o final da fase
3.2 Uma formulação matemática
Definição 3.1. Sejam a e b números naturais positivos, A = {1, ..., a}, B = {1, ..., b},
conjuntos que representam os limites da fase,
I = {(teletransporte, x1 , y1 , x2 , y2 ) : x1 , x2 ∈ A e y1 , y2 ∈ B} e
J = {(chave, ((x1 , y1 ), ..., (xk , yk )), alt, peso) : x1 , ..., xk ∈ A, y1 , ..., yk ∈ B, alt, peso ∈
{0, 1}, k ∈ N e chave ∈ {1, ..., |A| ∗ |B|}}, uma fase do Bloxorz generalizado é uma função
f : A × B → T onde T = {∅, piso, madeira, inicial, f inal} ∪ I ∪ J tal que existem xi , yi , xf
e yf tais que sejam os únicos valores para os quais f (xi , yi ) = inicial e f (xf , yf ) = f inal,
22
Capı́tulo 3. Bloxorz
não existem (xc1 , yc1 ) e (xc2 , yc2 ) diferentes tais que f (xc1 , yc1 ) = (z, K1 , alt1 , peso1 ) e
f (xc2 , yc2 ) = (z, K2 , alt2 , peso2 ). Além disso, se f (x, y) = (z, K, alt, peso), z ∈ 1, ..., |J ∩ Im(f )|
e, se (xp , yp ) ∈ K, f (xp , yp ) = piso ou f (xp , yp ) = ∅. Essas últimas restrições sobre chaves
estabelecem uma numeração única e ”sem buracos”para cada uma e que elas operam sobre
posições vazias ou de piso.
Considere o algoritmo abaixo que tem como entrada a matriz f que representa uma
fase do Bloxorz generalizado como definido acima, xi e yi como definidos acima, o valor d
que representa a quantidade de posições (i, j) tais que f [i][j] ∈ J e o vetor S de elementos
de {↑, ↓, ←, →} e, como saı́da, ((x1 , y1 , x2 , y2 ), p), onde x1 , x2 ∈ A e y1 , y2 ∈ B, um par
formado pela situação final do bloco e quantos movimentos foram executados com sucesso.
A linguagem em que esse algoritmo está expresso não é bem definida, mas seus passos
são precisos para aqueles familiarizados com a semântica de linguagens de programação
e pseudocódigo de forma a corresponder a uma determinada máquina de Turing. Uma
observação é que a matriz deve representar uma fase válida, ou seja, atendendo todos os
requisitos da definição. Por exemplo, uma fase não pode ter dois finais ou ser desprovida
de final.
Esse algoritmo é análogo àquilo descrito anteriormente como as regras que definem
o resultado de sequências de comandos no Bloxorz e parte da definição de fase dada em
seguida.
O problema principal explorado neste capı́tulo, o BLOXORZ, é aquele onde, dada
uma fase f do Bloxorz generalizado, deseja-se saber se existe uma sequência S de elementos
de {↑, ↓, ←, →, } tal que |S| ≤ |f | e, se colocada como parte de uma entrada consistente
a com f para o algoritmo descrito, ele retorna ((xf , yf , xf , yf ), |S|).
3.3 Linguagem utilizada nas próximas demonstrações
Na Figura 5, são mostrados os sı́mbolos que representarão a estrutura de uma fase ou
conjunto de fases da forma como foi definido na seção anterior, cada uma representando
uma possibilidade para f (x, y) com a observação de que na verdade pontes abertas significam f (x, y) = ∅ e pontes fechadas significam f (x, y) = piso, o que identifica uma posição
como ponte é pertencer a algum ch2 onde ch ∈ J ∩ Im(f ). Na representação, abaixo de
todo tele ∈ I ∩ Im(f ) estarão indicados tele2 , tele3 , tele4 e tele5 e, abaixo de toda ponte,
os rótulos das chaves que satisfazem a condição que a torna uma ponte.
3.4 N P -completude do BLOXORZ
Nesta seção, trataremos do problema geral descrito nas seções 3.1 e 3.2. Mais especificamente, trataremos do problema de decisão que chamamos BLOXORZ, que pode ser
descrito alternativamente da forma a seguir:
3.4. N P -completude do BLOXORZ
Algoritmo 1 Mecanismos do Bloxorz
Entrada: f [l][a], xi , yi , d, S[s]
x1 , x2 , y1 , y2 := xi , xi , yi , yi
cubo := 0 chaves := [0] ∗ d
for i := 1, ..., s do
x3 , x4 , y3 , y4 := x1 , x2 , y1 , y2
x1 , x2 , y1 , y2 := rolarbloco(S[i], (x1 , x2 , y1 , y2 ), cubo)
if S[i] = then
if cubo = 1 then
cubo := 2
if cubo = 2 then
cubo := 1
i := i + 1
vá para a linha 5
if f [x1 ][y1 ] = ∅ or f [x2 ][y2 ] = ∅ then
x1 , y1 , x2 , y2 := x3 , y3 , x4 , y4
return ((x1 , y1 , x2 , y2 ), i − 1)
if f [x1 ][y1 ] = madeira and x1 = x2 e y1 = y2 then
O mesmo que o caso anterior
if |x1 − x2 | < 2 e |y1 − y2 | < 2 e (x1 = x2 ou y1 = y2 ) then
cubo := 0
if tamanho(f [x1 ][y1 ]) = 5 e x1 = x2 e y1 = y2 then
cubo := 1
tele := f [x1 ][y1 ]
x1 , x2 , y1 , y2 := tele[2], tele[3], tele[4], tele[5]
if tamanho(f [x1 ][y1 ]) = 4 and (f [x1 ][y1 ][3] = 0 or chaves[f [x1 ][y1 ][1]] = 0)
and ((x1 = x2 e y1 = y2 ) or f [x1 ][y1 ][4] = 0) then
pontes := f [x1 ][y1 ][2]
for j := 1, ..., tamanho(pontes) do
if pontes[j] = ∅ then
f [pontes[j]] := piso
if pontes[j] = piso then
f [pontes[j]] := ∅
chaves[f [x1 ][y1 ][1]] := ((chaves[f [x1 ][y1 ][1]) + 1) mod 2
end
else
if tamanho(f [x2 ][y2 ]) = 4 and (f [x2 ][y2 ][3] = 0 or chaves[f [x2 ][y2 ][1]] = 0)
e f [x2 ][y2 ][4] = 0 then
O mesmo que o caso anterior trocando x1 , y1 por x2 , y2 .
end
end
return ((x1 , y1 , x2 , y2 ), s)
23
24
Capı́tulo 3. Bloxorz
Rotina rolarbloco(direcao, posicao, cubo)
x1 , x2 , y1 , y2 := posicao[1], posicao[2], posicao[3], posicao[4]
if direcao =→ then
if cubo = 0 then
if x1 = x2 then
x1 := x1 + 1
if y1 = y2 then
x2 := x2 + 2
else
x2 := x2 + 1
end
else
x2 := x2 + 1
x1 := x1 + 2
end
if cubo = 1 then
x1 := x1 + 1
if cubo = 2 then
x2 := x2 + 1
if direcao =← then
mesmo que S[i] =→ trocando ’+’ por ’-’
if direcao =↑ then
mesmo que S[i] =→ trocando ’x’ por ’y’
if direcao =↓ then
mesmo que S[i] =↑ trocando ’+’ por ’-’
return (x1 , x2 , y1 , y2 )
(a) Piso
(e) Teletransporte
(b) Ponte fechada
(f) Chave
(c) Ponte aberta
(g) Inı́cio
Figura 5 – Elementos de uma fase
(d) Madeira
(h) Final
3.4. N P -completude do BLOXORZ
(a) Inı́cio
25
(b) Variável
(c) Cláusula
(d) Fim
Figura 6 – Engrenagens da redução
• Problema de Decisão BLOXORZ:
• Entrada: Uma fase f do Bloxorz generalizado.
• Pergunta: Existe uma sequência com no máximo |f | movimentos de modo que o
bloco, começando na posição inicial da fase f , chegue na posição final da fase f ?
O teorema abaixo prova a NP-Completude do problema de decisão BLOXORZ, mesmo
restrito a fases que não possuem teletransportes.
Teorema 3.1. SAT ≤p BLOXORZ.
Demonstração. Dada uma fórmula lógica ϕ na FNC (forma normal conjuntiva), vamos
construir uma fase do Bloxorz utilizando as engrenagens (gadgets) descritas abaixo. Essas
fórmulas são no formato ϕ = C1 ∧ C2 ∧ . . . ∧ Cn . Cada Cj é chamado de cláusula e é do
formato l1,j ∨ l2,j ∨ . . . ∨ lmj ,j onde cada li,j é chamado literal e é uma variável xi ou o
complemento xi de uma variável.
A Figura 6 ilustra a redução. Nela temos que as partes que compõem a fase construı́da
são colocadas uma imediatamente à direita da outra, primeiramente a engrenagem de
inı́cio, depois uma de variável para cada variável e finalmente, na linha central, uma de
cláusula para cada cláusula e o elemento de fim da fase na mesma linha das engrenagens
de cláusula. As chaves são leves e não-alternantes. A ponte da engrenagem de uma
cláusula Cj é ligada pela chave C2 da engrenagem de uma variável xi , se xi ∈ Cj , e é
ligada pela chave C5 da engrenagem de uma variável xi , se xi ∈ Cj . Observe que as
pontes superior e inferior de cada engrenagem de variável começam ligadas e que elas são
desligadas respectivamente pelas chaves C1 e C4 da engrenagem da mesma variável. Note
ainda que a ponte de cada engrenagem de cláusula começa desligada. Finalmente, observe
que, para conseguir chegar a posição final da fase, será preciso ligar todas as pontes das
engrenagens de cláusula.
26
Capı́tulo 3. Bloxorz
Suponha que a fórmula ϕ é satisfatı́vel. Ou seja, existe uma atribuição de valores
verdadeiro ou falso às variáveis de modo que todas as cláusulas sejam satisfeitas. Para
a fase construı́da para ϕ, existe uma sequência de movimentos que permite atravessar as
engrenagens de variável ativando as chaves correspondentes aos literais satisfeitos pela
valoração. Além disso, note que é impossı́vel obter uma sequência de movimentos que
ative as chaves C2 e C5 de uma mesma engrenagem de variável. Com isso, como a
valoração satisfaz a fórmula ϕ, então todas as pontes das engrenagens de cláusulas serão
ligadas e com isso será possı́vel chegar ao fim da fase. Adicionalmente, como a sequência
só tem movimentos para a direita, para cima e para baixo e, se há um movimento para
cima, não há para um para baixo na mesma coluna e vice-versa, ela não envolve posições
repetidas e portanto a sequência tem cardinalidade menor do que a fase.
Por outro lado, seja f (ϕ) a fase gerada pela redução em questão para a fórmula
ϕ na CNF. Se existe uma sequência-solução para a fase f (ϕ), existe uma sequência de
movimentos que liga todas as pontes das engrenagens de cláusula. Tal sequência atravessa
as engrenagens de variável ativando a chave de pelo menos um literal de cada cláusula
de ϕ. Além disso, como já dito, não é possı́vel ativar a chave C2 e C5 de uma mesma
engrenagem de variável em nenhuma sequência de movimentos sucessivos, pois, se a chave
C2 foi ativada, a chave C1 também foi ativada, pois, devido à ponte ativada pela chave
C3, não é possı́vel alcançá-la vindo da direita, e, como existe a chave C1, não é possı́vel
ativar a chave C2 e depois retornar à esquerda para ativar a chave C5. Um raciocinio
simétrico pode ser aplicado partindo de um literal negado. Portanto, ϕ é satisfatı́vel.
Lema 3.1. BLOXORZ ∈ N P
Demonstração. BLOXORZ é um problema de decisão e seu algoritmo verificador é avaliar se, dada uma fase do Bloxorz como entrada e dada uma sequência de movimentos
como certificado, esta sequência de movimentos leva o bloxo da posição inicial a posição
final da fase e se o número de movimentos é menor ou igual ao tamanho da fase. Como o
tamanho da sequência está limitado pelo tamanho da fase, isso pode ser feito em tempo
polinomial em relação à entrada.
Colorário: BLOXORZ é N P -completo.
Pode-se observar que o comportamento segue a tabela da Seção ??, já que temos um
quebra-cabeça de um jogador e adicionamos uma restrição sobre o número de passos.
Embora não exista aqui uma prova formal, pode-se conjeturar fortemente que tirando
essa restrição, o problema se encaixa em P SP ACE.
3.5 Inaproximabilidade
Nesta seção é considerada uma versão de otimização do problema BLOXORZ. Para isso,
precisamos receber como entrada uma fase que tenha sempre uma solução (uma sequência
3.5. Inaproximabilidade
27
de movimentos que leve o bloco da posição inicial até a posição final). Na definição abaixo,
usaremos a noção de fase desviável, que é basicamente uma fase generalizada F do Bloxorz
que admite uma sequência com no máximo |F | movimentos levando o bloco da posição
inicial até a final sem passar por chaves. Para delimitar esse problema, primeiro será feita
a seguinte definição:
Definição 3.2. Uma fase desviável de Bloxorz é uma fase f do Bloxorz generalizado
tal que existe um conjunto L de posições (x, y) tal que pode-se definir a fase g com um
domı́nio que englobe os valores de L, g(x, y) = f (x, y) se (x, y) ∈ L e g(x, y) = ∅ caso
contrário, não existe g(x, y) ∈ J e g é uma instância sim do BLOXORZ.
É fácil ver que, dada uma fase do Bloxorz generalizado, é possı́vel decidir se ela é
desviável ou não em tempo polinomial. Uma observação é que uma fase desviável f
de Bloxorz é uma instância sim do BLOXORZ, pois qualquer sequência-solução de g é
sequência solução de f .
A pergunta que define o problema de otimização MINBLOXORZ é: Dada uma fase f
desviável de Bloxorz, qual é o menor valor h = |S| onde S é uma sequência de movimentos
que levam o bloco da posição inicial até a posição final?
Teorema 3.2. Se existe um algoritmo n1−ε -aproximativo para M IN BLOXORZ para
algum ε > 0, então P = N P .
Figura 7 – Construção que indica inaproximabilidade
Demonstração. Vamos aplicar a conhecida técnica do gap em provas de inaproximabilidade. Suponha que existe um algoritmo polinomial aproximativo com fator n1−ε para
algum ε > 0, onde n é o tamanho da fase desviável, para o problema MINBLOXORZ.
Vamos utilizar a redução SAT ≤p BLOXORZ do Teorema 3.1. Dada uma fórmula
ϕ na CNF, seja F a fase obtida na redução do Teorema 3.1. Provou-se que, se ϕ é
satisfatı́vel, então existe uma sequência com no máximo |F | movimentos que levam o
bloco da posição inicial até a posição final da fase F .
Vamos alterar a fase F para que seja uma fase desviável. Acrescente à fase F um
“caminho externo” (ilustrado na Figura 7) de tamanho X = N 2/ε − N capaz de levar o
bloco da posição inicial até a posição final. Com isso, obtemos uma fase F 0 desviável de
tamanho |F 0 | = N + X = N 2/ε .
28
Capı́tulo 3. Bloxorz
Se ϕ é satisfatı́vel, então a fase F 0 possui uma sequência de movimentos de tamanho
no máximo N . Com isso, o algoritmo aproximativo obtém uma solução de tamanho
no máximo N · f ator = N · (|F 0 |1−ε ) = N · (N 2/ε )1−ε = N −1+2/ε < N 2/ε − N = X.
Logo o algoritmo aproximativo obtém uma solução de tamanho menor do que X e que
consequentemente não utiliza o “caminho externo” (pois este tem tamanho X). Ou seja,
o algoritmo obtém um caminho na fase original F .
Se ϕ não é satisfatı́vel, então o algoritmo aproximativo obtém uma solução de tamanho
pelo menos X.
Resumindo, ϕ é satisfatı́vel se e só se o algoritmo aproximativo retornar uma solução
de tamanho menor que X. Como o algoritmo aproximativo é polinomial, ele estaria
decidindo o problema SAT e portanto P=NP.
3.6 Bloxorz com restrições sobre chaves
Nesta seção lidamos com versões alternativas dos problemas anteriores onde se exclui
a possibilidade de fases com uma quantidade arbitrária de chaves que abrem e fecham
pontes.
Definição 3.3. k-BLOXORZ é a restrição do BLOXORZ onde consideramos instâncias
f cujo conjunto Im(f ) possui até k elementos em J.
Teorema 3.3. Existe um algoritmo de tempo de execução polinomial que decide kBLOXORZ.
Demonstração. Supondo a existência de um algoritmo de tempo de execução O(ab α(n))
para BLOXORZ restrito às devidas instâncias, onde a é uma constante qualquer, b é o
número de chaves da fase, α(n) é um polinômio em n e n é o número de elementos da fase,
esse é um algoritmo de execução polinomial para k-BLOXORZ. Basta então provar que
existe tal algoritmo, que será apresentado a seguir.
Esse algorı́tmo consiste em gerar um grafo direcionado a partir da fase e encontrar
um caminho nesse grafo que represente uma sequência-solução. O conjunto de vértices do
grafo é o conjunto de estados possı́veis das variáveis x1 , y1 , x2 , y2 no algoritmo que define
o BLOXORZ combinadas com as possibilidades para o vetor chaves e mais um vértice
z. Os arcos de peso 1 ligam dois vértices que podem ocorrer em iterações seguidas no laço
principal do algoritmo e os de peso 0 ligam aqueles onde (x1 , y1 , x2 , y2 ) = (xf , yf , xf , yf )
ao vértice z.
Encontrar uma solução para a fase que seja menor do que a própria fase é encontrar
um caminho de tal tamanho no grafo, pois cada elemento da sequência é processado em
uma iteração e cada iteração processa um elemento.
3.6. Bloxorz com restrições sobre chaves
29
Tal construção é uma abordagem trivial para o problema, pois parte dos estados do
algoritmo que o define e busca conexão entre dois estados. O próprio algoritmo definidor
do problema define também o procedimento para a construção das arestas neste algorimo.
Sobre a complexidade de tempo, é preciso avaliar o custo de construir os vértices, as
arestas e o de encontrar o caminho. Cada vértice ou arco pode ser contruı́do em tempo
O(1), pois cada arco é definido com um simples if do algoritmo. A quantidade de vértices
é 2b n2 , o número de maneiras válidas de valorar x1 , y1 , x2 ey2 multiplicado pelo número
de maneiras de valorar o vetor chaves. O número de arcos é proporcional ao número
de vértices, pois o número que sai de cada vértice é limitado por 2|{↑, ↓, ←, →}| = 8,
logo a geração do grafo tem o mesmo custo de tempo assintoticamente que o número de
vértices e que o algoritmo como um todo, já que para detectar o caminho, basta usar
um algoritmo de busca. Temos que o algoritmo desta demonstração executa em uma
quantidade de passos O(ab α(n)) onde a = 2, b é o número de chaves da fase e α(n) = n2 ,
logo esse é um algoritmo O(n2 ) para k-BLOXORZ.
Uma observação é que o algoritmo apresentado no teorema pode ser visto quase como
uma força bruta para o BLOXORZ, no entanto, ele traz a informação prática de que,
se o objetivo é operar sobre um conjunto de fases de Bloxorz onde o número de chaves é
muito pequeno, isso pode ser feito em tempo hábil. Muito pequeno pela exponencialidade
no pior caso em relação a um crescimento no número de chaves. Fazendo uma estimativa
inocente, provavelmente a partir de no máximo 60 chaves o algoritmo já seria totalmente
impraticável na tecnologia atual.
Definição 3.4. CLOSED-BLOXORZ é a restrição do BLOXORZ onde as pontes
apenas fecham e não há chaves de teletransporte.
Teorema 3.4. CLOSED-BLOXORZ ∈ P
Demonstração. Existe um algoritmo que executa em tempo polinomial em relação ao
número de elementos para esse problema. A seguir ele será explicado e pode ser visto
como uma versão do algoritmo para o k-BLOXORZ onde não é necessário considerar
todas as combinações de ativação das chaves. Aqui é suposto sem perda de generalidade
que a fase não possui pontes inicialmente fechadas, pois elas, se existissem, nunca seriam
abertas, o que as tornaria equivalentes a piso normal.
Ele consiste nos seguinte passos:
1. Gere um grafo como no algorimo para o k − BLOXORZ a partir da fase obtida da
original com a troca das chaves por piso normal e das pontes por posições vazias.
2. Execute uma busca em profundidade no grafo a partir do vértice do bloco inicial
para determinar se existe caminho até o buraco final
30
Capı́tulo 3. Bloxorz
3. Em caso positivo, retorne sim.
4. Armazene a informação sobre as chaves para as quais a busca alcança um bloco que
as ativaria em um vetor A.
5. Se A = ∅, retorne não.
6. Execute recursivamente este algoritmo para a fase obtida da original com a troca das
pontes que as chaves em A fechariam e das próprias chaves de A por piso normal.
Para atestar a completude/corretude desse algoritmo, pode-se considerar a do apresentado para o k-BLOXORZ e mapear as chamadas recursivas para as mudanças de
conjunto de vértices no referido algoritmo anterior com a observação de que, um bloco
alcançável a partir de uma sequência de movimentos em uma fase, pode ser alcançado na
de sua chamada recursiva replicando-se a sequência, já que as mudanças na fase adicionam
piso normal e apenas substituem por piso normal chaves que não possuiriam efeito em sua
ativação. Além disso deve-se considerar a condição que o algoritmo para o CLOSEDBLOXORZ utiliza para identificar uma instância não. Os casos onde não há caminho
até o buraco final desprezando-se a ativação das chaves e ao mesmo tempo não há chaves
ativáveis de forma a fechar novas pontes são precisamente as instâncias não.
Para atestar a polinomialidade do algoritmo, basta um cálculo de sua complexidade
de tempo. O número de chamadas recursivas é limitado pelo número de chaves, que por
sua vez é limitado pelo número total de elementos da fase, que aqui é chamado de n e
é o tamanho da entrada. Dentro de cada chamada recursiva, os únicos passos que não
podem ser feitos de forma que executem em tempo O(1) são 1 e 2. Os passos 1 e 2
podem ser executados em tempo total O(n), pois na fase modificada não há chaves ou
teletransporte, ou seja, há apenas uma possibilidade para o vetor e nenhum caminho entre
o vértice inicial e aqueles onde (x1 6= x2 e y1 6= y2 ) ou 2 ≤ |x1 − x2 | ou 2 ≤ |y1 − y2 |, esse
fato será explicado um pouco melhor na apresentação dos últimos algoritmos do capı́tulo.
Isso leva a uma complexidade total O(n) para cada chamada recursiva e O(n2 ) para o
algoritmo completo.
Definição 3.5. M IN -CLOSED-BLOXORZ é o problema com a mesma pergunta do
M IN -BLOXORZ, mas aplicada às instâncias sim do CLOSED − BLOXORZ. Observe que uma instância sim do CLOSED-BLOXORZ não é necessariamente uma fase
desviável.
Teorema 3.5. M IN -CLOSED-BLOXORZ é N P -difı́cil.
Demonstração. Suponha que existe um algoritmo de execução polinomial para o M IN CLOSED-BLOXORZ. Aqui será demonstrado que tal algoritmo decide SAT . Dada
3.6. Bloxorz com restrições sobre chaves
31
Figura 8 – Engrenagem de variável para o M IN -CLOSED-BLOXORZ
uma formula ϕ da lógica proposicional escrita na CNF, pode-se construir uma fase F de
Bloxorz como na redução do Teorema 3.1 que prova a NP-completude do BLOXORZ,
mas com as engrenagens de variável como na Figura 8. A largura de cada engrenagem
de variável tem tamanho kv (ilustrado na Figura 8), onde k = 30 e v é a quantidade
de variáveis em ϕ Na engrenagem ilustrada, as chaves estão relacionadas às engrenagens
de cláusula de forma análoga ao que foi apresentado na construção que provou a NPcompletude do BLOXORZ.
Note que a fase F construı́da dessa maneira é uma instância sim do CLOSED-BLOXORZ,
visto que o bloco pode ativar todas as chaves de cada engrenagem de variável e com isso
ligar todas as pontes relativas às cláusulas mesmo que ϕ não seja satisfatı́vel.
Note que, como cada engrenagem de variável tem largura 30v e que, a cada 2 movimentos na parte superior ou inferior, o bloco percorre 3 posições, então temos 20v movimentos
(na parte superior ou na parte inferior da engrenagem). Com isso, seja m a quantidade
de cláusulas na formula, o número de movimentos é maior que 20v 2 + 2m + 1, pois cada
engrenagem de cláusula precisa de 2 movimentos do bloco para percorrer suas 3 posições
e há ainda o último movimento para a posição final.
Observe que, se ϕ é satisfatı́vel, então existe uma sequência-solução onde, para cada
engrenagem de variável, o bloco percorre só a parte de cima ou só a parte de baixo da
engrenagem. Além disso, o número de movimentos é menor que (20v + 7) · v + 2m + 1,
pois a sequência-solução poderia, no final de cada engrenagem de variável, percorrer o
trecho que leva da parte superior até a inferior (ou vice-versa) para iniciar o percurso da
próxima engrenagem de variável.
Se ϕ não é satisfatı́vel, então, para poder chegar até a posição final, o bloco terá que
ativar as duas chaves de uma mesma engrenagem de variável. Com isso, seu percurso
teria um acréscimo de pelo menos metade de 20v movimentos do bloco (ou seja, 10v
32
Capı́tulo 3. Bloxorz
movimentos). Logo o bloco deve percorrer pelo menos 20v 2 + 2m + 1 + 10v > (20v +
7) · v + 2m + 1.
Resumindo, ϕ é satisfatı́vel se e só existe uma solução de tamanho menor ou igual
a (20v + 7) · v + 2m + 1. Como existe um algoritmo polinomial para MIN-CLOSEDBLOXORZ, então P=NP.
Definição 3.6. CLOSED-BLOXORZ + é a restrição do BLOXORZ onde não há chaves que abram pontes.
Teorema 3.6. CLOSED-BLOXORZ + é N P -completo.
Figura 9 – Engrenagem de variável para o CLOSED-BLOXORZ +
Demonstração. Analogamente à redução que provou a N P -completude do BLOXORZ, a
partir de qualquer fórmula da lógica proposicional na CNF, pode-se construir uma fase
do Bloxorz generalizado onde a engrenagem de variável é como na Figura 9. A demonstração de completude/corretude da redução segue análoga à citada observando-se que a
sequência-solução construı́da a partir da valoração será muito semelhante. No inı́cio de
cada engrenagem de variável, existem dois teletransportes que podem ser alcançados pelo
bloco. Se o bloco utiliza o teletransporte da parte superior, ele irá então ter acesso apenas
a parte superior da engrenagem dessa variável. Se o bloco utiliza o teletransporte da parte
inferior, ele irá então ter acesso apenas a parte inferior da engrenagem dessa variável. Os
números indicados em cada teletransporte são as duas coordenadas para onde as duas
metades do bloco são levadas. Dentro de uma engrenagem de variável, um teletransporte
será ativado, o que leva x1 ao valor referido como 2 na imagem e y1 a 0 ou 6, esses valores são coordenadas relativas que fazem sentido dentro da engrenagem, mas que podem
assumir diversos valores efetivos dentro da fase dependendo da posição da engrenagem, o
3.7. O BLOXORZ −−
33
(0, 0) dela. Além disso, a variável cubo assumirá o valor 1, gerando o caso especial onde o
bloco está em um estado onde poderia mover-se segundo a mecânica de quando cubo = 0,
mas o algoritmo não levará a isso na próxima iteração. O movimento seguinte sendo para
a direita, o bloco mudará para um em pé em (3,0) ou (3, 6). Mais um movimento para
a direita e a chave C1 ou C3 será ativada, fechando a ponte das engrenagens de cláusula
devidas, mais um e a chave C2 ou C4 será ativada, fechando a ponte alterada por essa
chave, o que permite seguir até a próxima engrenagem. Finalmente, deve-se observar que
o mesmo mecanismo que impede movimentos de retorno à esquerda de forma a ativar C1
e C3 no mesmo literal, existem nesta redução pois o teletransporte impede o retorno de
forma análoga à ponte que correspondia a ele na redução original.
Considerando o problema onde, a partir do CLOSED-BLOXORZ + , restringimos as
instâncias aos casos onde há um número limitado de teletransportes, pode-se conjeturar
fortemente que tal problema pertence a P , pois é possı́vel resolvê-lo analizando todas as
escolhas possı́veis de teletransportes entre o conjunto dos existentes da fase e, para cada
um deles, recorrer à estratégia do algoritmo para o CLOSED-BLOXORZ.
3.7 O BLOXORZ −−
Definição 3.7. O BLOXORZ −− é o BLOXORZ restrito às instâncias sem chaves ou
teletransporte.
Esse na verdade foi o primeiro problema resolvido na produção deste trabalho e o
algoritmo que concebemos para resolvê-lo é uma restrição daquele mostrado para o k −
BLOXORZ.A consideração especial a ser feita é sobre o número de vértices do grafo.
Dada uma fase f do Bloxorz generalizado com as restrições descritas, o grafo Gf a ser
contruı́do no algoritmo será bem mais simples e visualizável do que no k − BLOXORZ
de forma geral, pois só há um estado de chaves e não há teletransporte, logo o conjunto
V (G) terá tamanho proporcional ao da fase. Vértices onde (x1 , y1 ) é distante de (x2 , y2 )
poderiam ser criados, mas não haveria caminho do vértice inicial até ele. Adicionalmente,
para cada elemento de madeira, um vértice pode ser eliminado, aquele onde (x1 , y1 ) =
(x2 , y2 ) = (xm , ym ) onde (xm , ym ) é a posição desse elemento, pois o algoritmo verificador
retorna imediatamente caso o bloco esteja em pé sobre tal posição e portanto os caminhos
que correspondem a uma solução não incluem tal vértice. Finalmente pode-se observar
que neste problema a direcionalidade dos arcos pode ser descartada, já que todos os
movimentos que não envolvem ativação de chaves ou teletransporte são reversı́veis com
outro no sentido oposto.
Teorema 3.7. Seja Gf o grafo gerado a partir da fase do Bloxorz generalizado f pelo
algoritmo em questão, |V (Gf )| ≤ 3n onde n = |f |.
34
Capı́tulo 3. Bloxorz
Figura 10 – Caminho-solução para BLOXORZ −−
Demonstração. GF possui um vértice para cada elemento de Bloxorz que não seja madeira
presente em F . Como F possui n elementos, seja Ve o conjunto de vértices desse tipo,
|Ve | ≤ n. O restante dos vértices de GF corresponde a pares de elementos vizinhos. Cada
elemento possui no máximo 4 vizinhos, 2 na horizontal e 2 na vertical. Se percorrermos os
elementos a partir do canto inferior esquerdo, encontraremos como o inicial, pois se trata
de um elemento o mais abaixo e o mais à esquerda possı́vel, um elemento com no máximo
2 vizinhos. Então temos no máximo 2 pares de vizinhos envolvendo o elemento inicial e
portanto no máximo 2 vértices correspondentes. Seguindo à direita na linha, adicionamos
no máximo mais 2 vértices para cada elemento, um por seu vizinho da direita e outro por
seu vizinho de cima, pois se trata da linha mais abaixo e o vizinho da esquerda forma
um par já considerado quando ele foi percorrido. Ao seguirmos para a linha superior,
os vértices que seriam adicionados pelo vizinho de baixo de cada elemento não o são
porque já o foram quando esses vizinhos foram percorridos. Assim, indutivamente, seja
Vp o conjunto de vértices desse tipo, |Vp | ≤ 2n. Como V (GF ) = Ve ∪ Vp , |V (GF )| ≤
|Ve | + |Vp | ≤ n + 2n = 3n.
Teorema 3.8. Sejam f uma instância do BLOXORZ −− e Gf o grafo gerado pelo algoritmo em questão para f , existe um caminho em Gf entre os vértices vi e vf , correspondentes respectivamente ao bloco inicial de I e ao final da fase, se e somente se a resposta
de I é sim.
Demonstração. (←)
Se f é uma instância com resposta sim, possui uma sequência-solução. Dada uma
sequência-solução de Bloxorz para f , há uma sequência de blocos B correspondente que,
3.7. O BLOXORZ −−
35
por ser extraı́da de uma sequência-solução, se inicia com o bloco inicial de f , é tal que 2
blocos seguidos nela são tais que um é resultado de um movimento válido sobre o outro,
termina com um bloco em pé no final da fase de f e não possui nenhum bloco em pé
ocupando piso de madeira. Pelas propriedades de B e pela construção de Gf , todo par
de blocos seguidos de B tem os vértices correspondentes adjacentes. Indutivamente, todo
vértice com correspondente em B é alcançado por arestas a partir de vi e portanto vf é
alcançado. Percorrendo B eliminando o que há entre as ocorrências de um mesmo bloco
e deixando apenas uma, constrói-se um caminho entre vi e vf .
(→)
Se existe um caminho entre vi e vf em Gf , pela definição de caminho existe uma
sequência que alterna vértices e arestas sem repetição, começa com vi , termina com vf e
a aresta (u, v) é a única que pode aparecer imediatamente entre 2 vértices u e v quaisquer
nela. Cada vértice corresponde a um bloco e, pela definição de Gf , se uv ∈ E(Gf ), u
e v correspondem a blocos tais que um resulta de um movimento válido sobre o outro.
Logo, indutivamente, o buraco final de I é alcançado por uma sequência de movimentos
válidos a partir do bloco correspondente a vi sem que exista nessa sequência um bloco em
pé sobre madeira, pois não existe nenhum vértice correspondente a esses blocos, logo f é
uma instância com resposta sim.
Combinando os dois teoremas, conclui-se que, para decidir o BLOXORZ −− em tempo
polinomial em relação ao tamanho da instância, basta decidir se existe um caminho entre
2 vértices de um grafo qualquer em tempo polinomial em relação a seu número de vértices.
Para esse fim, um algoritmo de busca em largura ou profundiade é o suficiente. Logo a
argumentação está completa.
Sendo mais preciso em relação à complexidade de tempo, é possı́vel construir o grafo em
tempo O(n) no pior caso, onde n é o número de elementos da fase do Bloxorz generalizado,
pois são no máximo 3n vértices e 6n arestas por um raciocı́nio análogo ao do primeiro
teorema e é possı́vel contruir cada aresta em tempo constante bastando uma checagem das
posições que o bloco gerado pelo movimento ocuparia. Um algoritmo de busca executa em
tempo O(|V | + |E|), o que no caso significa O(n). Já o algoritmo para encontrar o menor
caminho como em [?] executa em tempo O(|E| + |V |log(|V |)), ou seja, O(n + nlog(n)) =
O(nlog(n)), se usadas as devidas estruturas de dados e portanto nosso algoritmo para o
BLOXORZ −− executa em tempo O(nlog(n)) com a troca da busca pelo algoritmo de
menor caminho.
Uma observaçao importante é que esse algoritmo, além de resolver o problema, encontra, com a substituição mencionada, se houver, a menor sequência-solução para a fase
do Bloxorz generalizado dada como entrada, o que resolve uma versão de otimização do
problema.
36
Capı́tulo 3. Bloxorz
3.8 O BLOXORZ −
Nesta seção, o foco é o caso onde não há pontes, mas pode existir teletransporte além de
todos os elementos do BLOXORZ −− , chamaremos esse novo problema de BLOXORX − .
Para resolvê-lo, basta recorrer ao algoritmo apresentado para o k-BLOXORZ considerando apenas x1 , y1 , x2 , y2 , pois não há chaves.
O vértice final a ser considerado é aquele onde (x1 , y1 ) = (x2 , y2 ) = (xf , yf ), então não
existirão os arcos de peso 0.
.
37
4 On The Edge
4.1 O problema
O tópico deste capı́tulo é um novo problema extraı́do de um jogo semelhante ao Bloxorz,
na verdade inspirado nele, mas com diferenças importantes. On The Edge é um jogo
eletrônico desenvolvido para a plataforma Flash pela Yzi Games onde o jogador controla
um cubo. A Figura 11 exemplifica o que pode-se esperar ver no jogo:
Figura 11 – Uma visão geral do jogo
O objetivo é fazer o bloco, ou seja, o cubo, alcançar a posição vermelha no final de
cada fase após eliminados todos os elementos restantes. O bloco pode ser rolado para
frente, para trás, para esquerda ou para a direita, mas não pode sair dos limites do piso
da fase. Caso isso aconteça, a fase reinicia.
Caso o bloco esteja sobre piso normal, ao ser rolado para outra posição, o piso que ele
ocupava é eliminado. Em uma fase de On The Edge pode haver posições pretas, que não
sofrem esse efeito, mas tornam-se piso normal, e 0 ou 2 posições azuis, que levam o bloco
à outra posição azul e são eliminadas após esse efeito, a que foi ativada o é imediatamente
e a posição alvo após ser abandonada.
O problema computacional que é estudado neste capı́tulo, que chamaremos de ON T HE-EDGE, corresponde à seguinte pergunta:
Dada uma fase hipotética de On The Edge, ou seja, uma construção arbitrária que
respeite as regras expostas acima sobre o que pode haver em uma fase do jogo, mas sem
que se considere possı́veis restrições práticas, existe uma sequência de jogadas que leve o
jogador a passar de fase?
Um exemblo de 2 soluções possı́veis para uma mesma instância de ON -T HE-EDGE,
ou seja, ambas significariam uma resposta sim, está ilustrado na Figura 12. Trata-se de
uma fase concreta do jogo implementado.
38
Capı́tulo 4. On The Edge
(a) Possibilidade 1
(b) Possibilidade 2
Figura 12 – Mesma fase, dois caminhos
4.2 N P -completude
Nosso resultado sobre o ON -T HE-EDGE se refere a sua relação com um problema em
grafos. Especificamente com o problema de decidir se um subgrafo induzido de um grid
possui um caminho hamiltoniano entre os vértices u e v. Chamaremos esse problema
aqui de HP SU BGRID . Sobre o HP SU BGRID , em 1982, A. Itai, C. H. Papadimitriou e J.
L. Szwarcfiter demonstraram sua N P -completude. [Itai et al., 1982]
Teorema 4.1. HP SU BGRID ≤p ON -T HE-EDGE.
Demonstração. Dado um subgrafo H induzido de um grid, pode-se construir uma fase de
nosso On The Edge generalizado como na Figura 13.
Na Figura 13, em azul escuro e verde está representado o grafo H. Os vértices em
verde são aqueles entre os quais se deseja verificar a presença de um caminho hamiltoniano.
Em cinza está representado o piso normal da fase, em azul claro as posições azuis e em
vermelho o final da fase. A posição inicial corresponde ao retângulo cinza onde está um
dos vértices em verde. Na fase gerada, sempre existe a região correspondente aos vértices
do grafo e a região separada, ou seja, inalcançável a partir da primeira sem o efeito de
uma posição azul, com uma posição azul e imediatamente à direita o final.
4.2. N P -completude
39
Figura 13 – Redução do problema do caminho hamiltoniano em subgrafos induzidos de
grids
Se existe um caminho hamiltoniano entre u e v em H, existe uma sequência de movimentos que passa por cada posição relacionada a piso normal na fase construı́da uma
única vez e alcança a posição azul da região onde elas se encontram, pois cada movimento
válido nessa região corresponde a uma aresta de H, u corresponde à posição inicial e v à
posição azul. Além disso, ao alcançar a posição azul, pode-se continuar os movimentos
a partir da outra, agora com a primeira eliminada. Basta um movimento a mais para a
direita e o final é alcançado com todos os outros elementos da fase eliminados.
Por outro lado, se existe uma sequência de movimentos válidos que alcança o final
da fase com todos os outros elementos eliminados, existe uma que alcança a posição azul
logo à esquerda dele já eliminados todos os elementos diferentes desses 2, pois não existem
outros elementos vizinhos ao final, logo há uma terceira sequência que alcança a outra
posiçao azul e elimina todo o piso normal já que elas se encontram em regiões separadas
entre si. Essa sequência por suas propriadades passa por cada posição correspondente
a piso normal uma única vez. Como essas posições correspondem também a vértices do
grafo original e os movimentos válidos a arestas, a sequência pode ser mapeada para um
caminho hamiltoniano em H.
41
5 Bobbin 3D
5.1 O problema
Bobbin 3D é um jogo semelhante ao Bloxorz desenvolvido pela Maplabs para o sistema
Android. Nele o bloco a ser levado entre 2 pontos do cenário é um cilindro de altura 1 e raio
1
. Apesar de trazer uma impressão ainda maior que os anteriores de tridimensionalidade,
2
a mecânica continua sendo bidimensional. A Figura 14 exemplifica o que pode-se esperar
ver no jogo:
Figura 14 – Uma visão geral do jogo
O objetivo é rolar o cilindro a partir da posição inicial até que ele fique em pé sobre
o buraco final. O bloco pode ser rolado para frente, para trás, para esquerda ou para
a direita. Com a justificativa geométrica de o bloco ser um cilindro, rolar não significa
sempre um movimento restrito a uma vizinhança limitada pelas dimensões do objeto. Se
o bloco está deitado e é rolado de forma a se manter deitado, o bloco resultante ocupa
somente posição anterior ao primeiro obstáculo presente na linha ou coluna.
Em uma fase de Bobbin 3D, pode haver piso normal e piso elevado, que serve de
obstáculo quando o bloco rola. Também pode haver uma quantidade par de chaves ’+’
elevadas ou abaixadas, que, quando elevadas, funcionam como o piso elevado e quando
abaixadas alternam o estado de outra chave ’+’ pré-definida entre elevada e abaixada.
Se uma chave ’+’ alterna o estado de outra, essa outra alterna o estado dela. Além
disso, podem existir posições ’*’ que transformam o bloco cilı́ndrico em cúbico por uma
quantidade determinada de movimentos. Um bloco cúbico ocupa uma única posição e
42
Capı́tulo 5. Bobbin 3D
pode ser rolado nas mesmas 4 direções, mas sempre no máximo até uma posição vizinha.
Figura 15 – Passos em fase do Bobbin 3D
O problema computacional que é estudado neste capı́tulo, que chamaremos de BOBBIN ,
corresponde à seguinte pergunta:
Dada uma fase hipotética de Bobbin 3D, ou seja, uma construção arbitrária que respeite as regras expostas acima sobre o que pode haver em uma fase do jogo, mas sem que
se considere possı́veis restrições práticas, existe uma sequência de jogadas menor do que
a fase que leve o jogador a passar de fase?
A Figura 15 ilustra um exemplo de solução para uma fase concreta do jogo.
Uma observação é que pode-se ser construı́do para esse jogo um algorimo semelhante
ao do capı́tulo anterior com o objetivo de formalizar as regras dos movimentos e consequentemente delimitar melhor o problema.
Definição 5.1. BOBBIN −− é a restrição do BOBBIN de forma que não haja chaves
’+’ ou posições ’*’
Definição 5.2. BOBBIN − é a restrição do BOBBIN de forma que não haja chaves
’+’.
5.2. Linguagem a ser utilizada a seguir
(a) Piso
(b) Piso elevado
(e) Inı́cio
43
(c) Chave +
(d) Chave + elevada
(f) Final
Figura 16 – Elementos de uma fase
5.2 Linguagem a ser utilizada a seguir
Esta seção se refere ao formato visual que descreverá as construções apresentadas. Na
Figura 16 temos uma representação para cada tipo de elemento de forma similar ao que
foi feito para o Bloxorz.
Cada chave ’+’ em estado normal tem indicada a posição de seu par, as elevadas não
precisam, pois pode-se supor sem perda de generalidade que são pareadas cada uma com
uma em estado normal que a indica. Se uma fase possui um par de chaves ’+’ inicialmente
elevadas, pode-se trocar por um par de elementos de piso elevado.
5.3 Algoritmo para o BOBBIN −−
Para as instâncias deste problema, pode-se aplicar a mesma estratégia de nosso algoritmo
para o BLOXORZ −− , mas considerando um grafo direcionado como ilustrado na Figura
17.
Diferentemente do caso do BLOXORZ −− , cada posição possui 3 vértices diferentes
correspondentes. Pode-se excluir aquelas de piso elevado nesse sentido. No algoritmo
definidor, isso significaria uma variável a mais marcando o estado do bloco entre deitado
horizontalmente, deitado verticalmente ou em pé.
Cada arco representa um movimento válido possı́vel na fase hipotética de Bobbin 3D,
incluindo aqueles onde o bloco ”rola”, já que haverá um arco ligando o bloco deitado a
outro também deitado, mas na posição anterior no devido eixo ao elemento elevado mais
próximo. Além disso, neste algoritmo, a posição final é representada por um vértice e o
caminho mı́nimo a ser buscado é do bloco inicial, aqui o conjunto de vértices do grafo é
44
Capı́tulo 5. Bobbin 3D
um conjunto de blocos, a esse vértice, que é o bloco em pé sobre a posição final.
Com essas observações, o argumento de corretude/completude é o mesmo do algoritmo
que decide o BLOXORZ −− .
Figura 17 – Resolvendo um caso simples
5.4 Algoritmo para o BOBBIN −
Para as instâncias deste problema, pode-se aplicar uma estratégia similar a nosso algoritmo para o BLOXORZ − . Saindo dos vértices correspondentes às posições ’*’, vale
observar que há 3 deles para casa posição ’*’, há arcos que os ligam a vértices correspondentes a uma situação marcada por uma nova variável, situação onde os movimentos
respeitam o padrão dos cubos isolados do Bloxorz considerando que um movimento do
cubo é uma rotação do cilindro resultante no fim do processo. Na condição de existir
um caminho onde se esgota a quantidade de movimentos que a posição ’*’ em particular
permite, os arcos ligarão o vértice onde isso acontece de volta à região do grafo onde se
mostram as regras de movimento do bloco cilı́ndrico. Vale ressaltar a unidirecionalidade
dos arcos que entram e saem da dita ”região do cubo”. Os caminhos encontrados podem
eventualmente não refletir uma sequência válida no caso de saı́rem da ”região do cubo”,
que pode ser imaginada como uma camada extra do grafo sobre a fase, no número errado
de passos, mas esse caminho indica ainda assim a existência da sequência válida. Para
a construção da ”região do cubo”no grafo, é necessário registrar todas as formas de se
mover a partir da devida posição no estado de cubo pela dada quantidade de passos, o que
teria custo potencialmente exponencial se feito utilizando força bruta, uma alternativa é
5.5. BOBBIN
(a) Parte
inicial
45
(b) Para cada variável
(c) Para
cada
cláusula
Figura 18 – Engrenagens da redução
recorrer a uma estratégia de programação dinânica onde regitra-se as subsequências de
tamanho k e adiciona-se um movimento para obter as de tamanho k + 1. Essa construção será o passo mais custoso do algoritmo e demandará, seja n o tamanho da fase,
até n − 2 tabelas com n valores demarcando o número de passos como cubo necessários
para alcançar um dado elemento a partir da posição ’*’ em questão. Ou seja o custo total
de tempo é O(n2 ).
5.5 BOBBIN
Teorema 5.1. SAT ≤p BOBBIN
Demonstração. Dada uma fórmula da lógica proposicional na CNF, pode-se construir uma
fase hipotética do Bobbin 3D como na Figura 18. Nela, são mostradas as engrenagens
da construção analogamente ao feito com o BLOXORZ, mas esta exige mais cuidado na
análise.
O pareamento das chaves ’+’ , que não fica totalmente explı́cito, é o seguinte: se uma
chave ’+’ é da região correspondente a um literal e não possui par na própria, seu par
é uma chave ’+’ elevada presente na engrenagem de cláusula de uma daquelas onde o
literal aparece. ’ ?’ se refere a uma coluna especı́fica cujo valor depende de quantas vezes
o literal mais frequente envolvendo a variável aparece na fórmula. Pela necessidade de
simetria na construção e pela necessidade de manter a paridade da sequência de chaves,
deve-se preencher as potenciais posições faltantes com piso normal. Além disso, deve-se
considerar o encaixe das engrenagens. As unidades mais à esquerda de piso normal da
primeira engrenagem de variável ficam na mesma altura das mais à direita da engrenagem
de inı́cio. As engrenagens de variável são encaixadas em altura igual uma à direita da
46
Capı́tulo 5. Bobbin 3D
outra. A primeira engrenagem de cláusula é encaixada à direita da última de variável
na linha mais abaixo que possui piso normal. À direita das engrenagens de cláusula, na
mesma linha de uma chave ’+’, será encaixado o buraco final.
Se a fórmula é satisfatı́vel, a sequência de movimentos correspondente a passar pelas
engrenagens de variável ativando chaves ’+’ da correspondentes ao literais satisfeitos por
uma valoração que satisfaz a fórmula descreve uma sequência-solução para a fase, pois ao
ativar essas chaves, seus pares nas engrenagens de cláusula serão abaixados permitindo
a passagem do cilindro. Como toda cláusula tem um literal satisfeito pela valoração,
todas as engrenagens de cláusula possuem uma chave ’+’ que será abaixada tornando isso
verdade, permitindo que o cilindro alcance o buraco final. Resta observar que é possı́vel
passar pelas engrenagens de variável da forma descrita, pois, com a construção possuindo
o número adequado de elementos de piso normal, o cilindro pode ser rolado até ficar
deitado sobre o piso na mesma coluna que a posição elevada esquerda da construção para
o literal e então com um movimento ”bater”na posição elevada para em seguida ativar
as chaves. Além disso, o cilindro pode passar pela chave elevada da construção para o
literal, pois seu par está imediatamente à esquerda. Ou seja, a fase é uma instância sim
do BOBBIN .
Por outro lado, se a fase contruı́da é uma instância sim do BOBBIN , existe uma
sequência-solução para ela, ou seja, o buraco final pode ser alcançado, o que implica
que pelo menos uma chave ’+’ de cada engrenagem de cláusula pode ser abaixada, ou
seja, é possı́vel passar pelas engrenagens de variável ativando as chaves correspondentes
a pelo menos um literal de cada cláusula sem ativar chaves correspondentes a literais
contraditórios entre si, pois, a partir de um bloco alcançável a partir de movimentos
válidos que esteja na região de um literal, não é possı́vel ir até a região da negação desse
literal nem pela esquerda, pois uma sequência de movimentos para esquerda enquanto
válidos leva a um bloco deitado na horizontal, e nem pela direita, pois, após abaixar
a chave ’+’ na extrema direita da engrenagem de variável e abandoná-la, a chave ’+’
que abaixaria a chave elevada da região da negação do literal não pode ser alcançada.
Conclui-se que a fórmula é satisfatı́vel.
47
6 Tabela de problemas
Abaixo mostramos uma tabela
cidos neste trabalho.
Problema
BLOXORZ −−
BLOXORZ −
BLOXORZ
k-BLOXORZ
CLOSED-BLOXORZ
CLOSED-BLOXORZ +
ON -T HE-EDGE
BOBBIN −−
BOBBIN −
BOBBIN
com um resumo dos resultados de complexidade estabeleDecisão
O(n)
O(n2 )
N P -completo
O(n2 )
O(n2 )
N P -completo
N P -completo
O(n)
O(n2 )
N P -completo
Min
O(nlog(n))
O(n2 log(n))
inaprox n1−
O(n2 log(n))
N P -difı́cil
N P -difı́cil
N P -difı́cil
O(nlog(n))
O(n2 log(n))
N P -difı́cil
49
Referências
G. Aloupis, E. D. Demaine e A. Guo, Classic Nintendo Games are (NP)-Hard,
hhttp : //arxiv.org/abs/1203.1895i (2012).
E. D. Demaine, S. Hohenberger e D. Liben-Nowell,Tetris is Hard, Even to Approximate,
International Journal of Computational Geometry and Applications 14:1-2 (2004) 41–68.
E. D. Demaine, M. L. Demaine e R. Fleisher, Solitaire Clobber, Theoretical Computer
Science 313:3 (2004) 325–338
E.D. Demaine, M. L. Demaine, A. Langerman e Stefan Langerman, Morpion Solitaire,
Theory of Computing Systems 39:3 (2006) 439–453
E. D. Demaine e M. L. Demaine, Jigsaw Puzzles, Edge Matching and Polyomino
Packing: Connections and Complexity, Graphs and Combinatorics 23 (Supplement)
(2007) 195–208
E.W. Dijkstra, A Note on Two Problems in Connexion with Graphs, Numerische
Mathematlk 1(1959) 269–271.
D. Dor e U. Zwick, SOKOBAN and other motion planning problems,Computational
Geometry: Theory and Applications - COMGEO, vol. 13, no. 4 (1999) 215–228.
G. W. Flake e E. B. Baum, Rush Hour is PSPACE-complete or ’Why You Should
Generously Tip Parking Lot Attendants’, Theoretical Computer Science 270:1-2 (2002),
895–911
A. S. Fraenkel e E. Goldschmidt, PSPACE-Hardness of Some Combinatorial Games,
Journal of Combinatorial Theory, Series A 46 (1987), 21 – 38
R. A. Hearn e E. D. Demaine, PSPACE-Completeness of Sliding-Block Puzzles
and Other Problems through the Nondeterministic Constraint Logic Model of
Computation, Theoretical Computer Science, ”Game Theory Meets Theoretical
Computer Science”Special Issue, 343:1-2 (2005) 72–96
R. A. Hearn e E. D. Demaine, Games, Puzzles & Computation (2009), Editora AKPeters.
A. Itai, C. H. Papadimitriou e J. L. Szwarcfiter, Hamilton Paths in Grid Graphs, Society
for Industrial and Applied Mathematics Journal on Computing - SICOMP, vol. 11, no.
4 (1982)

Documentos relacionados