精华内容
下载资源
问答
  • 平衡二叉树的定义

    千次阅读 2019-05-09 21:07:29
    定义 平衡二叉树又称AVL树,它的插入语、删除、查找操作均可在O(log n)的时间内完成。 1. AVL树或者是一棵空树,或者是具有下列性质的非空二叉搜索树: (1) 任一结点的左、右子树均为...有了平衡因子的定义,AVL树“...

    定义

    平衡二叉树又称AVL树,它的插入语、删除、查找操作均可在O(log n)的时间内完成,平衡二叉树是建立在搜索二叉树基础上的平衡。
    1. AVL树或者是一棵空树,或者是具有下列性质的非空二叉搜索树:
    (1) 任一结点的左、右子树均为AVL树
    (2) 根结点左、右子树高度差绝对值不超过1
    2. 对于二叉树中任一结点T,其平衡因子(BF)定义为BF(T)=hl-hr,其中hl和hr分别为T的左、右子树的高度
    有了平衡因子的定义,AVL树“任一结点左右子树高度差的绝对值不超过1”这一性质可以表述为“一棵AVL树种任一结点的平衡因子只能在集合{-1,0,1}中取值”,这就是平衡的量化标准

    展开全文
  • 平衡什么?怎么理解白平衡

    万次阅读 2014-01-07 11:25:01
    首先要明白什么是平衡, 它指的是在图像处理的过程中, 对原本材质为白色的物体的图像进行色彩还原, 去除外部光源色温的影响, 使其在照片上也显示白色。 那色温是怎么理解的呢?这个概念其实有点绕, 它是...

    首先要明白什么是白平衡, 它指的是在图像处理的过程中, 对原本材质为白色的物体的图像进行色彩还原, 去除外部光源色温的影响, 使其在照片上也显示白色。


    那色温是怎么理解的呢?这个概念其实有点绕, 它是开尔文通过黑体(blackbody) 这一理想光源, 在不同温度下, 所发出光线的颜色特性来定义的。黑体是一个理想化的概念。它是这么一个物体, 能发光, 但会吸收掉任何来自外部的光线, 同时又会把吸收的所有能量以光的形式完全释放出来, 所以叫做黑体。黑体的温度单叫做开尔(K)。从 3300K 到 9300K 的温度变化情况下, 它发光的颜色分别是, 红色, 白色、蓝色。便于理解, 你可以这么想象, 火焰你肯定见过, 内焰温度较低, 外焰温度较高(蓝色), 内焰温度较低的地方是黄色的(暖色), 于是火焰最外面温度最高的地方反而会是蓝色的(冷色), 是不是有点反常识。而色温就是借助黑体的这个温度变化特性来量化色彩倾向的。色温数值低, 偏黄, 色温数值高, 偏蓝, 所谓的冷暖色调就是一种比较感性的叫法了。


    <3300K

    暖色


    3300~6000K

    白色


    >6000K

    冷色


    以下是几个常见场景的色温:


    烛光 1930K, 钨丝灯 2900K, 中午阳光 5600K, 蓝天 18000K


    讲白平衡是如何修正之前, 有两个很重要的理论需要知道:


    灰度世界理论:这个理论蛮有意思, 与其说是色彩学, 我觉得更像是统计学的范畴, 它认为任何一幅图像, 当有足够的色彩变化时, 其R, G, B分量均值会趋于平衡(即 RGB 三个数值相等, 也就是说应当是黑白灰类型的颜色)。这个理论在全局白平衡中得到广泛应用, 特点是能够利用更多的图像信息来做判断, 但在面对色彩较为单一的图像时就显得有些乏力了。


    全反射理论:一幅图像中亮度最大的点就是白点, 即假设在 YCbCr 空间中Y值最大的点为白色, 以此来校正整幅图像。特点是只考虑色彩最亮的那部分, 跟上面的灰度世界理论正好相反, 在处理色彩偏单调的图像时效果好些, 但面对颜色丰富的图片时, 因为最亮的点不一定是白色的, 可能会出现偏色的情况。


    这两个理论分别对应着两种色彩空间 RGB 和 YCbCr 调整白平衡的理论基础:判断一张图片白平衡是否准确, 如果不准确, 如何量化其偏离数值。


    白平衡就是一个纠正画面整体偏色的过程, 那为什么人眼不需要呢?其实在你看到一个东西的时候, 眼睛就已经对它进行了色彩修正。相机肯定没有人眼那么智能(至少现在没有), 概括的说, 它的自动白平衡算法就是设定一个范围, 如果拍摄照片的色彩平均值落在这个范围里面, 那就 OK, 说明无需修正。如果偏离出这个范围, 就需要调整参数, 并校正色彩数据直到其均值落入指定的范围内。这就是WB白平衡修正的过程。


    下面就来简单介绍几个白平衡算法大致原理, 但具体的增益计算和数学建模过程就不作赘述了, 这东西正常人看了都会头大的。


    1. 灰度世界算法(Gray World Assumption)

    这个算法原理很简单, 就是根据前面所说的灰度世界理论, 将原始图像的RGB均值分别调整到R=G=B即可。不完美的地方就是这个算法对颜色不丰富的图像敏感程度一般, 处理起来效果也就不会很理想, 局限性较大。


    2. 标准差加权灰度世界算法(Standard DeviationWeighted Gray World Assumption)

    标准差加权灰度世界算法是针对上一个算法的改进, 它的原理是把图像等分成几块, 然后对每个块利用统计学进行分析, 看里面颜色的丰富程度, 颜色多的就加权, 颜色少得就减少权重, 最后求和得出一个均值。根据这个相对精确的数值来进行RGB数值的修正。


    3. 全反射算法(Perfect Reflector Assumpution)

    这个是基于前面介绍的全反射理论生成的算法, 理解起来也不难, 它认为中最亮的那个点就一定是白色的, 如果原始图像中最亮的那个点不是, 那就针对偏离白色的数值进行逆向修正。缺点就是如果图像色彩复杂或者就是没有高光点, 它的修正效果就会比较乏力。


    上面三个算法比较简单, 运算量不大, 但各有优缺点, 也就进一步衍生出了更加有效但是却要复杂的多一些混合算法, 例如:亮度加权灰度世界算法与全反射算法的正交组合算法(QuadraticCombining Luminance Weighted Gray World & Prefect Reflector Assumption)。看这么长的名字就知道, 这个算法很复杂, 白平衡修正效果也是蛮不错的, 而且它本身是收敛的, 在对图像处理的时候不会带来太多损失, 但可惜运算量巨大, 对硬件资源的要求过高。


    算法方面挺枯燥的, 非理工科对数学没兴趣的也可以直接略过, 大体知道这么回事儿就行。但我可以给出的结论是:最终效果越好的算法, 其复杂程度就越高, 运算量就越大, 对硬件电路的要求也高。具体的实现还需要在白平衡校正能力, 算法执行效率, 处理器硬件性能三个方面进行权衡。


    而通过上面的了解你就会发现, 如果ISP图像处理器的性能够高, 白平衡算法施展的空间就会大了很多。某些时候白平衡不准确, 一定程度上确实是与ISP性能跟不上有关, 当然, 这里也要看各家厂商在算法优化方面的功底。一般来说同一代各个品牌的旗舰处理性能差别不会特别大, 虽然软件方面下的功夫不容易看到, 但重要性确实毋庸置疑的, 能否把硬件整体性能充分发挥出来才是关键。


    举例来说, 在单反刚刚数码化的那个年代, 相机的图像处理器性能比较低下, 难以承受高运算强度的白平衡算法的蹂躏, 于是很多单反相机(如佳能1D, 尼康D2, 奥林巴斯E-1等) 机身上是有一个白平衡感应装置的(就是机身正面的那个小白点), 这个可以辅助提高白平衡准确度。到后来随着相机图像处理器的性能飙升, 大概是从富士通给尼康代工的Expeed一代处理器开始, 就取消了外置白平衡感应器这个装置。通过越来越多的RGB测光分区数, 配合越发强大的处理器来进行更加准确的色温修正。这里多说两句, 分区越多, 白平衡采样处理就越准确, 但同时也会带来计算量上面的飙升, 从最初的只有几个分区, 到 D800 上面用的 9.1 万像素 RGB 感应器, 在同时完成测光和白平衡计算的同时, 甚至还能够余出力气进行人脸识别, 背后那块改用了 ARM 架构 Expeed 3 才是最大的功臣。而像 DC 啊, 手机摄像头啊这类连续取景的相机, 则是用前一帧图像的处理结果应用到后面的图像上去的, 实现方式同单反上面那个单独的测光感应器还不太一样的。这是产品本身结构差异性导致的。


    下图这组图片中就是在设置不同的白平衡下拍摄的:



    出处:www.zealer.com 李侃 http://www.zealer.com/question/4

    展开全文
  •  国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。 完全二叉树 完全二叉树是一种...

    满二叉树

      除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。

      国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

                                          

     

    完全二叉树

    完全二叉树是一种特殊的二叉树,满足以下要求:

    1. 所有叶子节点都出现在 k 或者 k-1 层,而且从 1 到 k-1 层必须达到最大节点数;

    2. 第 k 层可以不是满的,但是第 k 层的所有节点必须集中在最左边。 
      需要注意的是不要把完全二叉树和“满二叉树”搞混了,完全二叉树不要求所有树都有左右子树,但它要求:

    3. 任何一个节点不能只有左子树没有右子树

    4. 叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

                               

     

    二叉查找树

    二叉查找树(又叫二叉排序树),它是具有下列性质的二叉树:

    1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

    2. 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

    3. 左、右子树也分别为二叉排序树。

    二叉查找树中,左子树都比节点小,右子树都比节点大,递归定义

    根据二叉排序树这个特点我们可以知道:二叉排序树的中序遍历一定是从小到大的

     

    平衡二叉树

    平衡二叉树的提出就是为了保证树不至于太倾斜,尽量保证两边平衡。因此它的定义如下:

    1. 平衡二叉树要么是一棵空树

    2. 要么保证左右子树的高度之差不大于 1

    3. 子树也必须是一颗平衡二叉树

     

     

    展开全文
  • 详解什么是平衡二叉树

    千次阅读 2019-02-02 12:41:28
    详解什么是平衡二叉树(AVL)(修订补充版) 前言 Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在...

    详解什么是平衡二叉树(AVL)(修订补充版)
    前言
    Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 O(logn)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An algorithm for the organization of information》中公开了这一数据结构。

    1 为什么要有平衡二叉树
    二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序时,例如序列 A = {1,2,3,4,5,6},构造二叉搜索树如图 1.1。依据此序列构造的二叉搜索树为右斜树,同时二叉树退化成单链表,搜索效率降低为 O(n)。

    图 1.1图 1.1

    在此二叉搜索树中查找元素 6 需要查找 6 次。

    二叉搜索树的查找效率取决于树的高度,因此保持树的高度最小,即可保证树的查找效率。同样的序列 A,将其改为图 1.2 的方式存储,查找元素 6 时只需比较 3 次,查找效率提升一倍。

    图 1.2图 1.2

    可以看出当节点数目一定,保持树的左右两端保持平衡,树的查找效率最高。

    这种左右子树的高度相差不超过 1 的树为平衡二叉树。

    1. 定义
      平衡二叉查找树:简称平衡二叉树。由前苏联的数学家 Adelse-Velskil 和 Landis 在 1962 年提出的高度平衡的二叉树,根据科学家的英文名也称为 AVL 树。它具有如下几个性质:

    可以是空树。
    假如不是空树,任何一个节点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1。
    平衡之意,如天平,即两边的分量大约相同。

    例如图 2.1 不是平衡二叉树,因为节点 60 的左子树不是平衡二叉树。

    图 2.1图 2.1

    图 2.2 也不是平衡二叉树,因为虽然任何一个节点的左子树与右子树都是平衡二叉树,但高度之差已经超过 1 。

    图 2.2图 2.2

    图 2.3 是平衡二叉树。

    图 2.3图 2.3

    1. 平衡因子
      定义:某节点的左子树与右子树的高度(深度)差即为该节点的平衡因子(BF,Balance Factor),平衡二叉树中不存在平衡因子大于 1 的节点。在一棵平衡二叉树中,节点的平衡因子只能取 0 、1 或者 -1 ,分别对应着左右子树等高,左子树比较高,右子树比较高。

    图 3.1图 3.1 图 3.2图 3.2 图 3.3图 3.3

    1. 节点结构
      定义平衡二叉树的节点结构:

    typedef struct AVLNode *Tree;

    typedef int ElementType;

    struct AVLNode{

    int depth; //深度,这里计算每个节点的深度,通过深度的比较可得出是否平衡
    
    Tree parent; //该节点的父节点
    
    ElementType val; //节点值
    
    Tree lchild;
    
    Tree rchild;
    
    AVLNode(int val=0) {
        parent = NULL;
        depth = 0;
        lchild = rchild = NULL;
        this->val=val;
    }
    

    };
    5. AVL树插入时的失衡与调整
    图 5.1 是一颗平衡二叉树

    图 5.1 图 5.1

    在此平衡二叉树插入节点 99 ,树结构变为:

    动图 5.2动图 5.2

    在动图 5.2 中,节点 66 的左子树高度为 1,右子树高度为 3,此时平衡因子为 -2,树失去平衡。

    在动图 5.2 中,以节点 66 为父节点的那颗树就称为 最小失衡子树。

    最小失衡子树:在新插入的节点向上查找,以第一个平衡因子的绝对值超过 1 的节点为根的子树称为最小不平衡子树。也就是说,一棵失衡的树,是有可能有多棵子树同时失衡的。而这个时候,我们只要调整最小的不平衡子树,就能够将不平衡的树调整为平衡的树。

    平衡二叉树的失衡调整主要是通过旋转最小失衡子树来实现的。根据旋转的方向有两种处理方式,左旋 与 右旋 。

    旋转的目的就是减少高度,通过降低整棵树的高度来平衡。哪边的树高,就把那边的树向上旋转。

    5.1 左旋
    图 5.1.1图 5.1.1

    以图 5.1.1 为例,加入新节点 99 后, 节点 66 的左子树高度为 1,右子树高度为 3,此时平衡因子为 -2。为保证树的平衡,此时需要对节点 66 做出旋转,因为右子树高度高于左子树,对节点进行左旋操作,流程如下:

    (1)节点的右孩子替代此节点位置
    (2)右孩子的左子树变为该节点的右子树
    (3)节点本身变为右孩子的左子树

    整个操作流程如动图 5.1.2 所示。

    动图 5.1.2动图 5.1.2

    节点的右孩子替代此节点位置 —— 节点 66 的右孩子是节点 77 ,将节点 77 代替节点 66 的位置
    右孩子的左子树变为该节点的右子树 —— 节点 77 的左子树为节点 75,将节点 75 挪到节点 66 的右子树位置
    节点本身变为右孩子的左子树 —— 节点 66 变为了节点 77 的左子树
    5.2 右旋
    右旋操作与左旋类似,操作流程为:

    (1)节点的左孩子代表此节点
    (2)节点的左孩子的右子树变为节点的左子树
    (3)将此节点作为左孩子节点的右子树。

    动图 5.2.1动图 5.2.1

    1. AVL树的四种插入节点方式
      假设一颗 AVL 树的某个节点为 A,有四种操作会使 A 的左右子树高度差大于 1,从而破坏了原有 AVL 树的平衡性。平衡二叉树插入节点的情况分为以下四种:

    图 6.0图 6.0

    具体分析如下:

    6.1 A的左孩子的左子树插入节点(LL)
    只需要执行一次右旋即可。

    动图 6.1动图 6.1

    实现代码如下:

    //LL型调整函数
    //返回:新父节点
    Tree LL_rotate(Tree node){
    //node为离操作节点最近的失衡的节点
    Tree parent=NULL,son;
    //获取失衡节点的父节点
    parent=node->parent;
    //获取失衡节点的左孩子
    son=node->lchild;
    //设置son节点右孩子的父指针
    if (son->rchild!=NULL) son->rchild->parent=node;
    //失衡节点的左孩子变更为son的右孩子
    node->lchild=son->rchild;
    //更新失衡节点的高度信息
    update_depth(node);
    //失衡节点变成son的右孩子
    son->rchild=node;
    //设置son的父节点为原失衡节点的父节点
    son->parent=parent;
    //如果失衡节点不是根节点,则开始更新父节点
    if (parent!=NULL){
    //如果父节点的左孩子是失衡节点,指向现在更新后的新孩子son
    if (parent->lchild==node){
    parent->lchild=son;
    }else{
    //父节点的右孩子是失衡节点
    parent->rchild=son;
    }
    }
    //设置失衡节点的父亲
    node->parent=son;
    //更新son节点的高度信息
    update_depth(son);
    return son;

    展开全文
  • 软件定义网络中的多控制器负载平衡方法
  • 详解什么是平衡二叉树(AVL)

    万次阅读 2019-05-04 14:54:36
    Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是 O(logn)。增加...
  • 本文从平衡态概念的本质出发,分析并讨论了现行教材中的几种常见的定义和有关的问题。
  • 在高密度软件定义的WiFi网络中实现负载平衡
  • 平衡二叉树

    万次阅读 多人点赞 2018-08-15 17:12:47
    一、AVL树简介 AVL树的名字来源于它的发明作者G.M....平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子...
  • 适用于软件定义的企业WLAN的自适应负载平衡应用程序
  • 红黑树和AVL树(平衡二叉树)的定义、特点以及两者的区别定义性质区别 定义 AVL树:平衡二叉树又称AVL树,是一种特殊的二叉查找树,其左右子数都是平衡二叉树,且左右子树高度差的绝对值不超过1.一句话表述为:以树...
  • 定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树: (1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的 值; (2)若任意节点的右子树不空,则右子树上所有结点的值均大于它的...
  • 数据不平衡又称样本比例失衡,比如二分类问题,如果标签为1的样本占总数的99%,标签为0的样本占比1%则会导致判断「失误严重」,准确率虚高。 常见的解决不平衡问题的方法如下。 「数据采样」 数据采样分为上采样...
  • 一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两 个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2...
  • 数据结构 - 平衡二叉树(C++)

    万次阅读 多人点赞 2019-02-22 15:36:53
    平衡二叉树的定义 平衡二叉树(Balanced Binary Tree)是具有以下性质的二叉树:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 判断一棵二叉树是否平衡(C++) ...
  • 软件定义网络中的负载平衡 该存储库是使用几种算法在软件定义的网络体系结构上实现负载平衡的结果,其中包括: 基于代理(核心/算法/agenbased.py) 基于流(核心/算法/flowbased.py) 循环(core / algorithm / ...
  • 在理论力学静力学中,外力的主矢和主矩为零,是任意力系平衡...同时在大多数理论力学教材开篇就有平衡定义,这之间又有矛盾。根据这些矛盾性,指出了其矛盾所在,并初步提出了解决此矛盾的方法,以期引起大家的重视与讨论。
  • 平衡二叉树:或者是一棵空树,或是具有下列性质的二叉树:它的左子树和右子数都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1 结点的平衡因子BF:该结点的左子树的...什么时候需要单旋转,而什么时候...
  • SDNPS:软件定义网络中基于负载平衡的基于主题的发布/订阅系统
  • 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 2.代码展示 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode ...
  • 平衡

    万次阅读 2017-03-23 20:59:30
    平衡数的定义:将一个数分成左右两部分,分别成为2个新数。左右不分必须满足: 1、左边和右边至少存在一位 2、左边数的每一位相乘如果等于右边数每一位相乘 则这个数称为平衡数。 如:1221这个数,分成12和21,1...
  • 几分钟明白什么平衡二叉树

    千次阅读 2017-11-12 09:50:29
    平衡二叉树先看看上图我们将同样的数据形成二叉树,但是二叉树的高度是不同的。 我们都知道二叉树的高度不同那么查找元素的平均时间是不同的。平均查找时间是怎么计算的,我们是把每个节点查找的次数加起来除全部...
  • 下午看到一个问题,是关于求解列表中的平衡点的,感觉挺有意思的,说实在的,最开始看的时候没看明白是什么意思,以至于自己的思路陷进去很深走不出来,后来看了一下给出来的代码实现明白了,是怎么回事。...
  • 集团,公司,公司代码的定义 理解借贷平衡
  • 红黑树和平衡二叉树有什么区别?

    千次阅读 2020-09-08 23:11:09
    什么是二叉树? 二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在分支大于 2 的节点,二叉树的数据结构如下图所示 这是一棵拥有 6 个节点深度为 2(深度从 0 开始),并且根节点为 3 的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 258,514
精华内容 103,405
关键字:

平衡的定义是什么