双向BFS中复杂度的理解

刚见到双向BFS的时候一直关于复杂度有一些点不是很理解,比如说一个三叉树,假设之间的路径为4,那么如果单项BFS的话,算法的复杂度应该是(1+3+3^2+3^3+3^4) = (3^5-1)/2  数量级就是O(n^(m+1)),n指的就是单个节点可以走的方向的个数,m指的就是路径的长度,假如是迷宫问题,n=4

如果是双向的话,假设两边都遍历了两层,此时复杂度是(1+3+3^2)*2,我们这里定义upBfsQ和downBfsQ是分别用来向上和向下遍历的辅助队列,此时我们要做的就是判断upBfsQ中的元素是否在downBfsQ中,此时两个队列中的元素都是3^2个,那么如果普通的遍历的话,复杂度就应该是3^2 * 3^2 = 3^4,这样的话,复杂度并没有减少,我刚看到的时候,我觉得要想数量级减少到很多博客上说的O(2*n^(m/2+1))的话,这个part用的方法就应该是hash表来查找一个节点是否已经被遍历过了,这样复杂度就是O(1),这样的话复杂度就是(1+3+3^2)*2 = 2*(3^3-1)/2,这样就对了。

 

学识粗浅,很久没写了,自己的理解,如果有哪里不对,欢迎指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值