美文网首页
算法练习(96): 画出数组所对应的树(1.5.9)

算法练习(96): 画出数组所对应的树(1.5.9)

作者: kyson老师 | 来源:发表于2018-01-14 23:28 被阅读98次

本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本人新建了一个微信群(算法交流),想要加入的,请添加我的微信号:zhujinhui207407 谢谢。另外,本人的个人博客 http://www.kyson.cn 也在不停的更新中,欢迎一起讨论

算法(第4版)

知识点

  • union

题目

1.5.9 画出下面的 id[] 数组所对应的树。这可能是加权 quick-union 算法得到的结果吗?解释为什么不可能,或者给出能够得到该数组的一系列操作。


1.5.9 Draw the tree corresponding to the id[] array depicted at right. Can this be the result of running weighted quick-union? Explain why this is impossible or give a sequence of operations that results in this array.

分析

要解决这个问题,我们先看一下书中的这张图:


书中的这张图很直观的展示了树和数组之间的转化关系,也就是说要想找到数组对应的树,关键是要找到根节点(根节点的i值和id[i]是一致的)。找到根节点后再去找其他节点的值。
回到这题,我们也能很容易找到根节点,就是

i 1
id[i] 1

找到了根节点其他节点顺藤摸瓜即可。

第一步,找到根节点



第二步,找到1对应的0、3和6,即是1的子节点

i 0 3 6
id[i] 0 1 1

依次类推,我们就能得到树的图为:


乍一看,这个图满足 加权union-find的条件:每个节点的子节点都是“平衡”的,但回到书中,我们看一下这个定理:



就可以知道这个树的大小是10,深度为4,因为 lg10 < 4,所以并不满足“加权union-find算法构造的森林中的任意节点的深度最多为lgN”这个条件。因此这个表不可能是加权 quick-union 算法得到的结果。

答案

见分析

相关文章

  • 算法练习(96): 画出数组所对应的树(1.5.9)

    本系列博客习题来自《算法(第四版)》,算是本人的读书笔记,如果有人在读这本书的,欢迎大家多多交流。为了方便讨论,本...

  • ARTS-06月17日到06月23日

    算法练习 654号题目给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最...

  • vuejs-elementUI-treeTable

    1、树与数组转换对应的目录如下图所示: 1、树与数组转换 /* * @Author: zhr */ import...

  • 16道初级脚本算法,你要挑战一下吗?

    参考答案,对应的函数名练习这些,可以加深掌握数组字符串方法的应用后续继续更新一些算法题目,如果喜欢,给个star哦...

  • 排序算法

    计数排序 思想: 利用数组的索引,将对应的数组当做数组的索引,将所对应的元素赋给一个值,遍历这个数组取值 选择排序...

  • 二叉树算法练习

    二叉树算法题练习。1.为什么使用二叉树? 数组存储方式1)优点:可以通过下标进行访问2)缺点:检索某个值,或者插入...

  • 2021-02-18 假期刚过,面试你准备了HashMap吗

    程序的本质是数据结构和算法(执行逻辑)数组栈队列链表树散列表堆图 图解HashMap 数组 + 链表 + 红黑树 ...

  • 日常算法练习(二) Leetcode

    前言 这次算法练习是数组类型简单练习,以后LeetCode的练习会根据不同tags进行展开,先easy再到medi...

  • LeetCode 数组算法练习

    数组去重 只出现一次 交集 加一 移动零 两数之和

  • 堆排序

    堆排序也是一种很高效的算法,因其把数组当作二叉树来排序而得名。这个算法会根据以下信息,把数组当作二叉树来管理。 ...

网友评论

      本文标题:算法练习(96): 画出数组所对应的树(1.5.9)

      本文链接:https://www.haomeiwen.com/subject/fonloxtx.html