ハフマン木データ構造(最適バイナリ)

アウトライン

一般に、N個の葉ノードとしてNの重みを与え、ハフマン木のハフマン木を指し、二分木構造、ツリーの加重経路の長さが最小に達した場合、そのようなバイナリツリーが呼び出され、最適なバイナリツリー、およびハフマン木(ハフマン木)と呼ばれます。
ハフマンツリーは、最短経路長加重ツリー、近いルートノードから大きな重みです。

アプリケーション

別のブログで説明するように1ハフマン(コーディングハフマン符号化

構造主義

nは重みがあると仮定し、ハフマン木は、n個のリーフノードで構成されています。n個の重み値をW1、W2に設定されている、...、施工規則はWN、ハフマンツリーは次のとおりです。

(1)W1、W2、...、Wnが(一つだけ存在する各ツリーノード)は、森の木のようにNです。

(2)左右のサブツリー内の新しいツリーとしてフォレスト2つの極小重量ツリーのマージのルートノードを選択し、ツリーが新しい左右のサブツリーのルートへの権利のルートでありますノードの重みの合計。

(3)森林、および新しい森林木の添加から2つのツリーを選択して削除します。

(4)繰り返し(2)、(3)工程のみ木、ハフマン木により得られる木まで森まで。

ここに画像を挿入説明

コードの実装

ノードクラス

public class Node implements Comparable<Node>{
	
	int value;
	Node left;
	Node right;
	
	public Node(int value) {
		this.value = value;
	}
	
	@Override
	public int compareTo(Node o) {
		// TODO Auto-generated method stub
		return this.value - o.value;  //整体添加负号表示从大到小排序
	}
	
	@Override
	public String toString() {
		//重写toString方法,只显示value值
		return "Node [value=" + value + "]";
	}

	public int getDate() {
		// TODO Auto-generated method stub
		return this.value;
	}

}

ミアン:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestHuffmanTree {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		int[] arr = {3,7,8,29,5,11,23,12};
		Node node = creatHuffmanTree(arr);
		System.out.println(node);  //打印出根结点(最小根)
		
	}
	
	//创建赫夫曼树
	public static Node creatHuffmanTree(int[] arr) {
		//使用数组中的所有元素创建若干个二叉树(只有一个结点)
		List<Node> nodes = new ArrayList<>(); //创建二叉树集合
		for(int value:arr) {
			nodes.add(new Node(value));
		}
		
		//循环处理
		while(nodes.size() > 1) {
			//排序
			Collections.sort(nodes);
			//取出权值最小的两个二叉树
			Node left = nodes.get(nodes.size()-1);
			Node right = nodes.get(nodes.size()-2);
			//组成一个新的二叉树,根节点权值为两子节点权值之和
			Node parent = new Node(left.getDate() + right.getDate());
			parent.left = left;
			parent.right = right;
			//把取出来的两个二叉树移除
			nodes.remove(left);
			nodes.remove(right);
			//将新二叉树放入原来的二叉树集合中
			nodes.add(parent);
		}
		return nodes.get(0);
	}

}

リリース9件のオリジナルの記事 ウォンの賞賛5 ビュー344

おすすめ

転載: blog.csdn.net/qq_42964349/article/details/104331719