当前位置: 首页 > 知识库问答 >
问题:

如何计算游戏2048的复杂度?

乐正迪
2023-03-14

编辑:这个问题不是重复什么是游戏2048的最优算法?

  • 这个问题问“赢得比赛的最好方法是什么?”
  • 这个问题问‘我们如何计算出游戏的复杂性?'

这让我想到了它的复杂性。对于像国际象棋这样的确定性游戏,它有可能(在理论上)计算出所有导致胜利状态的可能的走法,并向后工作,选择保持导致结果的最佳走法。我知道这导致了大量可能的移动(在宇宙中原子数量范围内的东西)…但2048年是不是比较复杂?

PsudoCode:

for the current arrangement of tiles
    - work out the possible moves
    - work out what the board will look like if the program adds a 2 to the board
    - work out what the board will look like if the program adds a 4 to the board
    - move on to working out the possible moves for the new state

在这一点上,我想我会在这里等待这运行一段时间...

共有1个答案

弘柏
2023-03-14

让我们来确定有多少种可能的电路板配置。

每个平铺可以是空的,也可以包含2、4、8、...、512或1024个平铺。

这是12个可能性每瓷砖。有16个瓦片,因此我们得到1612=248可能的板状态--这很可能包括一些不可达的状态。

248板状态则需要8*248=2251799813685248html" target="_blank">字节=2048 TB(更不用说为跟踪最佳板而增加的开销)。这有点超出了目前台式计算机的水平,尽管在任何给定时间都可以巧妙地限制所需的电路板数量,以获得适合于例如3 TB硬盘驱动器或甚至是RAM的电路板。

作为参考,国际象棋有一个2155可能位置的上界。

如果我们真的从一开始就计算每一个可能的移动(以广度优先搜索的方式),我们会得到一个巨大的数字。

让我们做一些假设:(为了简单起见,这些假设并不总是正确的)

>

  • 始终有15个打开的方块

    你总是有4个动作(左、右、上、下)

    一旦板上所有瓷砖的总和达到2048,将需要最少的组合数来获得单个2048(因此,如果放置2使和2048,则组合将是2->4->8->16->...->2048,即采取10步)

    2总是会被放置,而不是4-算法不会假设这一点,但是,为了计算上界,我们会这样做。

    我们不会考虑这个过程中可能会产生重复板的事实。

    要达到2048,需要放置2048/2=1024个瓦片。

    计算确切的数字可能需要我们通过所有这些州,这是不可行的。

  •  类似资料:
    • 实现一个简单的2048小游戏。手指上下左右滑动屏幕可以移动方块。 2048游戏是什么:每次控制所有方块向同一个方向运动,两个相同数字的方块撞在一起之后合并成为他们的和,每次操作之后会在空白的方格处随机生成一个2或者4,最终得到一个“2048”的方块就算胜利了。如果16个格子全部填满并且相邻的格子都不相同也就是无法移动的话,那么游戏就会结束。

    • 此为在原版2048的基础上,添加了电脑AI解题,并稍微修改了UI添加按钮来触发AI。 AI的核心在/js/myAI.js里,相关函数在window.myPlugin里 核心算法是用dfs搜3步后使代价函数window.myPlugin.evalCost期望值最小的走法, 代价函数的设计目的是让块尽量按由大到小顺序堆叠在右上角,并合并。 实验效果是基本能保证到2048,偶尔到4096甚至8192(概率较小)。

    • 我正在尝试用C重新创建游戏2048,但我无法让算法移动或合并瓷砖在一起以正常运作。在最初的2048游戏中,你会像这样移动瓷砖: 所以两个相同的瓷砖可以合并成一个两倍大小的瓷砖。我的版本几乎是相同的,但我没有使用数字,而是使用合并时递增1的字符,因此将合并到等。我这样做只是为了不必处理不同大小的瓷砖。 所以我的板存储为一个4*4字符数组,在一个我称之为网格的结构中(我知道可能有点多余) 我曾经尝试过

    • 我已经通过谷歌和堆栈溢出搜索,但我没有找到一个关于如何计算时间复杂度的清晰而直接的解释。 说代码像下面这样简单: 说一个像下面这样的循环: 这将只执行一次。 时间实际上被计算为而不是声明。

    • 本文向大家介绍javascript制作2048游戏,包括了javascript制作2048游戏的使用技巧和注意事项,需要的朋友参考一下 2048.html 2048.css 2048.js 以上所诉就是本文的全部内容了,希望大家能够喜欢。

    • 本文向大家介绍javascript版2048小游戏,包括了javascript版2048小游戏的使用技巧和注意事项,需要的朋友参考一下 没有技术含量,只是用来练习代码逻辑的。为了代码结构清晰,我把逻辑控制部分写在全局变量里,用户界面操作封装在UI对象里,大概就这样了。仅供参考。工作时候,我的编码风格有人吐槽太乱了,所以我想试着写一个不是那么乱的东西出来。。 以上就是本文所述的全部内容了,希望大家能