昂科拉曼树澳门葡京官方网站

连带介绍:

 树形结构除了行使于查找和排序等操作时能调高效能,它在消息简报领域也存有广泛的施用。Rubicon曼(Huffman)树便是一种在编码技术上边获得广泛应用的二叉树,它同时也是一种最优二叉树。

有关介绍:

 树形结构除了运用于查找和排序等操作时能调高效能,它在新闻简报领域也有所广大的选拔。宝马X5曼(Huffman)树正是一种在编码技术方面取得广泛应用的二叉树,它同时也是一种最优二叉树。

PAJERO曼树相关的的基本概念:

 为了给出Escort曼树的概念,从以下多少个基本概念出发并进行描述。

  1. 节点间的门径和节点的门路长度:所谓节点间的路子是指3个节点到另四个节点所经历的节点和支行类别。节点的途径长度是指从根节点到该节点间的路径上的道岔数目。

  2. 节点的权和节点的带权路径:在其实使用中,人们往往会给树中的每一个节点赋予一个有所某种实际意义的数值,这么些数值称为节点的权值。节点的带权路径长度正是该节点的门道长度与该节点的权值的乘积。

  3. 树的带权路径长度:树的带权路径长度就是树中持有叶节点的带权路径长度之和,平常记为:\(WPL=\sum_{i=1}^{n}W_{i} \times
    L_{i}\)个中,n为叶节点的个数,\(W_{i}\)为第i个叶节点的权值,\(L_{i}\)为第i个叶节点的门路长度

  4. 最优二叉树:给定n个权值并作为n个叶节点按自然规则组织一棵二叉树,使得其带权路径长度达到最小值,则那棵二叉树被喻为最优二叉树。下图体现了拥有分化带权路径长度的二叉树,在那之中,第一棵树为最优二叉树

澳门葡京官方网站 1

中华V曼树相关的的基本概念:

 为了给出ENCORE曼树的定义,从以下多少个基本概念出发并拓展描述。

  1. 节点间的路子和节点的路子长度:所谓节点间的门径是指一个节点到另3个节点所经历的节点和支行类别。节点的门路长度是指从根节点到该节点间的门道上的分段数目。

  2. 节点的权和节点的带权路径:在实质上选取中,人们频仍会给树中的每三个节点赋予三个颇具某种实际意义的数值,那几个数值称为节点的权值。节点的带权路径长度正是该节点的不二法门长度与该节点的权值的乘积。

  3. 树的带权路径长度:树的带权路径长度正是树中全体叶节点的带权路径长度之和,平常记为:\(WPL=\sum_{i=1}^{n}W_{i} \times
    L_{i}\)个中,n为叶节点的个数,\(W_{i}\)为第i个叶节点的权值,\(L_{i}\)为第i个叶节点的路子长度

  4. 最优二叉树:给定n个权值并视作n个叶节点按一定规则组织一棵二叉树,使得其带权路径长度达到最小值,则那棵二叉树被称呼最优二叉树。下图展现了有着差异带权路径长度的二叉树,当中,第①棵树为最优二叉树

澳门葡京官方网站 2

RAV4曼树和Koleos曼编码的构造方法

 奔驰M级曼树的结构步骤如下所示:

 若是n个叶节点的权值分别为{w1,w2,…,wn},则

  1. 由已知给定的n个权值{w1,w2,w3,…,wn},构造三个由n棵二叉树所组成的林子F={T1,,T2,T3,…,Tn},其中每一棵二叉树只有一个根节点,并且根节点的权值分别为w1,w2,….,wn

  2. 在二叉树森林F中甄选根节点的权值最小和次小的两棵二叉树,分别把它们作为左子树和右子树去组织一棵新二叉树,新二叉树的根节点权值为其左、右子树根节点的权值之和

  3. 作为新二叉树的左右子树的两棵二叉树从森林F中剔除。将新发生的二叉树到场到森林F中

  4. 双重步骤2和步子3,直到森林中只剩余一棵二叉树停止,则这棵二叉树正是所结合的昂科威曼树

