Meet in the Middle 算法

本文介绍了Meet in the Middle算法,一种用于优化搜索的策略,尤其在解决位操作和密码学问题时能显著提高效率。算法通过分治策略减少搜索空间,将原本的O(2^n)复杂度降低到O(2^(n/2))。文章以一道位操作题目为例,展示了如何利用该算法降低复杂度,并提到在3DES加密算法中,Meet in the Middle算法用于提高破解效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

作为一名往日OI的玩家,偶然间发现昔日的战友在SJTU-ACM的OJ上面发了几道题,随手点开一题发现一题用的正式赫赫有名的Meet in the Middle算法,于是心血来潮就把这题顺手AC了。

正文

我们首先还是来介绍一下meet in the middle 算法。

Meet in the Middle算法可以看成是搜索算法的一个改进,一般来说用于广搜(BFS),不过如果搜索深度有上限的情况下也可以用深搜。

我们首先假象一个搜索场景


假设从上面的红点开始进行搜索,找一条能通向下面那个红点的路径,每个点都有两条岔路可供选择。

显然如果我们简单的从上面那个点开始BFS,代价是较大的,在最差的情况下,可能需要把整张图的45个节点给走一遍。

当然把搜索的重任全部交给一个节点是不合理的。于是Meet in the Middle算法就诞生了。顾名思义,就是两个节点各自向中间搜索,直至碰头。


在上图中红点的部分为起点开始向外搜索到的点,而蓝点表示从终点开始搜索到的点。假如此时搜索进行到点B,直接就能发现A点是从起点过来的点,那么也就自然找到了一条从 起点->A->B->终点 的路径,然而我们发现,整个图里面黑色部分的节点与边其实我们都可以不用访问。当整张图扩大是,这种优化的效果还是比较明显的。

我们接下来用数学来具体推导一下这种搜索方案的复杂度。

假设向外搜索n层需要的代价为f(n)。如果不用meet in the middle 那么复杂度

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值