当前位置: 首页 > news >正文

WordPress瀑布流图片站我国经济总量

WordPress瀑布流图片站,我国经济总量,网络设计包括哪些,哈尔滨网站建设q479185700惠第五十二章 BFS进阶(二)——双向广搜一、双向广搜1、优越之处2、实现逻辑3、复杂度分析二、例题1、问题2、分析3、代码一、双向广搜 1、优越之处 双向广搜是指我们从终点和起点同时开始搜索,当二者到达同一个中间状态的时候,即相…

第五十二章 BFS进阶(二)——双向广搜

  • 一、双向广搜
    • 1、优越之处
    • 2、实现逻辑
    • 3、复杂度分析
  • 二、例题
    • 1、问题
    • 2、分析
    • 3、代码

一、双向广搜

1、优越之处

双向广搜是指我们从终点和起点同时开始搜索,当二者到达同一个中间状态的时候,即相遇。

那么这么搜有什么好处呢?

我们知道,在很多题目中,我们使用BFS的时间复杂度是指数级别的。

也就是说,如果讲BFS的进行次数画成一个函数的话,就会画成下面这个图。

在这里插入图片描述

如果我们采取从两端出发,到中间某点相遇的做法。

那么示意图可以画成下面的样子:
在这里插入图片描述

可能原来我们需要进行A次搜索,但是双向广搜的话,我们就只需要进行B次搜索。(上图仅仅表示一个大概意思,目的仅仅为了突出双向广搜进行了很大的优化,请勿追究细节)

除了上面这种大致的表示方法外,我们还可以画成一个搜索树的形式来看。

在这里插入图片描述
红色绿色线交叉的部分组成的菱形是双向广搜过程中所需搜索的状态数量。

上面的两个图仅仅是感性的分析了一下,双向广搜的优越之处。

我们还需要量化计算一下,到底优化了多少,具体的时间复杂度是多少,在分析复杂度之前,我们需要先看一下双向广搜大体的实现逻辑。

2、实现逻辑

我们创建两个队列。

一个队列从起点开始广搜,一个队列从终点开始广搜。

而在BFS中,我们的执行次数和队列中的元素是相关的。我们队列中的元素越多,BFS需要扩展的就越多。所以我们可以通过队列中的元素个数来代表一个BFS扩展时的复杂程度。

因此,我们可以比较两个BFS的队列中的元素,谁队列中元素少,就对哪个BFS进行拓展。

3、复杂度分析

根据上面的算法实现,我们可以知道,基本上就是从终点开始的BFS和从起点开始的BFS轮流进行。

我们可以认为二者进行的次数是一样的。

假设二者一共扩展了KKK次,那么各自可以认为进行了k/2k/2k/2次。

这里的拓展是只刚才搜索树中的。假设每次扩展是多两个状态入队,那么总共的状态就是1+21+22....+2k/2−11 + 2^1 + 2^2 ....+2^{k/2-1}1+21+22....+2k/21,求和以后约等于2k/22^{k/2}2k/2,那么两个BFS加起来就是2k/2+12^{k/2+1}2k/2+1

如果单向广搜的话,按照刚才的求和公式,对kkk层的状态求和,大概是2k2^{k}2k

那么我们就发现优化了大约2k/22^{k/2}2k/2倍。

二、例题

1、问题

在这里插入图片描述

2、分析

过程很简单,就是从起点开始枚举每一个可能的变化,直到最后变成了B。

由于我们已经知道了终点过程,所以可以同时从B到A开始变化。一直到二者中间状态重合。

3、代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 6;
int n;
string A, B;
string a[N], b[N];
int extend(queue<string>& q, unordered_map<string, int >&da,unordered_map<string, int>&db,string a[N], string b[N])
{int d = da[q.front()];while(q.size() && da[q.front()] == d){auto t = q.front();q.pop();for(int i = 0; i < n; i ++ ){for(int j = 0; j < t.size(); j ++ ){if(t.substr(j, a[i].size()) == a[i]){string r = t.substr(0, j) + b[i] + t.substr(j + a[i].size());if(db.count(r))return da[t] + db[r] + 1;if(da.count(r))continue;da[r] = da[t] + 1;q.push(r);}}}}return 11;
}
int bfs()
{if(A == B)return 0;queue<string>qa, qb;unordered_map<string, int> da, db;qa.push(A), qb.push(B);da[A] = db[B] = 0;int step = 0;while(qa.size() && qb.size()){int t;if(qa.size() < qb.size()){t = extend(qa, da, db, a, b);}else{t = extend(qb, db, da, b, a);}if(t <= 10)return t;if(++step == 10)return -1;}return -1;
}void solve()
{cin >> A >> B;while(cin >> a[n] >> b[n])n ++;int t = bfs();if(t == -1)cout << "NO ANSWER!\n";else cout << t << "\n";
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);solve();
}
http://www.yayakq.cn/news/685041/

相关文章:

  • 网站建设 doc中国黄页网址
  • 深度网营销型网站建设公司怎么样app网站制作
  • p2p网站功能模块wordpress 网站搭建
  • 上海网站备案崇左市住房和城乡建设局网站
  • 湖南环保设备公司中企动力网站建设技术支持中国做视频网站有哪些
  • 鄂州网站建设设计wordpress 论坛
  • 做我女朋友套路网站论述简述网站制作的步骤
  • 济宁网站建设找哪家网络推广建设期的网站
  • 做网站 图片是文本建设电影播放网站
  • 公司网站建设服务费怎么做账腾讯云wordpress安装
  • 网站推广app软件公司网站cms
  • 四川建设厅网站wordpress最新评论
  • 永久免费的ppt网站wordpress 个人 模板
  • windows网站模板网页设计实训报告书
  • 免费个人网站建站电子商务网页设计与网站建设
  • 11网站建设waoccwindows优化大师如何卸载
  • 怎么用ps做网站首页图片尺寸智慧团建信息系统网站
  • 无锡做网站需要多少钱公司简介宣传册设计样本图片
  • 片头网站手机排行网站有哪些
  • 移动4G网站建设吴忠建设局网站
  • 做图网站做网站如何赚广费
  • 怎么做网站外链如何网络推广运营
  • 整站模板wordpress 电影主题
  • wordpress可视化建站wordpress博客案例
  • 茂名免费做网站保定seo公司
  • wordpress静态分离廊坊关键词seo排名网站
  • 网站群集建设南宁 做网站
  • 网站开发流程6个阶段丰台网站制作
  • 北京网站建设服务中心网站建设烟台
  • 如果做镜像网站爱站网关键词挖掘