Complexidade das torres de Hanói


20

Encontrei as seguintes dúvidas sobre a complexidade das Torres de Hanói , sobre as quais gostaria de seus comentários.

  • Está em NP? Resposta da tentativa: Suponha que Peggy (provador) resolva o problema e o envie a Victor (verificador). Victor pode ver facilmente que o estado final da solução está correto (em tempo linear), mas ele não terá outra opção a não ser passar por cada um dos movimentos de Peggy para garantir que ela não faça um movimento ilegal. Como Peggy precisa fazer no mínimo 2 ^ | discos | - 1 jogada (provável), Victor também tem que seguir o exemplo. Assim, Victor não tem verificação de tempo polinomial (a definição de NP) e, portanto, não pode estar em NP.

  • Está no PSPACE ? Parece que sim, mas não consigo pensar em como estender o raciocínio acima.

  • É PSPACE completo? Parece que não, mas tenho apenas uma vaga idéia. O Planejamento automatizado, do qual ToH é uma instância específica, é completo no PSPACE. Eu acho que o Planejamento tem instâncias muito mais difíceis que o ToH.

Atualizado : Input = n , o número de discos; Saída = configuração do disco em cada etapa. Depois de atualizar isso, percebi que esse formato de entrada / saída não se encaixa em um problema de decisão. Não tenho certeza da formalização correta para capturar as noções de NP, PSPACE etc. para esse tipo de problema.

Atualização # 2 : Após os comentários de Kaveh e Jeff, sou forçado a tornar o problema mais preciso:

Seja a entrada o par de entradas (n,i) que n é o número de discos. Se a sequência de movimentos executados pelos discos for anotada no formato (número do disco, de peg, para peg) (número de disco, de peg, para peg) ... desde o primeiro movimento até o por último, e codificado em binário, gera o Eu bit.

Deixe-me saber se preciso ser mais específico sobre a codificação. Suponho que o comentário de Kaveh se aplique neste caso?


5
você poderia por favor definir o problema das Torres de Hanói ou vincular-se a uma definição?
Kaveh

1
PKG, eu sei o que é a Torre de Hanói. Eu quis dizer qual é o problema computacional que você deseja conhecer sua complexidade? Qual é a entrada? Qual é a saída?
Kaveh

@Kaveh: Sua intenção era clara do seu primeiro comentário
PKG

Desculpe. Aliás, existem classes de complexidade de funções, elas geralmente têm um F antes ou depois do nome, verifique o zoológico de complexidade para obter definições.
Kaveh

1
Assim é o inteiro também parte da entrada? Eu
jeffe

Respostas:


9

Não, o problema que você descreveu é realmente bastante fácil. A razão de alto nível é que o índice tem aproximadamente n bits de comprimento, para que possamos gastar tempo polinomial em n .Eunn

Considere o seguinte problema relacionado: Dados dois números e k , descreva o k- ésimo movimento na solução do quebra-cabeça n- disco. O tamanho da entrada é lg n + lg k < n + lg k , mas, na verdade, apenas o bit menos significativo de n importa. Portanto, mesmo que lg k seja significativamente menor que n , podemos resolver esse problema no polinômio do tempo em O ( log k ) .nkknlgn+lgk<n+lgknlgknO(registrok)

Suponha que os discos sejam numerados de a qualquer que seja em ordem crescente de tamanho, e os pinos são numerados 0 = origem, 1 = destino e 2 = sobressalentes. Escreva k = ( 2 p + 1 ) 2 d para alguns números inteiros p e d . Em seguida, no turn k :0 0k=(2p+1)2dpdk

  • Se é ímpar, o disco d passa do pino ( p mod 3 ) para o pino ( ( p + 1 ) mod 3 ) .d+nd(pmod3)((p+1)mod3)
  • Se for par, o disco d move o pino do formulário ( - p mod 3 ) para o pino ( ( - p - 1 ) mod 3 ) .d+nd(-pmod3)((-p-1)mod3)

Podemos calcular facilmente e d no tempo O ( log k ) fazendo um loop pela representação binária de k do bit menos significativo para cima. É isso aí.pdO(registrok)k

Agora, suponha que você realmente queira o bit na sequência de saída, em que i faz parte da entrada em vez de k . Se cada turno for codificado usando o mesmo número de bits - especificamente, lg ( n + 1 ) bits para o número do disco, 2 bits para o from-peg e 2 bits para o to-peg -, basta calcular o k é o movimento, onde k = i / ( lg ( n + 1 ) + 4 ) EuEuklg(n+1)22kk=Eu/(lg(n+1)+4)e extraia o bit apropriado. (Observe que é linear no tamanho da entrada, pois precisamos saber n para determinar a saída.)lg(n+1)+4n

Por outro lado, se estivermos usando uma representação de tamanho variável para os números de disco, podemos encontrar o número de movimentação em tempo polinomial por pesquisa binária. Precisamos saber o número total de voltas necessárias para mover os m discos superiores , para todos os m k , mas isso é dado pela recorrência M ( m ) = 2 M ( m - 1 ) + ( \ bits para registrar o movimento disco  m ) que podemos avaliar em tempo polinomial por programação dinâmica. Os detalhes restantes são deixados como um exercício chato para o leitor.kmmk

M(m)=2M(m-1)+(\ #bits para gravar o disco em movimento m)

(Suponho que cometi pelo menos um erro de paridade ou de um por um, mas espero que a ideia principal seja clara.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.