zoukankan      html  css  js  c++  java
  • 浅谈Meet in the middle——MITM

    目测观看人数 (0+0+0=0)


    (mathrm{Meet;in;the;middle})(简称 ( m MITM)),顾名思义就是在中间相遇。

    可以理解为就是起点跑搜索树基本一半的状态,终点也跑搜索树基本一半的状态,最后撞到中间,一种类似双向 DFS 的东西。优化还是不错的awa,减少了差不多一半。

    时间复杂度可如下分析:

    设向外搜索 (n) 层需要的代价为 (k(n))。如果不用 ( extrm{MITM}),那么复杂度显然是 (mathcal O(k(n)))

    以下提供两种做法:

    • 方法 (1):由 ( m MITM) 定义得,从起点搜索到一半的代价为 (kleft(dfrac{n}{2} ight)),从终点搜索到一半的代价也为 (kleft(dfrac{n}{2} ight)),总代价为 (2cdot kleft(dfrac{n}{2} ight)),省略常数,得时间复杂度 (mathcal Oleft(kleft(dfrac{n}{2} ight) ight))
    • 方法 (2):设搜索树起点与终点为 (A,B) 连接 (B) 与搜索树左右边缘中点,再连接两个左右边缘中点,将搜索树分为四个面积相等区块,( m MITM) 仅搜索其中两个区块,得时间复杂度为 (mathcal Oleft(kleft(dfrac{n}{2} ight) ight))

    这种算法吧,对于 (k(n)=n^2) 时,朴素算法为 (n^2)( m MITM)(left(dfrac{n}{2} ight)^2=dfrac{n^2}{4}),优化了 (dfrac{1}{4}) 复杂度。线性的优化,在数据大时效果明显。但是如果 (k(n)=2^n),那么朴素算法为 (2^n)( m MITM)(2^{frac{n}{2}}=sqrt{2^n})


    显然从一个节点出发进行搜索这题肯定会超时的

    对于一个 (9) 位数,一共有 (9) 种可能的 (+1) 操作(每一个数位都可以 (+1)),一共有 (8) 种可能的交换操作,共 (17) 种操作。乘法原理得如果向外搜 (10) 层复杂度是 (17^{10})使用某 Windows 常用计算小工具得 (17^{10}=2015993900449) 假设计算机 (1ms) 运行 (10^4) 次操作还是不能 (1s) 解决,显然 (old{ m TLE})

    告诉起始点来个 ( m MITM) 双向就珂以了,(17^5=1419857),就算是 (1ms)(10^2) 的老爷机跑的差不多才 (0.1s)

    这题 ( m BFS) 可能会浪费点时间还是 ( m DFS) 好awa

    注意用个 ( m hash),别 ( m MLE)

    • 例题2

    原题在 ( m codevs) 众所周知 ( m codevs) (dotsdots)

    (n) 个砝码,现在要称一个质量为 (m) 的物体,请问最少需要挑出几个砝码来称?
    注意一个砝码最多只能挑一次。

    (1le nle 30)(1le mle 2^{31})(1le ext{每个砝码的质量}le 2^{30})

    看起来像是背包??(

    • 解法 (1):暴!力!出!奇!迹!一发爆搜切!掉!!
      记得优化awa

      1. 用后缀和优化
      2. 用读优
      3. 如果当前使用的砝码数 (ge) 当前最优解,( m return)(最优性剪枝);
      4. 深搜之前按从大到小排序(改变搜索顺序),( ext{当前总重量}+ ext{当前砝码重量}<m)(最优性剪枝) ,( m return)
      5. 如果 ( ext{当前总重量}+ ext{当前砝码重量}>m) ,换下一个砝码(可行性剪枝),注意不要 ( m return)

      然后就可以写出代码了:
      J1O5HH.png

    • 解法 (2):用 ( m MITM),如果后 (dfrac{1}{2}) 发现有 (=m) 的就更新答案,这个稳过,不用优化。
      代码:
      J1jfTH.png

  • 相关阅读:
    HTC(G13)野火A510e获取root权限详细图文教程
    aliyun的linux服务器配置
    js判断是否为数字, 是否为整数, 是否为浮点数
    帝国cms管理员帐号、登陆密码、登陆认证码、登陆安全答案忘记了怎么办?
    帝国cms后台登陆出现空白页的问题所在及解决方法
    jQuery1.4.2与json格式兼容问题
    [IoC容器Unity]第四回:使用范例
    [IoC容器Unity]第二回:Lifetime Managers生命周期
    [Scheduled Timer]第八回:总结
    [设计模式原则]第五回:迪米特原则
  • 原文地址:https://www.cnblogs.com/CDOI-24374/p/12741008.html
Copyright © 2011-2022 走看看