二叉树应用

信号放大器

定义:

  1. DegereeFromParent( i ):节点 i 的父辈到节点i的衰减量

  2. DegereeToLeaf( i ): 如果路径上没有信号放大器:节点 i 到它的最年轻后辈的衰减量的累计 如果路径上有信号放大器:max{有放大器路径的DegreeFromParent(j),没放大器路径的DegreeFromParent(j)+DegreeToLeaf(j)}

  3. 放大器:在某一节点 i 放置放大器后,清空该节点的前边的衰减累计(但是到达 i 节点的衰减累计不变,i 节点信号源是被放大的,即是保真的

最小放置方法:

  1. 计算每一个节点的DegreeToLeaf(i)

  2. 从最底层的节点开始考虑

    如果没有超过容忍度的则往上一层走
    当到某一层,遇到了 i 节点:DegreeToLeaf(i)>Tolerate是左孩子(j1)路,还是右孩子(j2)路出问题:DegreeToLeaf(j)+DegreeFromParent(j)>Tolerate对出问题的路将该孩子节点处放信号放大器更新 i 节点的DegreeToLeaf(i)=max{(DegreeToLeaf( j' )+DegreeFromParent( j' ) ),DegreeFromParent( j ) }
    

为什么在那个地方放信号放大器?

证明:由于是从最底层开始考虑的,那么在考虑到 i 节点的时候,i节点下面的子树的DegreeToLeaf(j)肯定不超过容忍度,出问题的原因在于DegreeFromParent(j)+DegreeToLeaf(j)的和大了。那么为了解决以i为根的生成树的容忍度问题,只能从j处放信号放大器原因:显然,在i处或i的父辈放信号放大器没用,因为DegreeToLeaf(i)只和下层有关;在j的孩子放信号放大器也不行,因为底层已经考虑过,是不会超容忍度的。则只能在j放放大器。

怎么在放了放大器之后更新DegreeToLeaf( i )?

答:DegreeToLeaf(i)=max{(DegreeToLeaf( j' )+DegreeFromParent( j' ) ),DegreeFromParent( j ) }看着很复杂,其实很简单考虑完某一个孩子路之后,在该孩子处如果放置了信号放大器,则比较(该孩子,父辈)线段衰减量与另一条路的衰减量累计的大小,取较大值原因:另一条路的大小作为候选值不再解释放置信号放大器那一条路,现在考虑从i节点的父辈向叶子流,流到信号放大器节点的累积量是才有用的,继续往下的话是已经重新计数了,没有意义。所以考虑的时候只需要计算(该孩子,父辈)的线段衰减量作为候选值。

为什么这样放信号放大器个数是最少的?

首先说明,这种算法放信号放大器是个数最少的,但是并不是说对于这棵树只能通过这种放法来解决,即可能不止有一种最优解,但是这些最优解的放置信号放大器的个数是相等的。下面对该算法进行证明。
假设序列{X}代表本算法放置放大器的集合,序列{W}代表最优解放置放大器的集合
当放置个数为0时,显然是相等的,下面考虑一般情况
令,节点z为本算法第一个放置放大器的节点位置,则按照本算法的放置要求,必然是DegreeToLeaf(z)+DegreeFromParent(z)超过了容忍度。那么在最优解中,这条路径上也必然要放信号放大器,并且有且仅有一个设为u节点(因为本算法已经是只放了1个,已经可以满足题意了)
现在保留节点z,减去以z为根的子树,生成了一个新树T
对于T,本算法放置放大器集合为:{X}-{z}
对于T,最优解算法放置放大器集合为:{W}-{u}
不断重复上述过程,直到生成树中不再需要放放大器。
发现,对于两种算法,结果树是一样的,每一次删除子树,放大器集合的个数都同时减1,则原序列{X}和{Y}的元素个数是相等的
即,本算法可以保证数量放置最少,即为最优解。

数据结构算法与应用关于二叉树在信号放大器放置的应用相关推荐

  1. 43. 盘点那些必问的数据结构算法题之二叉树基础

    盘点那些必问的数据结构算法题之二叉树基础 0 概述 1 定义 2 基本操作 1) 创建结点 2) BST 插入结点 3) BST 删除结点 4) BST 查找结点 5)BST 最小值结点和最大值结点 ...

  2. 《数据结构与算法》——树与二叉树之遍历总结

    <数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...

  3. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

    文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...

  4. LeetCode 【数据结构与算法专栏】【二叉树】

    刷题笔记 二叉树算法专栏 leetcode 814. 二叉树剪枝 leetcode上二叉树的建树测试代码 leetcode 94 二叉树的中序遍历 leetcode 144 二叉树的前序遍历 leet ...

  5. 数据结构算法集---C++语言实现

    /// // // // 堆栈数据结构 stack.h // // // /// #include<iostream.h> template<class Type>class ...

  6. 微软等数据结构+算法面试100题全部答案集锦

    微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...

  7. [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]

    精选微软等公司,数据结构+算法,经典面试100题                                       --------之前40题 --------------- ------- ...

  8. 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...

  9. [整理III]微软等数据结构+算法面试100题[最新第61-80题]

    精选微软等数据结构+算法面试100题[第61-80题] --最新整理公布 昨日,11.19,最新整理了,第61-80题,现在公布. 可以这么说,绝大部分的面试题,都是这100道题系列的翻版, 此微软等 ...

最新文章

  1. 将jsp页面转pdf
  2. Windows下Nginx+Tomcat整合的安装与配置
  3. Android APK方式换肤实现原理
  4. java在所选路径中找到分号,classpath
  5. BCB 多线程的同步与协调
  6. Apache多站点配置详解
  7. django 项目中遇到的问题(持续更新中)
  8. zabbix详解(六)——zabbix 添加监控主机
  9. 大一计算机word排版试题,Word排版练习题
  10. Slat撒盐加密原理
  11. hive查看一张表的分区字段_在Hive中对表进行分区和存储有什么区别?
  12. reduce具体使用以及使用reduce,toString,flat进行数组降维
  13. Ubuntu 20.04安装绿联PL2303串口驱动
  14. VOL vs. VLK by Plod
  15. 云平台的云计算安全参数详解
  16. storm DRPC例子
  17. Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
  18. 科技云报道荣膺全球云计算大会“云鼎奖”2013-2022十周年特别贡献奖
  19. ICIP2021:VVC RPR参考结构改进
  20. H264 AVCC 格式转 ANNEX B格式

热门文章

  1. 锐龙r7 4800h和i7 10750h参数对比 打游戏哪个好
  2. 歌 特 金 属 (Gothic Metal)
  3. 在linux终端显示cp命令复制文件时的速度
  4. QGIS课堂线下培训操作视频分享——使用QGIS制做疫情分布图
  5. 时间管理,没那么简单!!!
  6. html 文件 状态码,如何解决网站304状态码问题
  7. 如何处理因为支付成功后因延迟回调而订单被取消
  8. 模型检测原理、方法学习
  9. 致1024程序员节--多年前,我用代码赚到的第一桶金
  10. 弘辽科技:直通车推广计划能删除吗?删除会影响店铺宝贝权重吗?