IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Huffman编码---java代码实现 -> 正文阅读

[移动开发]Huffman编码---java代码实现

import java.util.*;

public class HuffmanCodeing {
    private String code;
    private BinaryTree huffmanTree;
    private class BinaryTree{
        private Character character;
        private BinaryTree leftTree;
        private BinaryTree rightTree;
        private double percent;
        public BinaryTree() {
        }

        public double getPercent() {
            return percent;
        }

        public void setPercent(double percent) {
            this.percent = percent;
        }

        public Character getCharacter() {
            return character;
        }

        public void setCharacter(Character character) {
            this.character = character;
        }

        public BinaryTree getLeftTree() {
            return leftTree;
        }

        public void setLeftTree(BinaryTree leftTree) {
            this.leftTree = leftTree;
        }

        public BinaryTree getRightTree() {
            return rightTree;
        }

        public void setRightTree(BinaryTree rightTree) {
            this.rightTree = rightTree;
        }
    }
    public HuffmanCodeing(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    private void calc(){
        Map<Character, Integer> map=new HashMap<>();
        PriorityQueue<BinaryTree> priorityQueue=new PriorityQueue<>(
                (o1, o2) -> (int)((o1.getPercent()-o2.getPercent())*1000000000));
        for(int i=0;i<this.code.length();i++){
            Character character=this.code.charAt(i);
            Integer integer=map.get(character);
            map.put(character,integer==null?1:integer+1);
        }
        for(Character character:map.keySet()){
            BinaryTree binaryTree=new BinaryTree();
            binaryTree.setCharacter(character);
            binaryTree.setPercent(map.get(character)*1.0/this.code.length());
            priorityQueue.add(binaryTree);
        }
//        while(!priorityQueue.isEmpty()){
//            Node node=priorityQueue.poll();
//            System.err.println(node.getData()+" "+node.percent);
//        }
        while(priorityQueue.size()!=1){
            BinaryTree rightNode=priorityQueue.poll();
            BinaryTree leftNode=priorityQueue.poll();
            BinaryTree node=new BinaryTree();
            node.setPercent(rightNode.getPercent()+leftNode.getPercent());
            BinaryTree treeNode=new BinaryTree();
            treeNode.setLeftTree(leftNode);
            treeNode.setRightTree(rightNode);
            priorityQueue.add(treeNode);
        }
        huffmanTree=priorityQueue.poll();
    }

    public void printHuffmanCoding(){
        if(huffmanTree==null)
            calc();
        BinaryTree binaryTree=huffmanTree;
        StringBuilder str=new StringBuilder();
        while(binaryTree!=null){
            if(binaryTree.getLeftTree()==null){
                System.err.println(binaryTree.getCharacter()+"   "+String.format("%.3f",binaryTree.getPercent()*100)+"%   "+str+"1");
                break;
            }
            System.err.println(binaryTree.getLeftTree().getCharacter()+"   "+String.format("%.3f",binaryTree.getLeftTree().getPercent()*100)+"%   "+str+"0");
            str.append('1');
            binaryTree=binaryTree.getRightTree();
        }
    }

    public static void main(String[] args) {
        HuffmanCodeing huffmanCodeing=new HuffmanCodeing("My school is very beautiful. I like my school very much." +
                "There is a big playground in my school and we often play sports on it ." +
                "My classroom is big and clean." +
                "There are many books in the library." +
                "I often read books here." +
                "There are some music rooms and art rooms in the teaching building, too." +
                "The teachers in my school are very kind ." +
                "The students are very polite and smart." +
                "I am happy in my school");
        huffmanCodeing.printHuffmanCoding();
    }
}

运行结果(第一行的字符为空白符)

    18.159%   0
e   8.440%   10
o   7.417%   110
a   5.882%   1110
r   5.882%   11110
s   5.627%   111110
i   5.115%   1111110
n   4.859%   11111110
h   4.348%   111111110
t   3.836%   1111111110
y   3.836%   11111111110
l   3.581%   111111111110
m   3.325%   1111111111110
c   2.813%   11111111111110
.   2.302%   111111111111110
d   2.302%   1111111111111110
u   1.790%   11111111111111110
b   1.790%   111111111111111110
p   1.535%   1111111111111111110
T   1.279%   11111111111111111110
g   1.279%   111111111111111111110
v   1.023%   1111111111111111111110
k   1.023%   11111111111111111111110
I   0.767%   111111111111111111111110
f   0.767%   1111111111111111111111110
M   0.512%   11111111111111111111111110
w   0.256%   111111111111111111111111110
,   0.256%   1111111111111111111111111111
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:42:07  更:2022-02-26 11:45:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:56:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码