Hanoi Kulelerinin Karmaşıklığı


20

Ben senin yorumlarınızı istiyorum Hanoi Kuleleri karmaşıklığı hakkında aşağıdaki şüphelerle karşılaştım .

  • NP'de mi? Cevaplanmaya çalışıldı: Peggy'nin (atasözü) sorunu çözdüğünü ve Victor'a (doğrulayıcı) gönderdiğini varsayalım. Victor, çözümün son durumunun doğru olduğunu (doğrusal zamanda) kolayca görebilir, ancak yasadışı bir hareket yapmadığından emin olmak için Peggy'nin her hareketinden geçmek dışında bir seçeneği kalmaz. Peggy en az 2 ^ | disk | - 1 hamle (kanıtlanabilir), Victor da davayı takip etmeli. Bu yüzden Victor'un polinom zaman doğrulaması yoktur (NP'nin tanımı) ve bu nedenle NP'de olamaz.

  • PSPACE'de mi? Öyle görünüyor, ama yukarıdaki akıl yürütmeyi nasıl uzatacağımı düşünemiyorum.

  • PSPACE tamamlandı mı? Görünmüyor, ama sadece belirsiz bir fikrim var. TOH'nun belirli bir örnek olduğu Otomatik Planlama, PSPACE tamamlandı. Planlama'nın TO'dan çok daha zor örnekleri olduğunu düşünüyorum.

Güncellendi : Giriş = , disk sayısı; Çıktı = her adımda disk yapılandırması. Bunu güncelledikten sonra, bu giriş / çıkış biçiminin bir karar sorununa uymadığını fark ettim. Bu tür bir problem için NP, PSPACE, vb. Kavramlarını yakalamak için doğru resmileştirmeden emin değilim.n

Güncelleme # 2 : Kaveh ve Jeff'in yorumlarından sonra, sorunu daha kesin hale getirmek zorundayım:

Girdi disk sayısı olduğu ints çifti olsun . Diskler tarafından alınan hamlelerin sırası (disk numarası, peg'ten peg'e) (disk numarası, peg'ten peg'e) biçiminde yazılırsa ... ilk hamleden son olarak ve ikili olarak kodlanmış, . bit çıktı .n ben(n,i)ni

Kodlama hakkında daha spesifik olmam gerekirse bana bildirin. Sanırım Kaveh'in yorumu bu durumda geçerlidir?


5
Lütfen Hanoi Kuleleri problemini tanımlayabilir veya bir tanıma link verebilir misiniz?
Kaveh

1
PKG, bunun Hanoi Kulesi olduğunu biliyorum. Demek istediğim, karmaşıklığını bilmek istediğiniz hesaplama problemi nedir? Girdi nedir? Çıktı nedir?
Kaveh

@Kaveh: Niyetiniz ilk yorumunuzdan belli değildi
PKG

afedersiniz. Btw, fonksiyon karmaşıklık sınıfları vardır, genellikle addan önce veya sonra bir F vardır, tanımlar için karmaşıklık hayvanat bahçesini kontrol edin.
Kaveh

1
Yani tamsayı da girişin bir parçası mı? i
JeffE

Yanıtlar:


9

Hayır, tarif ettiğiniz problem aslında oldukça kolaydır. Üst düzey neden, indeksinin kabaca n bit uzunluğunda olması nedeniyle, n'de polinom zaman geçirmeyi göze alabiliriz .inn

İki tamsayı Verilen: Aşağıdaki ilgili sorunu ele alalım ve k , açıklamak k çözümünde inci hamleyi n -Disk bulmaca. Giriş boyutu lg n + lg k < n + lg k'dir , ancak aslında, n'nin sadece en az önemli bitidir . Yani lg k n'den önemli ölçüde küçük olsa bile , bu problemi O ( polin k ) zaman polinomunda çözebiliriz .nkknlgn+lgk<n+lgknlgknO(günlükk)

Disklerin boyutuna göre artan sırada herhangi bir sayıya ve mandalların 0 = kaynak, 1 = hedef ve 2 = yedek olarak numaralandırıldığını varsayalım . Bazı p ve d tamsayıları için k = ( 2 p + 1 ) 2 d yazalım . Sonra k dönüşünde :0k=(2p+1)2dpdk

  • Eğer tek, sonra tablanın d kazığından hareket ( s mod 3 ) PEG ( ( p + 1 ) mod 3 ) .d+nd(pşık3)((p+1)şık3)
  • Eğer daha sonra tablanın d hareket pimini oluşturan ( - p mod 3 ) PEG ile ( ( - p - 1 ) mod 3 ) .d+nd(pmod3)((p1)mod3)

Bu kolayca işlem ve d zamanlı O ( giriş k ) ikili gösterimi döngü tarafından k yukarı doğru en az önemli bit den. Bu kadar.pdO(logk)k

Şimdi gerçekten istediğiniz varsayalım çıkış dizisi, içinde inci biti i girdi parçası yerine bir k . Her dönüş bit aynı sayıda kullanarak kodlanmış ise - özellikle, lg ( n + 1 ) , disk sayıda bit, 2 için bitleri ve-kazığından 2 için bit-PEG - sonra sadece hesaplamak zorunda k. hareket, burada k = i / ( lg ( n + 1 ) + 4 ) iiklg(n+1)22kk=i/(lg(n+1)+4)ve sonra uygun biti ayıklayın. ( Çıktıyı belirlemek için n'yi bilmemiz gerektiğinden , giriş boyutunda doğrusal olduğuna dikkat edin .)lg(n+1)+4n

Öte yandan, disk numaraları için değişken uzunluklu bir gösterim kullanıyorsak, sayısı polinom zamanında ikili aramayla bulabiliriz. Tüm m k için üst m diskleri hareket ettirmek için gereken toplam tur sayısını bilmemiz gerekir , ancak bu, M ( m ) = 2 M ( m - 1 ) + ( \ # bit hareketini kaydetmek için verilir. disk  m ) dinamik programlama ile polinom zamanda değerlendirebiliriz. Geri kalan ayrıntılar okuyucu için sıkıcı bir egzersiz olarak bırakılmıştır.kmmk

M(m)=2M(m1)+(\#bits to record moving disk m)

(En az bir tek tek veya eşlik hatası yaptığımı varsayıyorum, ancak umarım ana fikir açıktır.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.