Complessità delle torri di Hanoi


20

Ho incontrato i seguenti dubbi sulla complessità delle Torri di Hanoi , su cui vorrei i tuoi commenti.

  • È a NP? Tentativo di risposta: supponiamo che Peggy (prover) risolva il problema e lo inoltri a Victor (verificatore). Victor può facilmente vedere che lo stato finale della soluzione è giusto (in tempo lineare) ma non avrà altra scelta che passare attraverso ciascuna delle mosse di Peggy per assicurarsi che non abbia fatto una mossa illegale. Poiché Peggy deve creare un minimo di 2 ^ | dischi | - 1 mossa (dimostrabile), anche Victor deve seguire l'esempio. Quindi Victor non ha una verifica del tempo polinomiale (la definizione di NP), e quindi non può essere in NP.

  • È in PSPACE ? Sembra così, ma non riesco a pensare a come estendere il ragionamento di cui sopra.

  • È PSPACE completo? Sembra di no, ma ho solo una vaga idea. Pianificazione automatizzata, di cui ToH è un'istanza specifica, è PSPACE completo. Penso che la pianificazione abbia casi molto più difficili di ToH.

Aggiornato : Input = , il numero di dischi; Output = configurazione del disco ad ogni passaggio. Dopo aver aggiornato questo, mi sono reso conto che questo formato di input / output non si adatta a un problema decisionale. Non sono sicuro della giusta formalizzazione per catturare le nozioni di NP, PSPACE, ecc. Per questo tipo di problema.n

Aggiornamento n. 2 : dopo i commenti di Kaveh e Jeff, sono costretto a rendere più preciso il problema:

Lascia che l'ingresso sia la coppia di ints dove è il numero di dischi. Se la sequenza di mosse eseguite dai dischi è scritta nel formato (numero disco, da-peg, a-piolo) (numero disco, da-piolo, a-piolo) ... dalla prima mossa al ultimo, e codificato in binario, emette l' bit.(n,io)nio

Fammi sapere se devo essere più specifico sulla codifica. Suppongo che il commento di Kaveh si applichi in questo caso?


5
potresti per favore definire il problema delle Torri di Hanoi o link ad una definizione?
Kaveh,

1
PKG, so cos'è la Torre di Hanoi. Intendevo qual è il problema computazionale che vuoi conoscere la sua complessità? Qual è l'input? Qual è l'output?
Kaveh,

@Kaveh: la tua intenzione non era chiara dal tuo primo commento
PKG

spiacente. A proposito, ci sono classi di complessità delle funzioni, di solito hanno una F prima o dopo il nome, controlla le definizioni dello zoo di complessità.
Kaveh,

1
Quindi anche l'intero fa parte dell'input? io
JeffE,

Risposte:


9

No, il problema che hai descritto è in realtà abbastanza semplice. La ragione di alto livello è che l'indice è lungo all'incirca n bit, quindi possiamo effettivamente permetterci di trascorrere del tempo polinomiale in n .ionn

Considera il seguente problema correlato: dati due numeri interi e k , descrivi la mossa k nella soluzione del puzzle n -disk. La dimensione di input è lg n + lg k < n + lg k , ma in realtà solo il bit meno significativo di n conta. Quindi anche se lg k è significativamente più piccolo di n , possiamo risolvere questo problema nel tempo polinomiale in O ( log k ) .nKKnlgn+lgK<n+lgKnlgKnO(logK)

Supponiamo che i dischi siano numerati da a qualsiasi cosa in ordine crescente per dimensione e che i pioli siano numerati 0 = origine, 1 = destinazione e 2 = riserva. Scriviamo k = ( 2 p + 1 ) 2 d per alcuni numeri interi p e d . Quindi alla svolta k :0K=(2p+1)2dpdK

  • Se è dispari, il disco d si sposta da peg ( p mod 3 ) a peg ( ( p + 1 ) mod 3 ) .d+nd(pmod3)((p+1)mod3)
  • Se è pari, il disco d si sposta da peg ( - p mod 3 ) a peg ( ( - p - 1 ) mod 3 ) .d+nd(-pmod3)((-p-1)mod3)

Possiamo facilmente calcolare e d nel tempo O ( log k ) eseguendo il ciclo attraverso la rappresentazione binaria di k dal bit meno significativo verso l'alto. Questo è tutto.pdO(logK)K

Supponiamo ora di voler davvero l' bit bit nella sequenza di output, dove i fa parte dell'input invece di k . Se ogni giro viene codificato usando lo stesso numero di bit, in particolare, lg ( n + 1 ) bit per il numero del disco, 2 bit per il da-peg e 2 bit per il to-peg - allora dobbiamo solo calcolare il k mossa, dove k = i / ( lg ( n + 1 ) + 4 ) ioioKlg(n+1)22KK=io/(lg(n+1)+4)e quindi estrarre il bit appropriato. (Si noti che è lineare nella dimensione di input, poiché è necessario conoscere n per determinare l'output.)lg(n+1)+4n

D'altra parte, se stiamo usando una rappresentazione a lunghezza variabile per i numeri del disco, allora possiamo trovare il numero di spostamento nel tempo polinomiale mediante la ricerca binaria. Dobbiamo conoscere il numero totale di giri necessari per spostare i dischi m superiori , per tutti m k , ma ciò è dato dalla ricorrenza M ( m ) = 2 M ( m - 1 ) + ( \ #bits per registrare lo spostamento disco  m ) che possiamo valutare in tempo polinomiale mediante programmazione dinamica. I dettagli rimanenti sono lasciati come un esercizio noioso per il lettore.KmmK

M(m)=2M(m-1)+(\ #bits per registrare il disco in movimento m)

(Presumo di aver commesso almeno un errore di parità o di parità, ma spero che l'idea principale sia chiara.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.