Redian新闻
>
NP完备破解羊了个羊?

NP完备破解羊了个羊?

公众号新闻



  新智元报道  

作者:终军弱冠
编辑:QQ
【新智元导读】蹭热度的小游戏计算复杂性又来了~

近日,羊了个羊火遍了网络,一时间关于第二关怎样难、如何通关的文章也多了起来,但是从计算复杂性(computational complexity)的角度讨论游戏难度的文章应该还没有,所以这次我也写一篇关于计算复杂性的文章来碰瓷。
游戏的机制是比较简单的,简单说来就是地图上有一些不同类型的方块,玩家可以选择方块放入自己的槽位中(槽位有上限,是个常数),如果槽位中有三个相同类型的方块就消去,游戏目标是消去所有方块。游戏的难点在于地图上的方块是堆叠起来的,被叠在下方的方块不能被选择,只有在上方的方块被放入槽位后才能被选择(也就是解锁),有时被叠在下方的方块的类型都由于被遮挡而不可知。
事实上,羊了个羊与有些小游戏的机制很类似,而其中很多小游戏已经被证明是 NP-complete 的,所以我们比较确信也能证明推广了的羊了个羊是 NP-complete 的。这里我们给一个比较弱的、简单的归约构造,来说明推广的羊了个羊游戏是 NP-complete。这里我们说的推广是指方块类型的数量不限制于常数,被遮挡的方块类型是确定的且已知的,槽位数量固定为 3(槽位数量是其他常数也可以用类似方法,只要在游戏初期迫使玩家拿一个特殊类型的方块,而在游戏最后才能消去,整个过程中这个方块占用了一个槽位,相当于少了一个槽位)。当然,这里我们不考虑游戏道具的影响。
本文的归约主要抄袭的是 Computational Complexity of Games and Puzzles 网页上证明 Mah-Jongg 游戏(一个类似连连看的游戏,有的地方也叫麻将)是 NP-complete 的归约。
我们仍然使用 3-SAT 这个经典的 NP-complete 问题作为归约问题。我们对于 3-SAT 公式中的每个变量设置 3 个方块堆,一个方块堆用于模拟变量的赋值(TRUE or FALSE),一个方块堆对应于赋值为 FALSE,一个堆对应于赋值为 TRUE。模拟变量的赋值方块堆有两层,第一层是 4 个一样的对应于变量的方块,第二层包含变量被赋值为 TRUE 和 FALSE 的方块各一个以及填充方块。对应于赋值为 FALSE 的方块堆通常是多层的(也可能退化为一层),顶层包含两个对应于变量被赋值为 FALSE 的方块(用于配合之前赋值方块堆使用),下层包含对应于子句的方块(对应子句中变量以非的形式出现)以及填充方块。对应于赋值为 TRUE 的方块堆的结构是类似的。最后,还有一个用于验证解的方块堆,这个堆是多层结构,顶部包含了对应于子句的方块,中部是对应于变量的方块,底部是对应于子句的方块。
我们用一个具体的例子来描述这个归约,假设 3-SAT 的实例是。那么对于的羊了个羊游戏的实例如下(为了能表述每个方块的类型和堆叠情况,我们使用侧面视图的方式展示)
其中 C1 表示,C2 表示,a 是填充方块,a 方块没有压住任何方块,所以可以留到最后再全部消去而不影响其他方块。注意这里我们设置的槽位数量是 3,也就是说选择某个方块放入槽里后就必须要消除这个类型的方块,否则就无法继续游戏了。
如果公式可满足,那么可以按照满足时各变量的赋值来消除方块。比如假设 xyz 全赋值为 FALSE,那么我们就对应消除最左侧的三个 x y 和 z,这样一来,第二层的方块 x=F y=F 和 z=F 就被解锁,我们就可以消去所有 x=F y=F z=F 方块,接着一个 C1 方块和两个 C2 方块就解锁,然后就能配合最下方的验证方块堆,消去验证堆的顶部两层,而后中间的变量 xyz 方块也马上能消去,最后就没有什么限制了,所有的方块都能够被消去。
反过来,如果所有方块可以消去(也就是该关卡可以通关),那么公式可满足。注意到验证堆中的变量 xyz 的方块想要被消去,必须上部的 C1 C2 子句方块都先消去,而子句方块又受限于赋值方块,赋值方块受限于变量方块,变量方块的摆放方式决定了在变量赋值时,每个变量只能赋为 FALSE 或 TRUE 中的一个(具体来说,在游戏初期 4 个 x 方块中任意消去 3 个后,方块 x=F 和 x=T 中必然有一个未被解锁)。这就意味着方块消去的顺序蕴含了一个满足公式的赋值。
这也就是说 3-SAT 公式可满足的充分必要条件是对应的羊了个羊游戏实例可通关。而羊了个羊显然属于 NP,因为能在多项式时间内判定一个操作序列是否能消去所有方块,从而我们就证明了下面的命题:
命题:在所有被遮挡的方块类型是确定且已知的条件下,推广的羊了个羊游戏属于 NP-complete。
用非人话来说就是,你没有办法设计一个多项式时间复杂度的算法来判断任意推广的羊了个羊关卡是否有解,除非 P=NP (这个只有 4 个字符的等式价值一个土地奖和 100 万美元,所以别去闲着没事就想着尝试证明或证否)。用人话来说就是,即使被遮挡的方块类型是确定的且已知的,计算机也仍然(几乎)无法快速地判断羊了个羊是否能通关。
参考资料:
https://zhuanlan.zhihu.com/p/567348731



微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
《羊了个羊》把我搞死了...被“羊了个羊”逼疯后,程序员自己做了个“鱼了个鱼”!羊了个羊过不了自己的第二关通关率不到0.1%的“羊了个羊”游戏,把全国网友整疯了……想吃现成的?有个高招同事通关了《羊了个羊》,全公司膜拜了她两天。享受生活9.7,一集我就弃了羊了个羊《羊了个羊》爆火过后,互联网人应做的10条笔记羊了个羊到底咋通关啊!狂玩100局后,我斗胆提出了一些分析《羊了个羊》制作人独家回应:“日入468万”不实,第二关可以过奇葩游戏《羊了个羊》火爆全网,同类游戏海外月收入竟超7000万?让你抓狂的“羊了个羊”,可能根本通不了关为什么《羊了个羊》这么难!它是不是故意让我输的?羊了个羊,你想让我死可以直说假如你是《羊了个羊》的运营“羊了个羊”,年度气人王《羊了个羊》热度下滑,开发商CEO却说:“人气跌了很开心”“羊了个羊”现借贷广告引用户反感一关练手二关就发财,想重现《羊了个羊》全民挑战真的很难么?营销比游戏做得好,《羊了个羊》其实是「游戏界的拼多多」|营销观察亮妈蔬法文城绝活,创意新颖诗情画意被《羊了个羊》虐了一夜后,我选择重温这5款经典自虐小游戏看你们在玩《羊了个羊》,我实在惊了个惊。“羊了个羊”很火,能复制吗?“羊了个羊”轻松冲上热搜第一,这家公司靠“困难”模式赚钱《羊了个羊》微信指数破亿、超王者荣耀!马化腾居然替其辟谣?“羊了个羊”刷爆朋友圈,上亿人热议:人这一生,最该看透的3个真相羊了个羊,日赚五百万!那些被骗的人游戏的尽头是“羊了个羊”创新!高中老师将“羊了个羊”游戏改编成“”历了个史”……听,教育早新闻来啦!羊了个羊,披着羊皮的狼破16亿!上周,《羊了个羊》赚了多少钱?漱口水的功效与副作用
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。