Bu NP-Komple bir sorun olabilir mi?


10

Aşağıdaki sorun bildirimini göz önünde bulundurun:

İlk sayı verildiğinde, siz ve arkadaşınız mükemmel bir kareyi çıkarmak için sırayla ilerlersiniz. Sıfıra ilk giren kazanır. Örneğin:

Başlangıç ​​Durumu: 37

Oyuncu1 çıkartma 16. Durum: 21

Oyuncu2 çıkartma 8. Durum: 13

Oyuncu1 çıkartma 4. Durum: 9

Oyuncu2 çıkartma 9. Durum: 0

Oyuncu2 kazandı!

Başlangıç ​​durumu veren, en uygun hamleyi veren bir program yazın, yani oyunu kazanmayı garantileyen bir program. Eğer olası bir hamle sizi kazanan bir duruma getiremezse, -1'e dönün.

Bu problem, dinamik programlama kullanılarak yalancı polinom zamanda çözülebilir . Fikir, n ( başlangıç ​​durumudur) n uzunluğunda bir diziyi en uygun hareketlerle aşağıdan yukarıya veya hiçbir hareket kazanmaya yol açmıyorsa -1 ile doldurmaktır . Bu O (n * sqrt (n)) alacaktır, çünkü her sayı için mümkün olan her mükemmel kareyi ondan daha küçük çıkarmayı düşünmeliyiz (bunlardan ~ sqrt (n) vardır). Ancak bu, sözde-polinom çalışma zamanı karmaşıklığıdır, çünkü çalışma zamanı aslında ikili sayıdaki girdinin boyutuyla (sayıyı temsil etmek için kullanılan bit sayısı) ilişkili olarak üstel olarak ölçeklenir.

Herkes bu sorunu çözmek için bir polinom algoritması düşünebilir mi? Değilse, NP-Complete olabilir mi? Neden?


1
Meraktan, neden özellikle NP-tam olup olmadığını soruyorsunuz? (Şahsen, gerçekten
bilmesem

@ruakh Kısa bir süre önce bir kodlama röportajı sırasında bu problemle karşılaştım ve tarif ettiğim dinamik programlamayı kullanarak sözde polinom çözümünü önerdim. Ancak, problemi dikkatlice düşündükten sonra polinom zaman algoritması bulamadım. Yakında kendimi bir NP (-Komple) problemi olup olmadığını sorgulamaya başladım.
Martin,

Hangi pozisyonların kazanan ve hangilerinin pozisyon kaybettiğini hesaplamayı denediniz mi? Belki de bir desen ortaya çıkacaktır.
Yuval Filmus

@YuvalFilmus Wikipedia'ya göre bu model için bilinen bir formül yok ( OEIS'te A030193 dizisi)
Martin Copes,

Doğru, ben sadece bu bilgilerle bir cevap gönderecektim. Ayrıca bkz. A224839.
Yuval Filmus

Yanıtlar:


6

Kaybetme konumlarının ilgili bir sıralamasının OEIS, bulunabilir A030193 sahip pozisyonların dizisi olduğu için, Grundy değeri 1, A224839 . Ansiklopedi, ilgili birkaç makaleye atıfta bulunur. Belki bazıları diziyi hesaplamak için önemsiz olmayan algoritmaları tartışırlar.


Bahsettiğiniz gibi, bu dizi kaybetme pozisyonlarını temsil eder. Bir pozisyonun kaybolup kaybolmadığını (ki bu zor görünüyor!) Sabit zamanda kontrol edebilseniz bile, sorun yine de optimal hareketi geri döndürmenizi ister, yani almak için mevcut duruma hangi kareyi çıkarmanız gerekir? kaybetme pozisyonu. Sorun, mevcut durumdan kareler çıkararak bir kaybetme pozisyonu bulmak için kaynar. Dolayısıyla, bir konumun sabit zamanda kaybedilip kaybedilmediğini kontrol edebilseniz bile, durumdan daha küçük tüm kareleri tekrarlamanız gerekir.
Martin Copes

3
Doğru, yeterli olmayacak, ama iyi bir başlangıç ​​olacak. Belki de bir pozisyonun sadece kazanma durumunu hesaplayabileceğiniz konusunda fikir edinebilirsiniz. Ayrıca, hangi pozisyonun kaybedildiğine karar vermenin zor olduğunu göstermek, herhangi bir makul karar versiyonunda belirtildiği gibi probleminizin NP-zor olduğunu göstermek için yeterli olacaktır.
Yuval Filmus
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.