当前位置: 网站首页>小程序开发>小程序制作

正定网站建设【正定网络公司】正定做网站、正定微信公众号开发、正定网站设计、正定小程序制作

发表日期: 2021-04-17 09:53:17 浏览次数:147

正定网站建设【正定网络公司】正定做网站、正定微信公众号开发、正定网站设计、正定小程序制作

正定县,河北省石家庄市辖县,位于太行山东麓的山前倾斜平原、山前冲积扇的中上部,因“真正安定”之意得名 [1-2]  ;正定县位于东经114°23′~114°43′,北纬38°6′~38°22′,总面积486平方千米,气候型为温带季风气候,四季分明,多年平均气温13.1℃,多年平均降水量550毫米 [3]  ;截至2020年10月,正定县下辖2个街道、3个镇和5个乡,境内设有中国(河北)自由贸易试验区正定片区和正定新区;截至2019年末,正定县常住人口为51.7万人 [1]  。

正定县前身为真定县,有1600多年的建城史,最初为鲜虞国都城,后为中山国都城,建县始于秦始皇统一中国后设立的东垣县,“真定”一名始于汉高祖十一年(前196年)改东垣县为真定县,最终于清雍正元年(1723年)改为现名 [2]  。正定县是京津冀城市群、石家庄都市圈的重要城镇,境内建有石家庄正定国际机场,有京广高速铁路过境 [4]  。正定县有“九楼四塔八大寺,二十四座金牌坊”,有“古建艺术宝库”美称 [1]  。

2020年上半年,正定县财政收入为35.7亿元,同比增长5.8%;一般公共预算收入为26.9亿元,同比增长10.1%;固定资产投资为116.2亿元,同比增长11%;服务业增加值为100.3亿元,同比增长11%;规模以上高新技术产业增加值达5.9亿元,同比增长18%;社会消费品零售总额达40.8亿元,同比增长10%;外贸进出口总额达91亿元,同比增长366%;城乡居民人均可支配收入分别为18146元和10260元,同比增长8.2%和8.7% [5]  。

现在可以看到,在运行dfsForest期间,刚好要为每个u 值调用dfs(u)一次。因此,花在所有这些调用上的总时间是花在每次调用上的时间之和的大O,也就是O(\sum_u(1+m_u))。但是\sum_um_u就是图中弧的数量,也就是最多为m8因为每条弧都是都某一个节点发出的。节点数为n,所以\sum_u1就是n。由于nm,因此所有对dfs的调用花的总时间就是O(m)。

8其实,mu 的和刚好是m,除非节点数大于弧数。回想一下,m 是节点数与弧数间的较大者。

最后,必须考虑dfsForest花的时间。图9-31所示的该程序由各要迭代n次的两个循环组成。不难看出,除去对dfs的调用,循环体所花的时间是O(1),因此这些循环的开销都是O(n)。这一时间会被对dfs的调用所花的O(m)时间主导。因为我们已经弄清了dfs调用所花的时间,所以可以得到dfsForest,再加上其所有对dfs的调用,要花O(m)的时间。

9.6.5 有向图的后序遍历

一旦有了深度优先搜索树,就可以按后序为其节点编号。不过,还有一种在搜索期间进行编号的简单方法。只要把为节点u 加上编号当作dfs(u)完成前我们要做的最后一件事即可。然后,在节点的所有子节点被编号后,它自己就会被编上号,正好是按照后序编号的。

示例 9.21

图9-29所示的树,也就是我们对图9-26中的图进行深度优先搜索所建立的树,有着后序编号的节点标号。如果查看图9-28的过程,就会发现最先要返回的调用是dfs(c),而且节点c 会被编为1号。然后我们会访问d,接着是e,并从对e 的调用返回。因此,e 的编号是2。同样,我们会访问f 并从其返回,它会被编为3号。至此,已经完成了对d 的调用,它会得到4这个编号。这样就完成了对dfs(b)的调用,因此b 的编号就是5。最后,最开始对a 的调用返回,给了a 编号6。请注意,这一次序刚好就是我们以后序遍历该树会得到的。

我们可以对目前所编写的深度优先算法进行一些简单改动,从而为节点指定后序编号,这些改动如图9-33所总结。

      int k; /* 为已访问过的节点计数 */

      void dfs(NODE u, GRAPH G)
      {
          LIST p; /* 指向u的邻接表的单元 */
          NODE v; /* 由p指向的单元中存放的节点 */
 (1)      G[u].mark = VISITED;
 (2)      p = G[u].successors;
 (3)      while (p != NULL) {
 (4)          v = p->nodeName;
 (5)          if (G[v].mark == UNVISITED)
 (6)              dfs(v, G);
 (7)          p = p->next;
          }
 (8)      ++k;
 (9)      G[u].postorder = k;
      }

      void dfsForest(GRAPH G)
      {
          NODE u;(10)     k = 0;(11)      for (u = 0; u < MAX; u++)(12)          G[u].mark = UNVISITED;(13)      for (u = 0; u < MAX; u++)(14)          if (G[u].mark == UNVISITED)(15)              dfs(u, G);
      }复制代码

