[技术向][独立开发]一句话,让小侄女投来崇拜的眼神 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
nBlock
V2EX    分享创造

[技术向][独立开发]一句话,让小侄女投来崇拜的眼神

  •  
  •   nBlock 240 天前 2841 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。

    过年的时候,几个侄女拿着手机找到我,请教我游戏的解法,游戏画面大致如下:

    sliding puzzle game

    该怎么给外甥女说呢?

    我这样想的,采用暴力解决方案,进行无限次的尝试,最终会找到解。 玩这个游戏最重要的是培养人的耐心,我一边说着一边操作,进行了大概几十次操作,通过了。 外甥女对我投来了崇拜的眼神,我接着说,其实这里不只是简单的暴力尝试这么简单,我们可以研究一套自动算法,找到最优的解决路径。

    后面被叫去吃饭了,关于游戏的思考中断了。

    回来之后,我重新思考这个问题,如何找到最优解呢?这些游戏看似简单,我们把他抽象成一个编程题,输入为一个 nn 的矩阵,其中填充了 0 到 nn-1 的数字,假设 0 是空格子,每次只能移动 0 元素相邻的元素与其交换位置,最终输出移动格子的序列号,使得矩阵顺序排列。

    通过查找网络和 AI 工具,了解到确实有一些算法来帮助解决这些谜题如下:

    1. 启发式模式解法( Pattern Solving )
    2. 启发式搜索算法 A* 算法 使用曼哈顿距离( Manhattan Distance )作为启发函数
    3. 启发式搜索算法 A* 算法 使用错位方块数( Misplaced Tiles )作为启发函数
    4. 启发式搜索算法 A* 算法 使用线性冲突( Linear Conflict )作为启发函数
    5. IDA* (Iterative Deepening A)
    6. 双向广度优先搜索( Bidirectional BFS )

    他们的时间复杂度和空间复杂度各不相同,我将他们部署到前端页面,发现他们的效果对不同的场景差异很大。

    以下是 deepseek 的对他们时间空间复杂度对比


    对比总结

    算法 时间复杂度 空间复杂度 适用场景
    Pattern Solving O(1) O(1) 快速解决特定简单局面
    A* (Manhattan) ~O(b^(d/2)) O(b^d) 需平衡速度与内存的中等规模问题
    A* (Misplaced Tiles) ~O(b^d) O(b^d) 简单场景,启发式要求不高
    A* (Linear Conflict) ~O(b^(d/2)) O(b^d) 复杂障碍下的高效求解
    IDA* O(b^d) O(b*d) 内存受限,允许牺牲时间换取空间
    Bidirectional BFS ~O(b^(d/2)) O(b^(d/2)) 内存充足,追求最快解

    受到哥飞老师影响,开发了一个站点,研究了提供滑块拼图的解决方案。

    Sliding Puzzle Solver

    这里提供了 6 种算法方案,经过测试发现,简单的 case ,如只需要挪动一格 方法 2-6 能给出结论,但是稍微复杂一些的情况,就卡死了。

    方法 1 虽然稳定,但是对于只需要挪动一格场景,也会给出 103 步的方案

    还有没有好的办法呢?

    7 条回复    2025-03-17 10:09:10 +08:00
    jr55475f112iz2tu
        1
    jr55475f112iz2tu  
       240 天前 via Android   6
    你哥飞在这里被喷得那么厉害,没告诉你这个摸鱼论坛工作日才有流量,周末没人来么

    还是退学费去吧
    Charlie17Li
        2
    Charlie17Li  
       240 天前
    @czfy 刚开始还是认真看下来,看到飞哥果断看了一眼评论区,笑麻了
    hwdq0012
        3
    hwdq0012  
       240 天前
    ddqn 强化学习适合做这个
    nBlock
        4
    nBlock  
    OP
       240 天前
    @hwdq0012 #3 谢谢 我研究下
    @czfy #1 我无所谓啦,主要是工作日当牛马,哪有空发帖。
    @Charlie17Li #2 老哥 看到你这句,我也笑麻了 XDD
    774157009
        5
    774157009  
       240 天前
    管它机器推用什么什么 star 算法,我自己推就一个原则把乱序的格子缩减到 n-1*n-1 ,排序一横一竖。不是最优的方法,但是简单直观哈哈哈哈
    drymonfidelia
        6
    drymonfidelia  
       240 天前
    一步都不移,直接 start 104 步
    r6cb
        7
    r6cb  
       238 天前
    可以用 mcts
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2468 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:30 PVG 23:30 LAX 07:30 JFK 10:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86