首页 > 其他分享 >2024年10月30日总结

2024年10月30日总结

时间:2024-10-30 22:47:23浏览次数:7  
标签:10 right root 30 queue 2024 frequency HuffmanNode data

今天下午对上午学习的哈夫曼树进行了复习,自己结合ai尝试进行了哈夫曼树的构建
class HuffmanNode implements Comparable {
char data; // 节点的数据(字符)
int frequency; // 节点的频率
HuffmanNode left, right; // 左右子节点

HuffmanNode(char data, int frequency) {
    this.data = data;
    this.frequency = frequency;
}

// 实现节点的比较方法,按频率排序
@Override
public int compareTo(HuffmanNode other) {
    return this.frequency - other.frequency;
}

}

// 哈夫曼树类
public class HuffmanTree {
// 构建哈夫曼树
public static HuffmanNode buildHuffmanTree(char[] data, int[] frequency) {
PriorityQueue queue = new PriorityQueue<>();

    // 将每个字符和对应频率作为叶子节点加入队列
    for (int i = 0; i < data.length; i++) {
        queue.add(new HuffmanNode(data[i], frequency[i]));
    }
    
    // 合并节点直到队列中只剩一个根节点
    while (queue.size() > 1) {
        HuffmanNode left = queue.poll();
        HuffmanNode right = queue.poll();
        int sum = left.frequency + right.frequency;
        HuffmanNode parent = new HuffmanNode('-', sum);
        parent.left = left;
        parent.right = right;
        queue.add(parent);
    }
    
    return queue.poll();  // 返回根节点
}

// 打印哈夫曼编码
public static void printHuffmanCodes(HuffmanNode root, String code) {
    if (root == null) return;

    // 如果是叶子节点,打印编码
    if (root.left == null && root.right == null) {
        System.out.println(root.data + ": " + code);
        return;
    }

    // 递归生成编码
    printHuffmanCodes(root.left, code + "0");
    printHuffmanCodes(root.right, code + "1");
}

public static void main(String[] args) {
    char[] data = { 'a', 'b', 'c', 'd', 'e', 'f' };
    int[] frequency = { 5, 9, 12, 13, 16, 45 };
    HuffmanNode root = buildHuffmanTree(data, frequency);
}

}

标签:10,right,root,30,queue,2024,frequency,HuffmanNode,data
From: https://www.cnblogs.com/szxworld/p/18516766

相关文章

  • stm32f103c8t6产生互补的pwm波,spwm(滤波后50hz正弦波)
    spwm需要代码关注私发stm32f103c8t6产生互补的pwm波main.c#include"stm32f10x.h"//Deviceheader#include"Delay.h"#include"OLED.h"#include"Timer.h"voidbspTIMInit(void){ GPIOConfig(); TIM1Config()......
  • 3.C语言中scanf 和printf的重点介绍(续10/25篇)
    文章目录一、printf1.1基本用法1.2占位符1.3占位符列举1.4输出格式1.4.1限定宽度1.4.2总显示正负号1.4.3限定小数位数1.4.4输出部分字符串二、scanf2.1基本用法2.2scanf的返回值2.3占位符2.4赋值忽略符总结一、printf1.1基本用法printf()的作用......
  • 2024/10/30
    今天学习了对页面输入内容的约束写法/提交日报逻辑document.getElementById('submitForm').addEventListener('submit',function(e){e.preventDefault();letbatch=document.getElementById('batch').value;letworkerId=document.getElementById('w......
  • 性能分析202410月
    https://www.cnblogs.com/yungyu16/p/13032994.htmlhttps://mytechshares.com/2022/04/06/why-time-source-impact-performance/https://github.com/hust-open-atom-club/linux-insides-zh/blob/master/Misc/linux-misc-1.mdhttps://github.com/0voice/Understanding_in_Ru......
  • 【专题】2023-2024中国保险数字化营销调研报告汇总PDF洞察(附原数据表)
    原文链接: https://tecdat.cn/?p=38063在时代浪潮的推动下,中国保险行业正经历着一场波澜壮阔的变革之旅。2023年,中国经济迈向高质量发展阶段,保险公司纷纷聚焦队伍转型,专业化、职业化代理人成为行业新方向。回顾保险代理人队伍发展,历经多次变革,从早期扩张到面临问题,再到如今的规......
  • SS241030C. 桥梁(bridge)
    SS241030C.桥梁(bridge)题意本人小时候也分不清fridge和bridge给你\(n\)个点,\(m\)条边的图,边带权。有\(q\)个要求。每个要求给出\(a_i,b_i\),要求至少选中第\(a_i\)或\(b_i\)条边。问最小代价选边使得图连通。solution注意到\(q\le16\),可以直接枚举每个要求必......
  • 2024CCPC哈尔滨部分题解
    赛时被评测机卡死了M.奇怪的上取整求\(\sum_{i=1}^{n}f(n,i)\)\(Input\)第一行一个整数\(T(1<=T<=10^3)\),表示数据组数对于每组数据,一行一个整数\(n(1<=n<=10^9)\)\(Output\)对于每组数据,输出一行一个整数,表示答案。\(Sample\)35451114514————————21T10......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......
  • 高校联动,创新无限!“2024 深圳国际金融科技大赛”校园行活动圆满结束
    在金融科技蓬勃发展的当下,人才培养成为推动行业前行的关键。为推进深圳市金融科技人才高地建设,向高校学子提供一个展示自身知识、能力和创意的平台,2024FinTechathon深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛重磅开启,并精心筹备了一系列精彩活动。自报名启动后,大......