下图呈现了LX570曼树的布局进度:

澳门葡京官方网站 3

帕杰罗曼树和奥迪Q7曼编码的构造方法

 途胜曼树的布局步骤如下所示:

 假如n个叶节点的权值分别为{w1,w2,…,wn},则

  1. 由已知给定的n个权值{w1,w2,w3,…,wn},构造三个由n棵二叉树所组成的森林F={T1,,T2,T3,…,Tn},个中每一棵二叉树唯有多个根节点,并且根节点的权值分别为w1,w2,….,wn

  2. 在二叉树森林F中采纳根节点的权值最小和次小的两棵二叉树,分别把它们当做左子树和右子树去协会一棵新二叉树,新二叉树的根节点权值为其左、右子树根节点的权值之和

  3. 用作新二叉树的左右子树的两棵二叉树从森林F中除去。将新爆发的二叉树加入到山林F中

  4. 重复步骤2和步子3,直到森林中只剩余一棵二叉树停止,则那棵二叉树正是所结合的Enclave曼树

下图显示了景逸SUV曼树的构造进程:

澳门葡京官方网站 4

RAV4曼树构造进程的代码达成

 以下其代码演示了RAV4曼树的布局实现当中,测试代码所用的图如下所示:

澳门葡京官方网站 5

连带代码:

package all_in_tree;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

/**
 * 该类用于演示哈弗曼树的构造过程
 * @author 学徒
 *
 */
public class Huffman
{
    //哈弗曼树的根节点
    private HuffmanNode root;
    //一个优先级队列,确保每次取出的均为节点中其权值最小的节点
    private Queue<HuffmanNode> q;
    /**
     * 用于初始化,其优先队列
     */
    public Huffman()
    {
        Comparator<HuffmanNode> cmp=new Comparator<HuffmanNode>()
        {
                @Override
                public int compare(HuffmanNode obj1,HuffmanNode obj2)
                {
                    int obj1Number=obj1.weight;
                    int obj2Number=obj2.weight;
                    if(obj1Number>obj2Number)
                        return 1;
                    else if(obj1Number<obj2Number)
                        return -1;
                    else
                        return 0;
                }
        };
        q=new PriorityQueue<HuffmanNode>(11,cmp);
    }
    /**
     * 用于添加节点到优先队列中,进行哈弗曼树的构造
     * @param node
     */
    public void addHuffmanNode(HuffmanNode node)
    {
        q.add(node);
    }
    /**
     * 用于构造哈弗曼树
     */
    public HuffmanNode createHuffmanTree()
    {
        while(!q.isEmpty()&&q.size()>=2)
        {
            HuffmanNode node1=q.poll();
            HuffmanNode node2=q.poll();
            HuffmanNode newNode=new HuffmanNode();
            newNode.weight=node1.weight+node2.weight;
            newNode.left=node1;
            newNode.right=node2;
            q.add(newNode);
        }
        if(!q.isEmpty())
            this.root=q.poll();
        return this.root;
    }
    /**
     * 用于测试相关的代码
     */
    public static void main(String[] args)
    {
        Huffman tree=new Huffman();
        for(int i=0;i<5;i++)
        {
            tree.addHuffmanNode(new HuffmanNode((char)('A'+i),i+1));
        }
        HuffmanNode root=tree.createHuffmanTree();
        System.out.println("其最高顶点的权值"+root.weight);
        //对该哈弗曼树进行层次遍历
        Queue<HuffmanNode> q=new LinkedList<HuffmanNode>();
        q.add(root);
        while(!q.isEmpty())
        {
            HuffmanNode node=q.poll();
            System.out.print(node.weight+"\t");
            if(node.left!=null)
                q.add(node.left);
            if(node.right!=null)
                q.add(node.right);
        }
    }
}
/**
 * 用于创建哈弗曼树的节点类的描述
 * @author 学徒
 *
 */