图 9-33 以后序为有向图的节点编号的例程

1. 在GRAPH类型中,需要为每个节点增加一个名为postorder的字段。对图G 而言,我们要将节点u 的后序编号放在G[u].postorder中。这一赋值是在图9-33的第(9)行完成的。

2. 我们使用全局变量k按后序为节点计数。这一变量是在dfsdfsForest的外部定义的。正如在图9-33中所见,我们在dfsForest的第(10)行将k 初始化为0,并刚好在赋值后序编号之前,在dfs中的第(8)行将k 递增1。

请注意,这样一来,当深度优先搜索森林中不止有一棵树时,第一棵树就会得到最低的编号,而紧接着的那棵树就会按顺序得到接下来的编号,以此类推。例如,在图9-32中,a 会得到后序编号6。

9.6.6 后序编号的特殊属性

横向弧不能从左向右说明了与后序编号和图的深度优先表示中4种弧相关的一些有趣而实用的信息。在图9-34a中,我们看到图的深度优先表示中有uv 和w 3个节点。节点v 和w 是u 的子孙,而且w 在v 的右侧。图9-34b展示了分别为这3个节点调用dfs各自的活动持续时间。

图 9-34 树中位置间的关系和调用的持续时间

我们可以得出一些观点。首先,对子孙节点(比如v)进行的对dfs的调用,只在对祖先节点(比如u)的调用期间的某个子时间区间内是活动的。特别要指出的是,对dfs(v)的调用会在对dfs(u)的调用之前终止。因此,只要v 是u 的真子孙,v 的后序编号肯定要比u 的后序编号小。

其次,如果w 在v 的右侧,那么对dfs(w)的调用必须等到对dfs(v)的调用终止后才会开始。因此,只要v 在w 的左侧,v 的后序编号就要比w 的后序编号小。虽然图9-34中没有表示出来,但即便v 和w 在深度优先搜索森林的不同树中,只要v 所在的树在w 所在的树的左侧,同样的结论也是成立的。

我们现在可以为每条弧uv 考虑u 和v 后序编号之间的关系了。

1. 如果uv 是树向弧或前向弧,那么v 是u 的子孙,所以v 按后序要先于u

2. 如果uv 是横向弧,那么我们知道v 在u 的左侧,因此按后序v 还是先于u

3. 如果uv 是后向弧而且uv,那么v 是u 的真祖先,因此按后序v 在u 之后。不过,对后向弧而言v=u 是有可能的,因为自环也是后向弧。因此,一般来说,对后向弧uv 而言,我们知道v 的后序编号是不会小于u 的后序编号的。

总之,我们看到,弧头部按后序是要先于尾部的,除非该弧是后向弧,在弧是后向弧的情况中,尾部按后序是不会在头部之后的。因此,只要找到那些尾部按后序不大于头部的弧,就可以认定它们是后向弧。我们在9.7节中将看到这一概念的若干应用。

9.6.7 习题

1. 为图9-5中的树(见9.2节的习题)给出两棵从节点a 出发的深度优先搜索树。给出从节点d 出现的深度优先搜索树。

2. * 不管从图9-5中的哪个节点开始,我们最后都只得到深度优先搜索森林中的一棵树。简要解释对这幅特定的图为什么一定是这种情况。

3. 对9.6节习题1中的各棵树,指出哪些弧是树向弧、前向弧、后向弧和横向弧。

4. 对9.6节习题1中的各棵树,给出节点的后序编号。

5. * 考虑含abc 这3个节点以及ab 和bc 这两条弧的图。为这幅图给出所有可能的深度优先搜索森林,为每棵树考虑所有可能的起始节点。每个森林的节点后序编号各是怎样的?

6. * 考虑把习题5的图一般化为具有a1a2、…、an 这n 个节点和a1a2a2a3、…、an-1an 这些弧。通过对n 的完全归纳证明,该图具有2n-1种不同的深度优先搜索森林。提示:记住对i ≥0有1+1+2+4+8+…+2i=2i+1是能帮上忙的。

7. * 假设从图G 开始,并为G 添加一个新节点x,它是原来的图G 中所有节点的前导。如果从节点x 开始对新图运行图9-31中的dfsForest,就只得到一棵树。如果接着将x 从该树中删除,就可以得到若干棵树。这些树与原图G 的深度优先搜索森林之间有什么联系?

8. ** 假设有一幅有向图G,我们已经通过图9-31所示的算法从这幅有向图的表示构建了深度优先生成森林F。现在将弧uv 添加到图G 中形成新图H,除了节点v 出现在节点u 相应邻接表中的某个位置,图H 的表示与图G 的表示如出一辙。如果现在对H 的这种表示运行图9-31所示的算法,在什么条件下会构建出相同的深度优先森林F?也就是说,H 的树向弧什么时候会刚好与G 的树向弧相同?


正定网站建设正定网络公司正定做网站、正定微信公众号开发、正定网站设计、正定小程序制作

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: http://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878