刚见到双向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,这样就对了。
学识粗浅,很久没写了,自己的理解,如果有哪里不对,欢迎指正