当前位置: 网站首页>小程序开发>网站优化

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

发表日期: 2021-04-14 15:18:30 浏览次数:98

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

河北省张家口市张北县地处河北省西北部,内蒙古高原南缘的坝上地区,境域东西109公里,南北67公里,东南部与崇礼区交界,桦皮岭为全县最高点,海拔2128米;北、中部地势平坦,向西北渐低,安固里淖为最低点,海拔1300米。全县总面积4185平方公里,辖18个乡镇、366个行政村、1167个自然村,总人口37.2万人。居民以汉族为主,占总人口的98%,还有蒙古族、回族、满族等。张北县是离京津地区最近的高原地区,夏天气候凉爽是避暑胜地。

张北县被列为第一批国家新型城镇化综合试点地区。 [1]  2019年11月,入选第二批节水型社会建设达标县(区)名单。 [2]  2020年2月29日,退出贫困县序列,正式脱贫“摘帽”。 [3]  2020年12月,入选河北省数字乡村试点地区名单。

5.7.5 习题

1. 假设使用最左子节点右兄弟节点表示法实现二叉查找树。重新编写适用于这一数据结构的实现了插入删除查找这些词典操作的函数。

2. 如果按顺序插入单词:DocDopeyInkyBlinkyPinkySue,会使图5-33中的二叉查找树变成什么样?然后,依次删除DocSleazyHairy后又会怎样?

3. 用对字符串的词典比较代替对整数的算术比较,重新编写lookupinsertdelete函数。

4. * 重新编写insert函数,使得树参数可以按引用传递。

5. * 在本节中,我们曾以“按引用调用”的方式编写过delete函数。不过,也可以用编写insert函数的风格编写该函数,即接受树作为参数,而不是接受指向树的指针作为参数。编写这一版本的delete操作。注意:让deletemin返回修改过的树并非真正可能,因为它还必须返回最小的元素。我们可以重新编写deletemin,使其返回同时具有新树和最小元素的结构体。

6. 要删除带有两个子节点的节点,除了通过在右子树中找到最小元素,还可以在左子树中找到最大的元素,并用它替代删除的元素。重新编写来自图5-38和图5-40的deletedeletemin函数,从而融入这种修改。

7. * 在需要删除某个具有父节点p、(非空的)左子节点l 和(非空的)右子节点r 的节点n 处的元素时,另一种处理删除操作的方式是,找出n 的右子树中存放最小元素的节点m。接着,让r 代替n 成为p 的左子节点或右子节点,并让l 成为m 的左子节点。请注意,m 之前不能有左子节点。证明这一系列改变为何会保留二叉查找树属性。大家是否愿意选择这一策略替代5.7节中描述过的那种?提示:对这两种方式而言,考虑它们对路径长度的影响。正如我们将在5.8节中看到的,短路径会让操作运行得更迅速。

8. * 在本习题中,考虑图5-39所示的二叉查找树。通过对i 的归纳证明,如果1≤ik,那么yzi 。然后,证明y 是以zk 为根节点的树中最小的元素。

9. 编写完整的C语言程序,实现存储整数的词典。接受形为xi 的命令,其中x是字母i(插入)、d(删除)和l(查找)中的一个。整数i 是该命令的参数,就是有待插入、删除或查找的整数。

5.8 二叉查找树操作的效率

二叉查找树提供了一种相当快速的词典实现。首先请注意,插入删除查找操作各会进行若干次递归调用,调用次数等于所经过的路径的长度。但该路径必须包含达到右子树最小元素的路线,以防deletemin被调用。对lookupinsertdeletedeletemin函数进行简单的分析,可知各操作都花费O(1)的时间,而且要加上一次递归调用的时间。此外,因为该递归调用总是在当前节点的子节点处进行的,所以每次成功调用中节点的高度至少要减少1。

因此,如果以指向某个高度为h 的节点的指针调用这些函数所花的时间为T(h),就有以下递推关系来为T(h)确定上界。

依据T(0)=O(1)。也就是说,在对叶子节点调用函数时,该调用要么终止,不再有进一步的调用,要么以NULL参数进行一次递归调用,接着会返回而不再继续调用。这些工作所花时间为O(1)。

归纳。对h≥1,T(h)≤T(h-1)+O(1)。也就是说,对任何内部节点调用函数所花的时间,都等于O(1)加上对高度至多为h-1的节点进行一次递归调用所花的时间。如果作出T(h)会随着h 的增加而增加这一合理假设,那么该递归调用的时间不会大于T(h-1)。

该递推关系的解是O(h),正如3.9节中讨论过的那样。因此,对具有n 个节点的二叉查找树执行词典操作的运行时间至多与该树的高度成比例。不过具有n 个节点的二叉查找树通常高度为多少呢?

5.8.1 最坏情况

在最坏的情况下,二叉树的所有节点都排列在一条路径上,就像图5-42所示的树那样。例如,取一列有序的k个元素,将这些元素一个个地依次插入一棵空树,就可以形成这样的树。也有不全由右子节点组成,而是由左右子节点混合组成的单路径树,其路径上的内部节点既可能是左子节点也可能是右子节点。

图 5-42 退化的二叉树

像图5-42这样具有k 个节点的树的高度显然为k-1。因此可以预见,如果具有k 个元素的词典的表示不幸是这些树中的一种,那么查找插入删除操作所花时间都会是O(k)。从直觉上讲,如果需要查找某个元素x,平均需要走过一半路径才会找到它,需要查看k/2个节点。如果这还没有找到x,就需要继续向下搜索该树,直到到达x所在的位置为止,平均也要走过该路线的一半。因为查找插入删除操作都涉及元素的查找,所以可知,在给定图5-42所示树的最坏情况下,这些操作平均要花的时间都是O(k)。

5.8.2 最佳情况

不过,二叉树不一定非得像图5-42这样又高又瘦,它也可以是图5-43这种分枝丛生的低矮样式。而后者这样的树,每个内部节点向下到某层的两个子节点都存在,而且下一层的所有叶子节点也都存在,这样的结构叫作完全树或完整树。

图 5-43 有7个节点的完全二叉树

高度为h 的完全二叉树共有2h+1-1个节点。我们可以通过对高度h 的归纳证明这一声明。

依据。如果h=0,那么该树由一个节点组成。因为20+1-1=1,所以依据情况成立。

归纳。假设高度为h 的完全二叉树有nh+1-1个节点,并考虑高度为h+1的完全二叉树。该树有一个根节点,并由两棵高度为h 的完全二叉树分别作为其左右子树。例如,图5-43中高度为2的完全二叉树包含根节点n1,由n2n4n53个节点构成的左子树(高度为1的完全二叉树),以及由其余3个节点构成的右子树(另一棵高度为1的完全二叉树)。根据归纳假设,两棵高度为h 的完全二叉树共有2(2h+1-1)个节点。在加上根节点后,可知高度为h+1的完全二叉树共有2(2h+1-1)+1=2h+2-1个节点,这就证明了归纳步骤。

现在可以将这一关系反转,说一棵具有k=2h+1-1个节点的完全二叉树高度为h。这样一来,k+1=2h+1。两边取对数,就有log2(k+1)=h+1,或者大致可以说h 是O(logk )。因为查找插入删除的运行时间都与树的高度成比例,所以这些操作所花的时间是节点数的对数。这样的性能要比图5-42所示最糟情况所花的线性时间强多了。随着词典的大小越来越大,词典操作运行时间的增长要比集合中元素的增长慢得多。


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

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

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

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

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

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

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

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

预约专家

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

  

服务热线:400-111-6878