数据结构算法与应用关于二叉树在信号放大器放置的应用
二叉树应用
信号放大器
定义:
DegereeFromParent( i ):节点 i 的父辈到节点i的衰减量
DegereeToLeaf( i ): 如果路径上没有信号放大器:节点 i 到它的最年轻后辈的衰减量的累计 如果路径上有信号放大器:max{有放大器路径的DegreeFromParent(j),没放大器路径的DegreeFromParent(j)+DegreeToLeaf(j)}
放大器:在某一节点 i 放置放大器后,清空该节点的前边的衰减累计(但是到达 i 节点的衰减累计不变,i 节点信号源是被放大的,即是保真的)
最小放置方法:
计算每一个节点的DegreeToLeaf(i)
从最底层的节点开始考虑
如果没有超过容忍度的则往上一层走 当到某一层,遇到了 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}的元素个数是相等的
即,本算法可以保证数量放置最少,即为最优解。
数据结构算法与应用关于二叉树在信号放大器放置的应用相关推荐
- 43. 盘点那些必问的数据结构算法题之二叉树基础
盘点那些必问的数据结构算法题之二叉树基础 0 概述 1 定义 2 基本操作 1) 创建结点 2) BST 插入结点 3) BST 删除结点 4) BST 查找结点 5)BST 最小值结点和最大值结点 ...
- 《数据结构与算法》——树与二叉树之遍历总结
<数据结构与算法>--树与二叉树之遍历总结 树与二叉树部分计划分为三次进行复习总结,第一次为基本概念和二叉树的遍历,第二次内容为线索二叉树以及树和森林,第三次为树与二叉树的应用. 目录 & ...
- 【数据结构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 ...
- LeetCode 【数据结构与算法专栏】【二叉树】
刷题笔记 二叉树算法专栏 leetcode 814. 二叉树剪枝 leetcode上二叉树的建树测试代码 leetcode 94 二叉树的中序遍历 leetcode 144 二叉树的前序遍历 leet ...
- 数据结构算法集---C++语言实现
/// // // // 堆栈数据结构 stack.h // // // /// #include<iostream.h> template<class Type>class ...
- 微软等数据结构+算法面试100题全部答案集锦
微软等数据结构+算法面试100题全部答案集锦 作者:July.阿财. 时间:二零一一年十月十三日. 引言 无私分享造就开源的辉煌. 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年.在一周年 ...
- [整理I]精选微软等公司数据结构+算法面试100题 [第1-40题]
精选微软等公司,数据结构+算法,经典面试100题 --------之前40题 --------------- ------- ...
- 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录
文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...
- [整理III]微软等数据结构+算法面试100题[最新第61-80题]
精选微软等数据结构+算法面试100题[第61-80题] --最新整理公布 昨日,11.19,最新整理了,第61-80题,现在公布. 可以这么说,绝大部分的面试题,都是这100道题系列的翻版, 此微软等 ...
最新文章
- 将jsp页面转pdf
- Windows下Nginx+Tomcat整合的安装与配置
- Android APK方式换肤实现原理
- java在所选路径中找到分号,classpath
- BCB 多线程的同步与协调
- Apache多站点配置详解
- django 项目中遇到的问题(持续更新中)
- zabbix详解(六)——zabbix 添加监控主机
- 大一计算机word排版试题,Word排版练习题
- Slat撒盐加密原理
- hive查看一张表的分区字段_在Hive中对表进行分区和存储有什么区别?
- reduce具体使用以及使用reduce,toString,flat进行数组降维
- Ubuntu 20.04安装绿联PL2303串口驱动
- VOL vs. VLK by Plod
- 云平台的云计算安全参数详解
- storm DRPC例子
- Hadoop 3.2.1 【 YARN 】源码分析 : DefaultContainerExecutor 浅析
- 科技云报道荣膺全球云计算大会“云鼎奖”2013-2022十周年特别贡献奖
- ICIP2021:VVC RPR参考结构改进
- H264 AVCC 格式转 ANNEX B格式