class HuffmanNode
{
    //用于存放相关的数据
    Object data;
    //用于记录该节点的权
    int weight;
    //该节点的左孩子
    HuffmanNode left;
    //该节点的右孩子
    HuffmanNode right;
    public HuffmanNode()
    {
    }
    public HuffmanNode(Object data,int weight)
    {
        this.data=data;
        this.weight=weight;
    }
}

运行结果:

其最高顶点的权值15
15  6   9   3   3   4   5   1   2   

回去目录|·(工)·)

奥迪Q3曼树构造过程的代码实现

 以下其代码演示了Lacrosse曼树的结构达成个中,测试代码所用的图如下所示:

澳门葡京官方网站 6

连锁代码:

package all_in_tree;

import java.util.Comparator;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;

/**
 * 该类用于演示哈弗曼树的构造过程
 * @author 学徒
 *
 */
public class Huffman
{
    //哈弗曼树的根节点
    private HuffmanNode root;
    //一个优先级队列,确保每次取出的均为节点中其权值最小的节点
    private Queue<HuffmanNode> q;
    /**
     * 用于初始化,其优先队列
     */
    public Huffman()
    {
        Comparator<HuffmanNode> cmp=new Comparator<HuffmanNode>()
        {
                @Override
                public int compare(HuffmanNode obj1,HuffmanNode obj2)
                {
                    int obj1Number=obj1.weight;
                    int obj2Number=obj2.weight;
                    if(obj1Number>obj2Number)
                        return 1;
                    else if(obj1Number<obj2Number)
                        return -1;
                    else
                        return 0;
                }
        };
        q=new PriorityQueue<HuffmanNode>(11,cmp);
    }
    /**
     * 用于添加节点到优先队列中,进行哈弗曼树的构造
     * @param node
     */
    public void addHuffmanNode(HuffmanNode node)
    {
        q.add(node);
    }
    /**
     * 用于构造哈弗曼树
     */
    public HuffmanNode createHuffmanTree()
    {
        while(!q.isEmpty()&&q.size()>=2)
        {
            HuffmanNode node1=q.poll();
            HuffmanNode node2=q.poll();
            HuffmanNode newNode=new HuffmanNode();
            newNode.weight=node1.weight+node2.weight;
            newNode.left=node1;
            newNode.right=node2;
            q.add(newNode);
        }
        if(!q.isEmpty())
            this.root=q.poll();
        return this.root;
    }
    /**
     * 用于测试相关的代码
     */
    public static void main(String[] args)
    {
        Huffman tree=new Huffman();
        for(int i=0;i<5;i++)
        {
            tree.addHuffmanNode(new HuffmanNode((char)('A'+i),i+1));
        }
        HuffmanNode root=tree.createHuffmanTree();
        System.out.println("其最高顶点的权值"+root.weight);
        //对该哈弗曼树进行层次遍历
        Queue<HuffmanNode> q=new LinkedList<HuffmanNode>();
        q.add(root);
        while(!q.isEmpty())
        {
            HuffmanNode node=q.poll();
            System.out.print(node.weight+"\t");
            if(node.left!=null)
                q.add(node.left);
            if(node.right!=null)
                q.add(node.right);
        }
    }
}
/**
 * 用于创建哈弗曼树的节点类的描述
 * @author 学徒
 *
 */
class HuffmanNode
{
    //用于存放相关的数据
    Object data;
    //用于记录该节点的权
    int weight;
    //该节点的左孩子
    HuffmanNode left;
    //该节点的右孩子
    HuffmanNode right;
    public HuffmanNode()
    {
    }
    public HuffmanNode(Object data,int weight)
    {
        this.data=data;
        this.weight=weight;
    }
}

运行结果:

其最高顶点的权值15
15  6   9   3   3   4   5   1   2   

回去目录|·(工)·)

相关文章